볞묞 바로가Ʞ
📖 Java/💊 Java 강의

Java 입묞 강의_슀윔프, 형변환

by carrot0911 2024. 11. 1.

슀윔프1 - 지역 변수와 슀윔프

변수는 ì„ ì–ží•œ 위치에 따띌 지역 변수, 멀버 변수(큎래슀 변수, 읞슀턎슀 변수)와 같읎 분류된닀.
지ꞈ까지 학습한 변수듀은 몚두 영얎로 로컬 변수(Local Variable) 한Ꞁ로 지역 변수띌 한닀.

지역 변수는 읎늄 귞대로 특정 지역에서만 사용할 수 있는 변수띌는 뜻읎닀. íŠ¹ì • 지역을 벗얎나멎 사용할 수 없닀.
여Ʞ서 말하는 지역읎 바로 변수가 선얞된 윔드 랔록( { } )읎닀. 지역 변수는 자신읎 선얞된 윔드 랔록 ( { } ) 안에서만 생졎하고, 자신읎 선얞된 윔드 랔록을 벗얎나멎 제거된닀.
따띌서 읎후에는 접귌할 수 없닀 🥲🥲

Scope1

package scope;

public class Scope1 {

    public static void main(String[] args) {
        int m = 10;  //m 생졎 시작

        if (true) {
            int x = 20;  //x 생졎 시작
            System.out.println("m = " + m);  //m 생졎 가능, 랔록 낎부에서 랔록 왞부는 ì ‘ê·Œ 가능!!
            System.out.println("x = " + x);  //x 생졎 가능
        }  //x 생졎 종료

        //System.out.println("main x = " + x);  //x 생졎 불가능, 였류 발생!! 변수 x에 ì ‘ê·Œ 불가...
        System.out.println("main m = " + m);  //m 생졎 가능
    }  //m 생졎 종료
}
  • int m
    • int m은 main{ } 의 윔드 랔록 안에서 선얞되었닀.
      따띌서 변수륌 ì„ ì–ží•œ 시점부터 main{ } 의 윔드 랔록읎 종료될 때까지 생졎 가능하닀.
    • if{ } 랔록 낎부에서도 왞부 랔록에서 선얞된 m에 접귌할 수 있닀.
      쉜게 읎알Ʞ핎서 생졎 범위만 맞윌멎 ë‹€ 접귌할 수 있닀.
  • int x
    • int x는 if{ } 랔록 안에서 선얞되었닀.
      따띌서 변수륌 ì„ ì–ží•œ 시점부터 if{ } 의 윔드 랔록읎 종료될 때까지 생졎 가능하닀.
    • if{ } 낎부에서는 자신의 범위에서 ì„ ì–ží•œ x에 당연히 접귌할 수 있닀.
    • if{ } 윔드 랔록읎 끝나버늬멎 x는 제거된닀. 따띌서 더는 x에 접귌할 수 없닀.
      읎후에 접귌하멎 cannot find symbol 읎띌는 변수 읎늄을 찟을 수 없닀는 컎파음 였류가 발생한닀.

정늬하멎 지역 변수는 볞읞의 윔드 랔록 안에서만 생졎 가능하닀. 귞늬고 자신의 윔드 랔록 안에서는 얌마든지 접귌할 수 있닀.
하지만 자신의 윔드 랔록을 벗얎나멎 제거되Ʞ 때묞에 접귌할 수 없닀... 🥲🥲

읎렇게 변수의 ì ‘ê·Œ 가능한 범위륌 슀윔프(Scope)띌고 한닀. ì°žê³ ë¡œ Scope륌 번역하멎 범위띌는 뜻읎닀.

int m은 main{ } 전첎에서 접귌할 수 있Ʞ 때묞에 슀윔프가 넓고, int x는 if{ } 윔드 랔록 안에서만 접귌할 수 있Ʞ 때묞에 슀윔프가 짧닀.

Scope2

package scope;

public class Scope2 {

    public static void main(String[] args) {
        int m = 10;  //m 생졎 시작

        for (int i = 0; i < 2; i++) {  //i 생졎 시작, 랔록 낎부, for묞 낎에서만...
            System.out.println("for m = " + m);  //랔록 낎부에서 왞부는 ì ‘ê·Œ 가능!!
            System.out.println("for i = " + i);  //i 생졎 가능
        }  //i 생졎 종료

        System.out.println("main m = " + m);  //m 생졎 가능
        System.out.println("main i = " + i);  //i 생졎 불가능, 였류 발생!! i ì ‘ê·Œ 불가능...
    }  //m 생졎 종료
}

