Posts ☕️ [Java] 30일 안에 기초 떼기/ DAY-04
Post
Cancel

☕️ [Java] 30일 안에 기초 떼기/ DAY-04

◻️ DAY-04


챕터형 변환
2-5형 변환
Quiz연습문제 풀이



◻️ 형 변환이란?


  • 정수와 실수는 표현되는 방식이 전혀 다르다, 따라서 정수와 실수를 더할 때 그대로 연산을 수행할 수 없다.
  • 하나의 자료형으로 통일한 후 연산을 해야 하는데, 이 때 형 변환(type conversion)이 일어난다.
  • 형 변환이란 아래와 같이 각 변수의 자료형이 다를 때 자료형을 같게 바꾸는 것을 말한다.
1
2
int n = 10;             // int형 변수 n에 값 10을 대입
double dnum = n;        // int형 변수 n의 값을 double 형 변수 dnum에 대입



묵시적 형 변환


  1. 바이트 크기가 작은 자료형에서 큰 자료형으로의 형 변환은 자동으로 이루어진다.
  2. 덜 정밀한 자료형에서 더 정밀한 자료형으로의 형 변환은 자동으로 이루어진다.


  • [ 정수 byte(1바이트)short(2바이트), char(2바이트)int(4바이트)long(8바이트) ] ➡ [ 실수 float(4바이트)double(8바이트) ]
  • 위 상황과 반대로 형 변환을 하려면 강제로 변환해야 한다. (명시적 형 변환)
  • long형이 8바이트이고 float형이 4바이트인데 자동 형 변환이 되는 것은, 실수가 정수보다 표현 범위가 넓고 정밀하기 때문이다.
1
2
int iNum = 20;
float fNum2 = iNum;


  • intfloat처럼 두 변수의 바이트 크기가 같더라도, 데이터를 더 정밀하게 표현할 수 있는 float으로 변환된다.


1
2
3
byte bNum = 10;
int iNum = bNum;    // byte 형 변수 bNum 값을 int 형 변수 iNum에 대입한다
                    // byte 보다 큰 자료형 int로 자동으로 형변환됨



묵시적 형 변환 실습


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
/*
 * Date: 2021-05-10
 * Author: 이오니
 * Project: [자바 초보탈출 30일]
 * Section: 04일차
 * Subject: "형 변환(Type Conversion)_(1)"
 */

 /* 자동 형 변환(묵시적 형 변환)의 조건
    1) 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환 자동
    2) 덜 정밀한 자료형에서 더 정밀한 자료형으로 형 변환 자동
 */ 

package section_02.type_conversion1;

public class type_conversion1_0 {

    public static void main(String[] args) {
        byte bNum = 10;
        int iNum2 = bNum;           // byte 형 값이 int형 변수로 대입된 상황
                                    // byte보다 int의 바이트 크기가 크므로 자동으로 형 변환이 이루어진다
        System.out.println(iNum2);
        System.out.println(bNum);

        int iNum = 20;
        float fNum = iNum;          // int형 값이 float 형 변수로 대입된 상황
        System.out.println(iNum);   // int와 float의 바이트 크기는 동일하지만 float이 더 정밀한 자료형이므로 자동으로 형 변환이 이루어진다
        System.out.println(fNum);
    }
}



명시적 형 변환 실습


👀 명시적 형 변환의 조건

  1. 크기가 큰 바이트에서 작은 바이트로 대입하는 경우 강제로 명시적 형 변환을 해야 한다
  2. 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우 강제로 명시적 형 변환을 해야 한다
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
/*
 * Date: 2021-05-10
 * Author: 이오니
 * Project: [자바 초보탈출 30일]
 * Section: 04일차
 * Subject: "형 변환(Type Conversion)_(2)"
 */

 /* 명시적 형 변환의 조건(묵시적 형 변환의 반대 개념)
    1) 바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우, 강제 형 변환 필요
    2) 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우, 강제 형 변환 필요
 */ 

package section_02.type_conversion1;

public class type_conversion1_1 {
    public static void main(String[] args) {
        int iNum = 10;
        byte bNum = (byte)iNum; // 강제로 형을 변환하려면, 변환할 형을 괄호로 명시해야 함
        System.out.println(iNum);
        System.out.println(bNum);

        double dNum = 3.14;
        int iNum3 = (int)dNum;  // 실수 자료형 double을 정수자료형 int로 변환 (이 경우, 소수점 이하 부분은 생략되고 정수부분만 대입됨)
        System.out.println(dNum);
        System.out.println(iNum3);
        
    }
}



