Minwoo Dev.

[Java] 데이터 형변환 본문

Java

[Java] 데이터 형변환

itisminu 2023. 10. 30. 23:40
728x90
반응형
SMALL

이번 게시물에서는 Java에서 데이터의 형변환을 하는 방법에 대해서 설명하겠다.

 

  Type Size in bytes Range Default Value
문자 타입 char 2 byte 0 ~ 65,535 '\u000'
정수 타입 byte 1 byte -128 ~ 127 0
short 2 byte -32,768 ~ 32,767 0
int 4 byte -2,147,483,648 ~ 2,147,483,647 0
long 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0L
실수 타입 float 4 byte (-3.4 x 10E-38) ~ (3.4 x 10E38)의 근사값 0.0F
double 8 byte (1.7 x 10E-308) ~ (1.7 x 10E308)의 근사값 0.0
논리 타입 boolean 1 byte true, false false

 

 

위의 표는 Java 에서 사용하는 데이터 타입들이다.

 

보면 같은 타입이라도 여러가지 변수 타입이 있는 것을 알 수 있다. 따라서 코드를 작성하다 보면 형변환을 해야하는 상황이 무조건 올 것이다.

차근차근 알아보자.

 

1.  int 정수형 변수를 float, double 형 변수로 형변환하기 (출력)

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
        // int to float, double
        int score = 93;
        System.out.println(score); // 93
    }
}

int 형 정수형 변수를 만들고 그 안에 93이라는 정수값을 저장했다.

그리고 출력하면 93이라는 결과가 출력된다.

위 score 변수를 float형 혹은 double 형으로 출력하고 싶다면 어떻게 해야하겠는가 ?

 

답은 아래와 같다.

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
        // int to float, double
        int score = 93;
        System.out.println(score); // 93
        System.out.println((float)score); // 93.0
        System.out.println((double)score); // 93.0
    }
}

변수의 앞에 괄호를 이용하여 바꾸려는 형을 입력한다면 출력값이 바뀌어 나오는 것을 확인할 수 있다.

위 소스코드의 출력 결과는 아래와 같다.

두 번째 출력과 세번째 출력이 각각 float형과 double형으로 변환한 값이다.

 

 

 

2. float, double형 변수를 int형 변수로 형변환하기 (출력)

그럼, 반대로 float, double형 변수를 int형으로 변환해 보자.

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
        // float, double to int
        float score_f = 93.3F;
        double score_d = 98.8;

    }
}

float 형 score_f와 double형 score_d를 int형으로 변환해 보겠다.

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
        // float, double to int
        float score_f = 93.3F;
        double score_d = 98.8;
        System.out.println((int)score_f); 
        System.out.println((int)score_d); 

    }
}

 

근데 여기서 의문점이 생긴다.

실수인 수를 정수로 바꾸면 소수점이 없어지지 않는가 ?

그럼 사라질 때 반올림을 하는가 ? 아니면 그냥 버려지는가 ?

 

위 소스코드를 실행하여 확인해보겠다.

두 번째 출력값이 99가 아니라 98인 것을 보아 반올림하는 것이 아닌 그냥 소수점 데이터를 버리는 것임을 알 수 있다.

 

 

다음은 정수와 실수의 연산에 대하여 알아보겠다.

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
     // 정수 + 실수 연산
     	int score = 0;
        double score_d = 98.8
        score = 93 + (int)98.8; // 93 + 98
        System.out.println(score); // 191

        score_d = 93 + 98.8; // 정수 + 실수에서 정수는 자동으로 .0으로 인식
        System.out.println(score_d); // 191.8

    }
}

위의 연산을 보면 93 + 98.8 을 score이라는 변수에 넣고 있음을 알 수 있다.

여기서 93은 int 형 변수, 98.8은 double형 변수이다. 따라서 두 수가 더해진다면 다른 형의 두 수를 int형 변수에 넣는 것이다.

따라서 double형 변수인 98.8을 정수형인 int형으로 형변환하여 연산해야 한다.

그 코드가 score = 93 + (int)98.8 이다.

98.8을 정수형으로 바꾸면 소수점이 버려진 98이므로 연산 결과는 191이 된다.

 

이번에는 double형 변수에 정수 + 실수 연산을 해보겠다.

score_d = 93 + 98.8;