for묞윌로 바뀐 것을 제왞하멎 앞의 예제와 비슷한 예제읎닀.
for묞의 겜우 for(int i = 0; i < 2; i++) 곌 같읎 for묞 안에서 쎈Ʞ식에 직접 변수륌 ì„ ì–ží•  수 있닀.
귞늬고 읎렇게 ì„ ì–ží•œ 변수는 for묞 윔드 랔록 안에서만 사용할 수 있닀.

 

슀윔프2 - 슀윔프 졎재 읎유

변수륌 ì„ ì–ží•œ 시점부터 변수륌 계속 사용할 수 있게 핮도 되지 않을까? 왜 복잡하게 ì ‘ê·Œ 범위(슀윔프)띌는 개념을 만듀었을까? 🀚🀚🀚

Scope3_1

package scope;

public class Scope3_1 {

    public static void main(String[] args) {
        int m = 10;  //m 생졎 시작
        int temp = 0;  //temp 생졎 시작
        if (m > 0) {
            temp = m * 2;  // m, temp 생졎 가능!
            System.out.println("temp = " + temp);  //temp 생졎 가능!!
        }
        System.out.println("m = " + m);  //m 생졎 가능!
    }  //m, temp 생졎 종료
}

조걎읎 맞윌멎 변수 m의 값을 2ë°° 슝가핎서 출력하는 윔드읎닀.
여Ʞ서 2ë°° 슝가한 값을 저장핎두Ʞ 위핎 임시 변수 temp륌 사용했닀. 귞런데 읎 윔드는 좋은 윔드띌고 볎Ʞ는 얎렵닀... 🀚
왜냐하멎 임시 변수 temp는 if 조걎읎 만족할 때 임시로 잠깐 사용하는 변수읎닀.
귞런데 임시 변수 temp main( ) 윔드 랔록에 선얞되얎 있닀. 읎렇게 되멎 닀음곌 같은 묞제가 발생한닀.

  • 비횚윚적읞 메몚늬 사용 :
    temp는 if 윔드 랔록에서만 필요하지만, main( ) 윔드 랔록읎 종료될 때까지 메몚늬에 유지된닀.
    따띌서 불필요한 메몚늬가 낭비된닀.
    만앜 if 윔드 랔록 안에 temp륌 선얞했닀멎 자바륌 구현하는 곳에서 if 윔드 랔록의 종료 시점에 읎 변수륌 메몚늬에서 제거핎서 더 횚윚적윌로 메몚늬륌 사용할 수 있닀.
  • 윔드 복잡성 슝가 :
    좋은 윔드는 군더더Ʞ 없는 닚순한 윔드읎닀. 😎😎
    temp는 if 윔드 랔록에서만 필요하고, 여Ʞ서만 사용하멎 된닀.
    만앜 if 윔드 랔록 안에 temp륌 선얞했닀멎 if가 끝나고 나멎 temp륌 전혀 생각하지 않아도 된닀. 뚞늬 속에서 생각할 변수륌 하나 쀄음 수 있닀.
    귞런데 지ꞈ 작성한 윔드는 if 윔드 랔록읎 끝나도 main( ) 얎디서나 temp륌 여전히 접귌할 수 있닀. 누군가 읎 윔드륌 유지볎수 할 때 m은 묌론읎고 temp까지 계속 신겜썚알 한닀. 슀윔프가 불필요하게 넓은 것읎닀.
    지ꞈ은 윔드가 맀우 닚순핎서 읎핎하는데 얎렀움읎 없겠지만 싀묎에서는 윔드가 맀우 복잡한 겜우가 많닀.

Scope3_2

package scope;

public class Scope3_2 {

    public static void main(String[] args) {
        int m = 10;  //m 생졎 시작!!

        if (m > 0) {
            int temp = m * 2;  //temp 생졎 시작!! m 생졎 가능!
            System.out.println("temp = " + temp);  //temp 생졎 가능!
        }  //temp 생졎 종료...
        
        //System.out.println(temp);  //temp ì ‘ê·Œ 불가능... 였류 발생!
        System.out.println("m = " + m);  //m 생졎 가능!
    }  //m 생졎 종료...
}

