전산 관련 시험/프로그래밍(C, JAVA, Python)

[JAVA] 프로그래밍 언어 (23.01 01)

응_비 2024. 10. 6. 23:29
class Static {
    public int a = 20;
    static int b = 0;
}

public class Test {
    public static void main(String[] args) {
        int a = 10;
        Static.b = a;
        Static st = new Static();
        System.out.println(Static.b++);  // 출력값: 10
        System.out.println(st.b);        // 출력값: 11
        System.out.println(a);           // 출력값: 10
        System.out.print(st.a);          // 출력값: 20
    }
}

설명:

  • Static.b = a;에서 b에 10을 대입합니다.
  • Static.b++는 출력 후 b 값을 11로 증가시킵니다.
  • st.b는 static 변수 b를 참조하므로 값은 11입니다.
  • a는 main 함수의 지역 변수로 값이 10입니다.
  • st.a는 인스턴스 변수로 초기값이 20입니다.

출력 결과:

10 
11 
10 
20
class Static {
    public int a = 20;      // 인스턴스 변수
    static int b = 0;       // 클래스 변수 (static 변수)
}

public class Test {
    public static void main(String[] args) {
        int a = 10;             // 지역 변수 a 선언 및 초기화
        Static.b = a;           // 클래스 변수 b에 지역 변수 a의 값(10) 대입
        Static st = new Static();  // Static 클래스의 인스턴스 생성
        System.out.println(Static.b++);  // 10 출력 후 b 값을 1 증가 (후위 연산)
        System.out.println(st.b);        // 11 출력 (b 값은 증가된 11)
        System.out.println(a);           // 10 출력 (지역 변수 a의 값은 변하지 않음)
        System.out.print(st.a);          // 20 출력 (인스턴스 변수 a의 값)
    }
}

위 코드는 static 변수와 인스턴스 변수의 차이를 보여주는 예제입니다. 각 출력값을 하나씩 설명하면 다음과 같습니다:

출력값 설명

1. System.out.println(Static.b++);
• Static.b는 static 변수이므로 클래스 이름으로 직접 접근합니다.
• Static.b = 10으로 설정된 상태이기 때문에 Static.b++에서 b의 현재 값인 10이 출력됩니다.
• 후위 증가 연산자 ++는 현재 값을 출력한 후 b를 1 증가시키므로, Static.b는 이제 11이 됩니다.
• 출력값: 10

2. System.out.println(st.b);
• st는 Static 클래스의 인스턴스이지만, b는 static 변수이기 때문에 모든 Static 객체가 동일한 값을 참조합니다.
• st.b는 Static.b와 같은 메모리 위치를 참조하므로 b의 현재 값인 11을 출력합니다.
• 출력값: 11

3. System.out.println(a);
• a는 main 메서드 내부의 지역 변수로, Static.b와 별개의 변수입니다.
• 이 변수는 위에서 Static.b에 할당된 이후 변경되지 않았으므로 여전히 10을 출력합니다.
• 출력값: 10

4. System.out.print(st.a);
• st 객체의 인스턴스 변수 a에 접근합니다.
• a는 Static 클래스의 인스턴스 변수로, static 변수와 달리 객체마다 고유한 값을 가집니다.
• 생성 시 public int a = 20;으로 초기화되었으므로 20이 출력됩니다.
• 출력값: 20

3. 요약

• static 변수 b는 클래스 단위로 관리되므로 클래스명이나 인스턴스명을 통해 접근해도 동일한 값을 참조합니다.
• st.a는 인스턴스 변수이므로 객체별로 고유한 값을 가지며, 클래스 변수와는 다른 메모리 공간에 저장됩니다.
• static 변수는 모든 인스턴스에서 공유되므로 클래스 전체의 공통 상태를 관리할 때 유용합니다.

따라서, 전체 출력 결과는 다음과 같습니다:

10
11
10
20