ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Type Casting
    Programming Lang/Java 2021. 7. 1. 22:17

    형변환이란?

    Type Casting

    높은 온도에서 가열하여 액체로 만들어 형(型)에 부어 굳히는 가공 방법

    변수/상수 타입을 다른 타입으로 변환하는 것

     

    형변환 방법

    변수 및 리터럴 앞에 괄호 추가

    (타입) 피연산자
    public class Java_1_Casting {
    	public static void main(String[] args) {
    		//***변수 파트
    		
    		//1. 숫자 담기
    		int val = 10;
    		
    		//2. 초기화
    		val = 0;
    		
    		//3. 임의의 숫자 입력
    		val = 65;
    		
    		//4. 문자로 형변환
    		char str = (char) val;
    		
    		//5. 출력
    		System.out.println("int val : " + val);
    		System.out.println("char str : " + str);
    	}
    }

    피연산자를 형변환을 한다고 하여 기존의 값이 변하지 않는다.

    변환한 결과를 반환하는 것과는 별개.

    double d = 85.4;
    int score = (int) d; ← d는 그대로, score에 변환된 결과를 담는다.

    기본형에서 boolean을 제외한 나머지 타입들은 서로 형변환이 가능하다.

    기본형과 참조형은 형변환이 불가능하다. (참조형은 7장이므로 보류)

     ▼   기본형의 형변환

    int → char : 아스키코드

    char → int : 아스키코드 값

    float → int : 정수 (소숫점 아래 버림)

    int → float : 소숫점 추가 (정수에서 변환되므로 값 자체는 똑같지만 표현은 ".0f" 가 붙는다)

     

    정수형 간의 형변환

    사람은 수치를 10진수로 생각하지만 컴퓨터는 2진법으로 저장.

    오로지 1과 0으로 저장을 하는데, 무한정으로 저장할 수 있는게 아니라, 타입에 따라 사이즈가 다르다.

    byte < int < float < double < long

    2진수로 나타낼 수 있는 숫자의 크기의 순서이다.

    사이즈가 적은 곳에 큰 숫자를 담으려고 할 경우, 형변환을 하게 되면 1로 채워져있는 데이터가 증발.

    (음수의 경우, 보수를 나타낼 때에 앞 빈공간에 1로 채워주는 것은 제외)

    즉, 값의 손실(loss of data)가 발생하게 된다. 반대의 경우는 손실이 발생하지 않는다.

     

    실수형 간의 형변환

    지수(E), 가수(M) 로 나누어서 각각 빈공간을 0으로 채운다.

    float → double : 가수 52자리중 23자리까지만 저장되고 나머지는 버린다.

    double → float : 가수의 24번째 자리에서 반올림 발생할수 있다.

    float 타입의 범위를 초과할 경우, 무한소수 or 0이 된다.

    무한소수 : 1.99999999999999999

    0 : 1.99999990000000000

      

    정수형 → 실수형 으로 형변환

    : 반올림

     

    정수를 2진수로 변환한 다음 정규화를 거쳐 실수의 저장 형식에 맞게 저장.

    실수형의 정밀도 제한으로 인해 오차가 발생할 우려 존재.

     

    ※ 주의! 단어 뜻 헷갈리지 말 것!

    정규식 Regular Expression

       특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어

    정규화 Normalization

       데이터값의 범위를 compact(치밀,세밀)하게 만들어주기 위해서 사용

     

    실수형 → 정수형 으로 형변환

    : 소수점 이하 버림

     

    명시적 형변환과 묵시적 형변환

    명시적: 의도적으로

    묵시적: 자동적으로 (=생략)

     

    자동 형변환의 규칙

    기존의 값을 최대한 보존할 수 있는 타입으로 값의 손실이 없다.

    타입이 다른 값들의 계산을 수행하려고 할 경우 형변환을 하는 것이 원칙이지만,

    작은 값을 작은 값의 타입과 큰 타입의 연산을 할 경우, 형변환 생략이 가능하다.

    아래의 경우 형변환을 하지 않아도 묵시적으로 형변환이 되므로 값의 손실이 발생하지 않는다.

    int a1 = 3;
    double b1 = 5000.5;
    //(생략가능) 
    System.out.println((double)(a1 * b1));	//결과: 15001.5
    System.out.println(a1 * b1);		//결과: 15001.5

    아래의 경우 형변환을 하지 않으면 값의 손실이 발생한다.

    int a2 = 3;
    double b2 = 5000.5;
    //(생략불가능)
    System.out.println((int)(a2 * b2));	 //결과: 15001
    System.out.println(a2 * b2);		 //결과: 15001.5

     

    더보기

    참고 서적 : 자바의 정석

     

    'Programming Lang > Java' 카테고리의 다른 글

    [Java] Inheritance, Overriding  (0) 2022.09.09
    [Java] Class, Instance, Constructor  (0) 2022.09.07
    [Java] Variable, Method, JVM  (0) 2022.09.05
    [Java] String Array  (0) 2022.08.28
    [Java] Operator  (0) 2022.08.27
Designed by Tistory.