temp륌 if 윔드 랔록 안에서 선얞했닀. 읎제 temp는 if 윔드 랔록 안윌로 슀윔프가 쀄얎든닀.
덕분에 temp 메몚늬륌 빚늬 제거핎서 메몚늬륌 횚윚적윌로 사용하고, temp 변수륌 생각핎알 하는 범위륌 쀄여서 더 유지볎수 하Ʞ 좋은 윔드륌 만듀었닀. 😎😎

while묞 vs for묞 - 슀윔프 ꎀ점

읎제 슀윔프 ꎀ점에서 while묞곌 for묞을 비교한닀!!

While

package loop;

public class While2_3 {

    public static void main(String[] args) {
        int sum = 0;
        int i = 10;
        int endNum = 12;

        while (i <= endNum) {
            sum = sum + i;
            System.out.println("i = " + i + ", sum = " + sum);
            i++;
        }
        //... 아래에 더 많은 윔드듀읎 있닀고 가정
    }
}

For

package loop;

public class For2 {

    public static void main(String[] args) {
        int sum = 0;
        int endNum = 3;

        // 1 + 2 + 3 = 6
        for (int i = 1; i <= endNum; i++) {
            sum = sum + i;
            System.out.println("sum = " + sum);
        }
        //... 아래에 더 많은 윔드듀읎 있닀고 가정
    }
}

변수의 슀윔프 ꎀ점에서 칎욎터 변수 i륌 비교핎볎자.

  • while묞의 겜우 변수 i의 슀윔프가 main( ) 메서드 전첎가 된닀. 반멎에 for묞의 겜우 변수 i의 슀윔프가 for묞 안윌로 한정된닀.
  • 따띌서 변수 i와 같읎 for묞 안에서만 사용되는 칎욎터 변수가 있닀멎 while묞볎닀는 for묞을 사용핎서 슀윔프의 범위륌 제한하는 것읎 메몚늬 사용곌 유지볎수 ꎀ점에서 더 좋닀. 😃😃
✔찞고

Ctrl + E 후 Enter : 바로 전 파음로 넘얎간닀.
Ctrl + N : 파음 검색할 수 있는 넀비게읎션읎 나옚닀.


✏ 정늬

  • 변수는 ꌭ 필요한 범위로 한정핎서 사용하는 것읎 좋닀. 변수의 슀윔프는 ꌭ 필요한 곳윌로 한정핎서 사용하자.
    메몚늬륌 횚윚적윌로 사용하고 더 유지볎수하Ʞ 좋은 윔드륌 만듀 수 있닀.
  • 좋은 프로귞랚은 묎한한 자유가 있는 프로귞랚읎 아니띌 적절한 제앜읎 있는 프로귞랚읎닀.

 

형변환1 - 자동 형변환

형변환

  • 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있닀.
    • 예 ) int → long → double
  • 큰 범위에서 작은 범위는 닀음곌 같은 묞제가 발생할 수 있닀.... 🥲🥲
    • 소수점 버늌
    • 였버플로우

작은 범위에서 큰 범위로 대입은 허용한닀.

자바에서 숫자륌 표현할 수 있는 범위는 닀음곌 같닀.
int  <  long  <  double
int볎닀는 long읎, long볎닀는 double읎 더 큰 범위륌 표현할 수 있닀.

작은 범위에서 큰 범위에 값을 대입하는 윔드륌 싀행하멎 특별한 묞제없읎 잘 수행된닀.

Casting1

package casting;

public class Casting1 {

    public static void main(String[] args) {
        int intValue = 10;
        long longValue ;
        double doubleValue;

        longValue = intValue;  //int -> long
        System.out.println("longValue = " + longValue);  //longValue = 10

        doubleValue = intValue;  //int -> double
        System.out.println("doubleValue = " + doubleValue);  //doubleValue = 10.0

        doubleValue = 20000000000L;  //long -> double
        System.out.println("doubleValue2 = " + doubleValue);  //doubleValue2 = 2.0E10
    }
}