위 코드를 보면 int 형인 93과 double형인 98.8을 더하는 연산임을 알 수 있다. 

하지만 여기서 93은 (double)93이라고 적지 않았다.

왜일까?

 

그 이유는 "자동 형 변환" 에 있다.

int -> long -> float -> double

위 순서의 형변환이라면 자동적으로 형변환이 되어 별도로 형변환을 시킬 필요가 없다.

 

위 예제의 int형에서 double형 변수로의 형변환도 같은 이유로 자동 형변환된것이다.

 

반대로, 수동적으로 형 변환을 명시해야하는 순서는 아래와 같다.

double -> float -> long -> int

 

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
    	int score = 191;
        double score_d = 191.8
    	// 변수에 형변환된 데이터 집어넣기
        double convertedScoreDouble = score; // 191 -> 191.0
        // int -> long -> float -> double (자동 형변환)

        int convertedScoreInt = (int)score_d; // 191.8 -> 191
        // double -> float -> long -> int (수동 형변환)

    }
}

 

마지막으로, 문자열과 숫자 사이의 변환에 대하여 알아보겠다.

프로그래밍 언어들에서, "14" 와 14는 다른 값이다.

"14"는 문자열이고, 14는 정수로 인식되기 때문이다.

그렇다면 문자열로 입력된 숫자를 정수로 바꾸거나 반대로 할 수 있지 않을까 ? 

 

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
    	// 숫자를 문자열로
        String s1 = String.valueOf(93);
        s1 = Integer.toString(93);
        System.out.println(s1); // 93

        String s2 = String.valueOf(98.8);
        s2 = Double.toString(98.8);
        System.out.println(s2); // 98.8

        // 문자열을 숫자로
        int i = Integer.parseInt("93");
        System.out.println(i); // 93
        double d = Double.parseDouble("98.8");
        System.out.println(d); // 98.8

        // 숫자가 아닐 경우
        int error = Integer.parseInt("자바");
        System.out.println(error);
    }
}

우선 숫자를 문자열로 바꾸는 방법에 대해 먼저 보겠다.

숫자를 문자열로 바꾸는 방법, 즉 14를 "14"로 바꾸는 방법으로는 두 가지가 있다.

 

●  String.vlaueOf 사용하기

String val = String.valueOf(93);

위와 같이 코드를 작성한다.

93이라는 정수를 "93"이라는 문자열의 형식으로 바꾸어 준다.

 

●  Integer.toString 사용하기

String s1 = Integer.toString(93);

위와 같이 작성하는 방법도 있다.

 

두 변수를 출력하면 다음과 같이 출력된다.

 

 

그 다음, 문자열을 숫자로 바꾸는 방법도 알아보겠다.

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
        // 문자열을 숫자로
        int i = Integer.parseInt("93");
        System.out.println(i); // 93
        double d = Double.parseDouble("98.8");
        System.out.println(d); // 98.8

        // 숫자가 아닐 경우
        int error = Integer.parseInt("자바");
        System.out.println(error);
    }
}

 

먼저, 문자열에서 정수를 만들 때다

 

● Integer.parseInt 사용하기

int i = Integer.parseInt("93");

 

 

그 다음, 문자열에서 실수를 만들 때

 

●. Double.parseDouble 사용하기

double d = Double.parseDouble("98.8");

 

이런 식으로 하면 된다.

 

 

 

근데, 문자열에 숫자가 아닌 정말 문자가 들어가있다면 어떻게 될까?

package chapter_01;

public class _07_TypeCasting {
    public static void main(String[] args) {
        // 숫자가 아닐 경우
        int error = Integer.parseInt("자바");
        System.out.println(error);
    }
}

위 프로그램을 실행하면

위처럼 에러가 발생하는 것을 알 수 있다.

 

 

여기까지가 형변환에 대한 설명이다.

 

출처 - 나도코딩 Java 강의 - https://www.youtube.com/watch?v=NQq0dOoEPUM&t=5915s

728x90
반응형
LIST

'Java' 카테고리의 다른 글

[Java] 산술 연산자  (0) 2023.10.31
[Java] 퀴즈 1. 버스 도착 정보 출력  (0) 2023.10.31
[Java] 변수 상수로 만들기  (0) 2023.10.29
[Java] 변수 이름짓기  (2) 2023.10.29
[Java] 주석  (0) 2023.10.28