연산 중 형 변환 실습


👀 연산 중 형 변환에서 주의해야 할 점은, 형 변환이 이루어지는 시점에 따라 결과값이 다르게 나타날 수 있다는 점이다.

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
/*
 * Date: 2021-05-10
 * Author: 이오니
 * Project: [자바 초보탈출 30일]
 * Section: 04일차
 * Subject: "형 변환(Type Conversion)_(3)"
 */

 // 연산 중 형 변환

package section_02.type_conversion1;

public class type_conversion1_2 {
    public static void main(String[] args) {
        double dNum1 = 1.2;
        float fNum2 = 0.9F;

        int iNum3 = (int)dNum1 + (int)fNum2;    // 두 실수가 각각 int로 형 변환되어 더해짐 (1 + 0 = 1)
        int iNum4 = (int)(dNum1 + fNum2);       // 두 실수의 합이 먼저 계산된 후 int로 형 변환 (1.2 + 0.9 = 2.1 = 2)
                                                // 이처럼 형 변환이 언제 이루어지냐에 따라 그 결과 값이 다르게 나타날 수 있다.
        
        System.out.println(iNum3);
        System.out.println(iNum4);
    }
    
}



1분 복습!


Q. 주석 내용에 맞게 코드를 완성하세요

1
2
3
4
5
6
7
8
9
public class characterEx1 {
    public static void main(String[] args) {
        char ch1 = 'A';
        System.out.println((int)ch1);   // 문자에 해당하는 정수 값(ASCII) 출력

        int ch2 = 67;
        System.out.println((char)ch2);  // 정수 값(ASCII)에 해당하는 문자 출력
    }
}



Quiz


Q1. 바이트 크기가 작은 자료형을 더 큰 자료형으로 대입하는 형 변환은 자동으로 이루어진다 (예/아니오) > 예

Q2. 실수를 정수형 변수에 대입하는 경우 형 변환이 자동으로 이루어지고, 소수점 이하 부분만 없어진다 (예/아니오) > 아니오(더 정밀한 자료형을 덜 정밀한 자료형에 대입하는 경우, 강제 형 변환(명시적 변환)이 요구된다)

Q3. 더 많은 실수를 표현하기 위해 가수부와 지수부로 비트를 나누어 표현하는 방식을 (__) 라고 한다 > 부동 소수점 방식

Q4. 변수 두 개를 선언해서 10과 2.0을 대입하고 두 변수의 사칙 연산 결과를 정수로 출력해 볼 것

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
/*
 *   Q. 변수 두 개를 선언해서 10과 2.0을 대입하고 두 변수의 사칙 연산 결과를 정수로 출력해볼 것
 *   Ref: Do it! 자바 프로그래밍 입문 69p 연습문제 Q4
 */



package section_02.type_conversion1;

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

            int iNum5 = 10;
            float fNum5 = 2.0F;

            int iSum = (int)iNum5 + (int)fNum5;
            int iSub = (int)iNum5 - (int)fNum5;
            int iDiv = (int)iNum5 / (int)fNum5;
            int iTime = (int)iNum5 * (int)fNum5;
            
            System.out.println(iSum);
            System.out.println(iSub);
            System.out.println(iDiv);
            System.out.println(iTime);
    }
}

Q5. ‘글’ 이라는 한글 문자의 유니코드 값을 찾아서 cahr 형으로 선언한 변수에 저장한 뒤 그 변수를 출력하여 확인해 볼 것 ASCII 코드 변환표.pdf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
 *   Q. '글' 이라는 한글 문자의 유니코드 값을 찾아서 char 형으로 선언한 변수에 저장한 뒤 그 변수를 출력하여 확인해 볼 것
 *   Ref: Do it! 자바 프로그래밍 입문 69p 연습문제 Q5
 *   ASCII Ref: http://unicode.org/charts/PDF/UAC00.pdf
 */


package section_02.type_conversion1;

public class type_conversion1_4 {
    public static void main(String[] args) {
        char ch1 = '\uAE00';    // 작성방법: \(백슬래시)u + 해당 아스키코드
        System.out.println(ch1);
    }
}

This post is licensed under CC BY 4.0 by the author.