자바는 Ʞ볞적윌로 같은 타입에 값을 대입할 수 있닀. 귞런데 닀륞 타입에 값을 대입하멎 얎떻게 될까?

  • int  →  long을 비교핎볎멎 long읎 int볎닀 더 큰 숫자 범위륌 표현한닀.
    작은 범위 숫자 타입에서 큰 범위 숫자 타입읎 대입을 하멎 묞제가 되지 않는닀.
    만앜 읎런 겜우까지 였류가 발생한닀멎 개발읎 너묎 불펞할 것읎닀.
  • long  →  double의 겜우에도 double은 부동 소수점을 사용하Ʞ 때묞에 더 큰 숫자 범위륌 표현한닀.
    따띌서 대입할 수 있닀.
  • 정늬하멎 작은 범위에서 큰 범위로의 대입은 자바 얞얎에서 허용된닀. 쉜게 읎알Ʞ하멎 큰 귞늇은 작은 귞늇에 닎ꞎ 낎용묌을 닎을 수 있닀.

자동 형변환

하지만 ê²°êµ­ 대입하는 형(타입)을 맞추얎알 하Ʞ 때묞에 개념적윌로는 닀음곌 같읎 동작한닀.

//intValue = 10
doubleValue = intValue
doubleValue = (double) intValue  //형 맞추Ʞ
doubleValue = (double) 10  //변수 값 읜Ʞ
doubleValue = 10.0  //형 변환

읎렇게 앞에 (double)곌 같읎 적얎죌멎 int형읎 double형윌로 형읎 변한닀. 읎렇게 형읎 변겜되는 것을 형변환읎띌고 한닀.
작은 범위 숫자 타입에서 큰 범위 숫자 타입윌로의 대입은 개발자가 읎렇게 직접 형변환을 하지 않아도 된닀.
읎런 곌정읎 자동윌로 음얎나Ʞ 때묞에 자동 형변환, 또는 묵시적 형변환읎띌 한닀.

 

형변환2 - 명시적 형변환

큰 범위에서 작은 범위 대입은 명시적 형변환읎 필요하닀.

double은 싀수륌 표현할 수 있닀. 따띌서 1.5가 가능하닀.
귞런데 int는 싀수륌 표현할 수 없닀. 읎 겜우 double  →  int로 대입하멎 얎떻게 될까?

Casting2

package casting;

public class Casting2 {

    public static void main(String[] args) {
        double doubleValue = 1.5;
        int intValue = 0;

        //intValue = doubleValue;  //컎파음 였류 발생!!
        
        intValue = (int) doubleValue;  //형변환
        System.out.println(intValue);
    }
}

닀음 윔드의 앞 부분에 있는 죌석을 풀멎(죌석을 제거하멎) 컎파음 였류가 발생한닀.
intValue = doubleValue;  //컎파음 였류 발생

java: incompatible types: possible lossy conversion form double to int
// java: 혞환되지 않는 유형: double에서 int로의 가능한 손싀 변환

int형은 double형볎닀 숫자의 표현 범위가 ìž‘ë‹€. 귞늬고 싀수륌 표현할 수도 없닀.
따띌서 읎 겜우 숫자가 손싀되는 묞제가 발생할 수 있닀. 쉜게 읎알Ʞ핎서 큰 컵에 닎ꞎ 묌을 작은 컵에 옮겚 닎윌렀고 하니, 손싀읎 발생할 수 있닀는 것읎닀.
읎런 묞제는 맀우 큰 버귞륌 유발할 수 있닀. 😮😮
예륌 듀얎서 은행 프로귞랚읎 고객에게 은행 읎자륌 계산핎서 입ꞈ핎알 하는데 만앜 읎런 윔드가 아묎런 였류 없읎 수행된닀멎 끔찍한 묞제륌 만듀 수 있닀. 귞래서 자바는 읎런 겜우 컎파음 였류륌 발생시킚닀.
항상 강조하지만 컎파음 였류는 묞제륌 가장 빚늬 발견할 수 있는 좋은 였류읎닀.

형변환

하지만 만앜 읎런 위험을 개발자가 직접 감수하고도 값을 대입하고 싶닀멎 데읎터 타입을 강제로 변겜할 수 있닀.
예륌 듀얎서 대략적읞 결곌륌 볎고 싶은데, 읎때 소수점을 버늬고 정수로만 볎고 싶을 수 있닀.

형변환은 닀음곌 같읎 변겜하고 싶은 데읎터 타입을 (int)와 같읎 ꎄ혞륌 사용핎서 명시적윌로 입력하멎 된닀.
intValue = (int) doubleValue;  //형변환
읎것을 형(타입)을 바Ꟍ닀고 í•Žì„œ 형변환읎띌 한닀. 영얎로는 캐슀팅읎띌 한닀. 귞늬고 개발자가 직접 형변환 윔드륌 입력한닀고 í•Žì„œ 명시적 형변환읎띌 한닀.

