스터디/JAVA

섹션7. 스코프, 형변환

nnhhmm 2024. 11. 4. 12:25

초급

문제1. 자바에서 지역 변수가 무엇인지 설명하고, 왜 특정 블록 안에서만 접근이 가능한지 이야기해보세요.

: 지역변수란 이름그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻이다.

  여기서 말하는 지역은 변수가 선언된 코드 블록({})을 말한다.

  지역변수는 자신이 선언된 코드 블록 안에서만 생존하고, 자신이 선언된 코드블록을 벗어나면 제거된다.

  따라서 이후에는 접근할 수 없다. 

문제2. 자동 형변환명시적 형변환의 차이점에 대해 간단히 설명하세요.

- 자동 형변환: 작은 범위의 타입에서 큰 범위의 타입으로의 대입을 할때 자동으로 형변환이 일어나는 것을 말한다. 

- 명시적 형변환

  : 큰 범위에서 작은 범위의 타입으로 대입을 할때는 직접 형변환을 시켜줘야하므로 타입을 직접 적어줘야한다

  : intValue = (int) doubleValue ; // 명시적 형변환 

중급

문제1. double형 변수와 int형 변수 두 개를 선언하고, 이들을 더해 결과를 출력하는 코드를 작성하세요. 자동 형변환을 고려하여 작성하세요.

public class scopeEx01 {
    public static void main(String[] args) {
        double doubleValue = 2.0;
        int intValue = 1;

        double result = doubleValue + intValue;
        System.out.println("result = " + result);
    }
}

문제2. 다음 코드에서 왜 y 변수는 if 블록 바깥에서 사용할 수 없는지 설명하세요.

public class ScopeTest {
    public void testScope() {
        if (true) {
            int y = 10;
        }
        // 여기에서 y를 사용할 수 있을까요? 왜 그런지 설명하세요.
    }
}​

 

- 변수 y는 사용할 수 없다.  y는 if문 안에서 선언되었기 때문에,  y의 스코프는 if문 으로 한정된다.

문제3. 실수를 정수로 명시적 형변환하는 메서드를 작성하세요. 메서드는 double형 매개변수를 받아 이를 int로 변환한 결과를 반환해야 합니다.

public class TypeCasting {
    public int castToInteger(double value) {
        // 명시적 형변환 코드 작성
    }
}

 

-> 코드 작성 후 출력
public class TypeCasting {
    public static void main(String[] args) {
        TypeCasting typeCasting = new TypeCasting();
        
        int a = typeCasting.castToInteger(10.5);
        System.out.println("a = " + a); // a = 10
    }
    
    public int castToInteger(double value){
        return (int)value;
    }
}

 

고급

문제1. 변수 a, b를 받아 더한 후, 자동 형변환과 명시적 형변환을 활용하여 다양한 타입(float, int, double)으로 변환해 출력하는 메서드를 작성하세요.

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

        TypeCasting2 casting = new TypeCasting2();

        int toInt = casting.castToInteger(50.0,10);
        float toFloat = casting.castToFloat(50.0,10);
        double toDouble = casting.castToDouble(50.1f,10);

        System.out.println("toInt = " + toInt);
        System.out.println("toFloat = " + toFloat);
        System.out.println("toDouble = " + toDouble);
    }
    public int castToInteger(double a, int b){
        return (int) (a+b);
    }

    public float castToFloat(double a, int b){
        return (float)(a+b);
    }

    public double castToDouble(float a, int b){
        return a+b;
    }
}

 

문제2. 스코프생명주기의 차이점을 설명하고, 왜 특정 메서드나 블록 안에서만 변수를 제한해야 하는지에 대해 이야기해보세요.

- 스코프는 변수나 함수가 접근할수 있는 범위를 말하고, 생명주기는 변수나 함수의 생성 후 소멸하는 기간을 말한다. 

- 스코프는 코드 구조에 따라 정해지고, 생명주기는 실행 시점에 따라 정해진다.

- 변수를 필요한 범위로 한정해서 사용하는 것이 좋다. 메모리를 잘 관리할수있고 더 유지보수 하기 좋은 코드를 만들수있기 때문이다.

문제3. longint 타입을 사용하는 두 개의 변수 num1, num2를 더한 후 결과를 short 타입으로 명시적 형변환하는 메서드를 작성하세요. 결과가 올바르게 저장되지 않는 상황에 대해서도 설명하세요.

public class TypeCastingChallenge {
    public short addAndCast(long num1, int num2) {
        // 명시적 형변환 코드 작성
    }
}
public short addAndCast(long num1, int num2){
        return (short) (num1+ num2);
    }

 

- 결과의 합이 short의 최대값인 32,767를 넘어서면 오버플로우가 발생해 제대로된 값이 나오지 않는다.

- short 의 범위 : (-32,768 ~ 32,767)

'스터디 > JAVA' 카테고리의 다른 글

섹션9. 배열  (1) 2024.11.06
섹션8. 훈련  (3) 2024.11.05
섹션6. 반복문  (4) 2024.11.03
섹션5. 조건문 미션  (1) 2024.11.02
섹션4. 연산자 미션  (1) 2024.10.31