티스토리 뷰

한화시스템/백엔드

[BE] JAVA_형변환

jjam-mo 2024. 7. 13. 13:14

1. (자료)형변환 개요

1-1. 형변환(casting)이란?

💡변수 또는 리터럴을 다른 타입으로 변환하는 것
형변환 하는 이유 : 프로그램에서 변수에 값을 넣거나 연산을 수행할 때는 같은 타입끼리만 가능하기 때문

1-2. 형변환의 종류 및 규칙

1-2-1. 자동 형변환 (묵시적 형변환)

💡컴파일러가 자동으로 수행해주는 타입 변환이다. 데이터 손실 가능성이 없는 경우 자동으로 타입을 맞춰줌.

역방향은 자료형 데이터 손실 발생!
char형은 양수만 되기 때문에 int에서 형변환 불가!!

package com.ohgiraffers.section05.typecasting;

public class Application1 {
    public static void main(String[] args) {

        /* 수업목표. 자동 형변환(Implicit Coercion) 규칙에 대해 이해할 수 있다. */
        byte bNum = 1;

        short sNum = (short)bNum;
        int iNum = sNum;

        /* 설명. 연산 시에도 자동으로 큰 자료형에 맞춰서 낮은 자료형이 자동형변환 된다.*/
        int num1 = 10;
        long num2 = 20L;

        long result1 = num1 + num2;
        System.out.println("result1 = " + result1);

        /* 설명. 문자형은 int형으로 자동형변환 가능하다. */
        int ch1 = 'a';
        System.out.println("ch1 = " + ch1);

        /* 설명. int형에서 char형에 담기는 건 작은 범위로 대입되지만 가능하다.(예외) */
        char ch2 = 65;
    }
}

1-2-2. 강제 형변환 (암시적 형변환)

💡형변환(casting) 연산자를 이용한 강제적으로 수행하는 형변환
자동형변환의 조건과 정 반대인 경우 강제 형변환을 사용
package com.ohgiraffers.section05.typecasting;

public class Application2 {
    public static void main(String[] args) {

        /* 수업목표. 강제 형변환 규칙에 대해 이해할 수 있다. */
        /* 필기.
         *   강제형변환
         *   바꾸려는 자료형으로 캐스트 연산자((자료형))를 이용하여 형변환한다.
         * */

        long lNum = 80000000000L;
        int iNum = (int)lNum;
        System.out.println("iNum = " + iNum);

        float avg = 31.235f;
        int floorNum = (int)avg;
        System.out.println("floor = " + floorNum);
    }
}

1-3. 자동형변환과 강제형변환을 이용한 연산 

1-3-1. 서로 다른 자료형끼리의 연산

/* 다른 자료형 끼리 연산은 큰 자료형으로 자동 형변환 후 연산 처리 된다. */
int inum = 10;
long lnum = 100;

/* 자바에서는 같은 자료형끼리만 연산이 가능하다.
* 따라서 서로 자료형이 다른 두 자료를 연산할 때 자료형이 같아지도록 형변환을 해 주어야 한다.
* */

/* 방법1. 두 수의 연산 결과를 int 형으로 변환 후 int 자료형 변수에 리턴받는다. */
//int isum = inum + lnum;		//그냥은 안된다. 두 자료형의 연산 결과는 큰 쪽 자료형인 long이 되고, long형 값은 int형 변수에 담길 수 없다.
int isum = (int) (inum + lnum);

System.out.println("isum : " + isum);

/* 방법2. long 형 값을 int로 강제 형변환 한다. */
int isum2 = inum + (int) lnum;

System.out.println("isum2 : " + isum2);

/* 방법3. 결과 값을 long형 자료형으로 받는다(자동 형변환 이용) */
long lsum = inum + lnum;

System.out.println("lsum : " + lsum);

// 실행 결과
isum : 110
isum2 : 110
lsum : 110

1-3-2. 형변환을 이용한 연산 시 주의사항

/* 주의! int 미만의 연산의 처리 결과는 int형 이다. */
byte byteNum1 = 1;
byte byteNum2 = 2;
short shortNum1 = 3;
short shortNum2 = 4;

int result1 = byteNum1 + byteNum2;
int result2 = byteNum1 + shortNum1;
int result3 = shortNum1 + byteNum1;
int result4 = shortNum1 + shortNum2;

System.out.println("result1 : " + result1);
System.out.println("result2 : " + result2);
System.out.println("result3 : " + result3);
System.out.println("result4 : " + result4);

// 실행 결과
result1 : 3
result2 : 4
result3 : 4
result4 : 7

1-3-3. 의도하지 않은 데이터 손실

int inum = 290;
byte bnum = (byte) inum;

System.out.println("inum : " + inum);
System.out.println("bnum : " + bnum);		//비트 앞부분 손실로 예측 어려움

// 실행 결과
inum : 290
bnum : 34

1-3-4. 의도한 데이터 손실

double height = 175.5;
   int floorHeight = (int) height;

   System.out.println("height : " + height);
   System.out.println("floorHeight : " + floorHeight);		//소수점 절삭에 이용할 수 있다.
   
// 실행 결과
height : 175.5
floorHeight : 175

'한화시스템 > 백엔드' 카테고리의 다른 글

[BE] JAVA_메소드  (0) 2024.07.13
[BE] JAVA_연산자  (0) 2024.07.13
[BE] JAVA_오버플로우  (0) 2024.07.13
[BE] JAVA_상수  (0) 2024.07.13
[BE] JAVA_변수  (0) 2024.07.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함