캐슀팅 ìš©ì–Ž

"캐슀팅"은 영얎 ë‹šì–Ž "cast"에서 유래되었닀. "cast"는 ꞈ속읎나 닀륞 묌질을 녹여서 특정한 형태나 몚양윌로 만드는 곌정을 의믞한닀.

명시적 형변환 곌정

//doubleValue = 1.5
intValue = (int) doubleValue;
intValue = (int) 1.5;  //doubleValue에 있는 값을 읜는닀.
intValue = 1;  //(int)로 형변환 한닀. intValue에 int형읞 숫자 1을 대입한닀.

형변환 후 출력핎볎멎 숫자 1읎 출력되는 것을 확읞할 수 읎닀.
ì°žê³ ë¡œ 형변환을 한닀고 í•Žì„œ doubleValue 자첎의 타입읎 변겜되거나 ê·ž 안에 있는 값읎 변겜되는 것은 아니닀.
doubleValue에서 읜은 값을 형변환하는 것읎닀. doubleValue 안에 듀얎있는 값은 1.5로 귞대로 유지된닀.
ì°žê³ ë¡œ 변수의 값은 대입연산자(=)륌 사용핎서 직접 대입할 때만 변겜된닀.

형변환곌 였버플로우

형변환을 할 때 만앜 작은 숫자가 표현할 수 있는 범위륌 넘얎서멎 얎떻게 될까?

Casting3

package casting;

public class Casting3 {

    public static void main(String[] args) {
        long maxIntValue = 2147483647L;  //int 최고값
        long maxIntOver = 2147483648L;  //int 최고값 + 1(쎈곌)
        int intValue = 0;

        intValue = (int) maxIntValue;  //형변환
        System.out.println("maxIntValue casting = " + intValue);

        intValue = (int) maxIntOver;  //형변환
        System.out.println("maxIntOver casting = " + intValue);  //범위륌 넘얎가멎 int의 가장 작은 범위부터 닀시 시작된닀!!
    }
}

정상 범위

long maxIntValue = 2147483647 륌 볎멎 int로 표현할 수 있는 가장 큰 숫자읞 2147483647륌 입력했닀.
읎 겜우 int로 표현할 수 있는 범위에 포핚되Ʞ 때묞에 닀음곌 같읎 long  →  int로 형변환을 핮도 아묎런 묞제가 없닀.

intValue = (int) maxIntValue;  //형변환

maxIntValue = 2147483647;  //int 최고값
intValue = (int) maxIntValue;  //변수 값 읜Ʞ
intValue = (int) 2147483647;  //형변환
intValue = 2147483647;

쎈곌 범위

닀음윌로 long maxIntOver = 2147483648L 륌 볎멎 int로 표현할 수 있는 가장 큰 숫자읞 2147483647볎닀 1 큰 숫자륌 입력했닀. 읎 숫자는 늬터럎은 int 범위륌 넘얎가Ʞ 때묞에 마지막에 L을 붙여서 long형을 사용핎알 한닀.
읎 겜우 int로 표현할 수 있는 범위륌 넘Ʞ 때묞에 닀음곌 같읎 long  →  int로 형변환하멎 묞제가 발생한닀.

intValue = (int) maxIntOver;  //형변환

maxIntOver = 2147483638L;  //int 최고값 + 1
inValue = (int) maxIntOver;  //변수 값 읜Ʞ
intValue = (int) 2147483648L;  //형변환 시도
intValue = -2147483648;
  • 결곌륌 볎멎 -2147483648읎띌는 전혀 닀륞 숫자가 볎읞닀.
    int형은 2147483648L륌 표현할 수 있는 방법읎 없닀. 읎렇게 êž°ì¡Ž 범위륌 쎈곌핎서 표현하게 되멎 전혀 닀륞 숫자가 표현되는데, 읎런 현상을 였버플로우띌 한닀.
  • 볎통 였버플로우가 발생하멎 마치 시계가 한바퀮 돈 것처럌 닀시 처음부터 시작한닀. ì°žê³ ë¡œ -2147483648 숫자는 int의 가장 작은 숫자읎닀.
  • 쀑요한 것은 였버플로우가 발생하는 것 자첎가 묞제띌는 점읎닀!
    였버플로우가 발생했을 때 결곌가 얎떻게 되는지 계산하는데 시간을 낭비하멎 안된닀!
    였버플로우 자첎가 발생하지 않도록 막아알 한닀.
    읎 겜우 닚순히 대입하는 변수(intValue)의 타입을 int  →  long윌로 변겜핎서 사읎슈륌 늘늬멎 였버플로우 묞제가 핎결된닀.

 

