99클럽 코테 스터디 16일차 TIL Java Class 멤버 변수 초기화 순서, 접근 제어자
728x90

클래스 변수와 인스턴스 변수

  • 클래스 변수 (static 변수) : 클래스별로 유일
  • 인스턴스 변수 : 인스턴스가 소유하는 변수

순서

  1. 상위 클래스 초기화
    • 객체가 상속받은 클래스가 있다면, 상위 클래스의 생성자가 먼저 호출됨.
    • 이 과정에서 상위 클래스의 멤버 변수들이 초기화 됨.
  2. 멤버 변수 선언과 함께 초기화
    • 클래스 내에서 선언과 동시에 초기화된 멤버 변수들은 상위 클래스의 생성자 호출 직후, 하위 클래스의 생성자가 실행되기 전에 초기화됨.
  3. 인스턴스 초기화 블록
    • 클래스 내에 인스턴스 초기화 블록(중괄호 {} 로 감싼 코드 블록) 이 존재하는 경우, 멤버 변수 선언과 함께 초기화된 후에 실행됨.
  4. 생성자
    클래스의 생성자가 실행됨. 생성자는 모든 멤버 변수와 초기화 블록이 처리된 후에 해당 클래스의 인스턴스를 마무리 짓기 위해 실행됨.

초기화 시점
* 클래스 변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한번 초기화 됨.
* 인스턴스 변수의 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화가 이루어짐.

초기화 순서

  • 클래스 변수의 초기화 순서 : 기본값 ➡️ 명시적 초기화 ➡️ 클래스 초기화 블럭
  • 인스턴스 변수의 초기화 순서 : 기본값 ➡️ 명시적 초기화 ➡️ 인스턴스 초기화 블럭 ➡️ 생성자

접근 제어자란?

  • 클래스와 클래스의 멤버(필드, 메소드, 생성자) 를 사용할 때, 접근할 수 있는 범위를 지정 해주는 역할 ▶️ public, private, protected

클래스의 접근제어자

  • 클래스를 정의할 때 사용할 수 있는 접근제어자는 public 과 default(생략) 두가지 임.
  1. public
    • 어떤 클래스에서든 접근 가능
    • 가장 넓은 접근 수준을 제공함.
    • 주로 API 와 같이 외부에서 사용해야 할 기능에 사용됨.
  1. default
    • 같은 패키지 내의 클래스에서만 접근 가능
    • 패키지 내부에서만 사용되는 클래스나 메소드에 적합함.
    • 특정한 패키지 내부에서만 사용되어야 할 때 사용됨.

클래스 멤버 접근 제어자

  • 클래스 멤버 접근 제어자는 클래스의 내부 요소인 필드, 메소드 및 생성자의 접근성을 제어함. 4가지 있는데 위에 2개 합치면 됨.
  1. protected
    • 같은 패키지 내의 다른 클래스 또는 다른 패키지의 자식 클래스에서 접근 가능함.
    • 상속받은 클래스에서는 접근할 수 있으므로 상속을 위한 기능 제공 시 유용함.
  1. private
    • 해당 클래스 내에서만 접근 가능함.
    • 가장 제한적인 접근 수준을 제공하며, 클래스의 구현 세부 사항을 숨기는 데 사용됨.
    • 객체의 데이터를 외부로부터 보호할 때 주로 사용됨.

왜 나눔?

클래스가 protected 면 다른 클래스가 해당 클래스를 extends 키워드 없이 선언할 수 있어서 객체 지향에 위반된다.

예시

public class MyClass {  // public 클래스 접근 제어자
    public int publicVar;       // 모든 곳에서 접근 가능
    protected int protectedVar; // 같은 패키지 또는 모든 자식 클래스에서 접근 가능
    int defaultVar;             // 같은 패키지 내에서만 접근 가능
    private int privateVar;     // 이 클래스 내에서만 접근 가능
}

class MyPackageClass {  // default 클래스 접근 제어자 (패키지-private)
    // 클래스 멤버들도 default 접근 제어자를 가질 수 있습니다.
}
728x90