계산곌 형변환

형변환은 대입뿐만 아니띌, 계산을 할 때도 발생한닀.

Casting4

package casting;

public class Casting4 {

    public static void main(String[] args) {
        int div1 = 3 / 2;
        System.out.println("div1 = " + div1);  //1

        double div2 = 3 / 2;
        System.out.println("div2 = " + div2);  //1.0

        double div3 = 3.0 / 2;
        System.out.println("div3 = " + div3);  //1.5

        double div4 = (double) 3 / 2;
        System.out.println("div4 = " + div4);  //1.5

        int a = 3;
        int b = 2;
        double result = (double) a / b;
        System.out.println("result = " + result);  //1.5
    }
}

자바에서 계산은 닀음 2가지륌 Ʞ억하자.

  • 같은 타입끌늬의 계산은 같은 타입의 결곌륌 ë‚žë‹€!!!
    • int + int는 int륌, double + double은 double의 결곌가 나옚닀.
  • 서로 닀륞 타입의 계산은 큰 범위로 자동 형변환읎 음얎난닀!!!
    • int + long은 long + long윌로 자동 형변환읎 음얎난닀.
    • int + double은 double + double로 자동 형변환읎 음얎난닀.

닀양한 타입별로 더 자섞히 듀얎가멎 앜간 찚읎가 있지만 읎 Ʞ쀀윌로 읎핎하멎 충분하닀 😎

int div1 = 3 / 2;  //int / int
int div1 = 1;  //int / int읎므로 int 타입윌로 결곌가 나옚닀.
double div2 = 3 / 2;  //int / int
double div2 = 1;  //int / int읎므로 int 타입윌로 결곌가 나옚닀.
double div2 = (double) 1;  //int -> double에 대입핎알 한닀. 자동 형변환 발생!
double div2 = 1.0;  //1(int) -> 1.0(double)로 형변환되었닀.
double div3 = 3.0 / 2;  //double / int
double div3 = 3.0 / (double) 2;  //double / int읎므로, double / double로 형변환읎 발생한닀!
double div3 = 3.0 / 2.0;  //double / double -> double읎 된닀!
double div3 = 1.5;
double div4 = (double) 3 / 2;  //명시적 형변환을 사용했닀. (double) int / int
double div4 = (double) 3 / (double) 2;  //double + int읎므로, double + double로 형변환읎 발생한닀.
double div4 = 3.0 / 2.0;  //double / double -> double읎 된닀.
double div4 = 1.5;

3 / 2와 같읎 int형끌늬 나눗셈을 í•Žì„œ 소수까지 구하고 싶닀멎 div4의 예제처럌 명시적 형변환을 사용하멎 된닀.

변수륌 사용하는 겜우에도 닀음곌 같읎 형변환을 할 수 있닀.

int a = 3;
int b = 2;
double result = (double) a / b;

처늬 곌정

double result = (double) a / b;  //(double) int / int
double result = (double) 3 / 2;  //변수 값 읜Ʞ
double result = (double) 3 / (double) 2;  double + int 읎므로 더 큰 범위로 형변환
douvle result = 3.0 / 2.0;  //(double / double) -> double읎 된닀.
double result = 1.5;

 

정늬

형변환

int  →  long  →  double

  • 작은 범위에서 큰 범위로는 대입할 수 있닀.
    • 읎것을 묵시적 형변환 또는 자동 형변환읎띌 한닀.
  • 큰 범위에서 작은 범위의 대입은 닀음곌 같은 묞제가 발생할 수 있닀. 읎때는 명시적 형변환을 사용핎알 한닀.
    • 소수점 버늌
    • 였버플로우
  • 연산곌 형변환
    • 같은 타입은 같은 결곌륌 ë‚žë‹€.
    • 서로 닀륞 타입의 계산은 큰 범위로 자동 형변환읎 음얎난닀.