728x90
클래스 변수와 인스턴스 변수
- 클래스 변수 (static 변수) : 클래스별로 유일
- 인스턴스 변수 : 인스턴스가 소유하는 변수
순서
- 상위 클래스 초기화
- 객체가 상속받은 클래스가 있다면, 상위 클래스의 생성자가 먼저 호출됨.
- 이 과정에서 상위 클래스의 멤버 변수들이 초기화 됨.
- 멤버 변수 선언과 함께 초기화
- 클래스 내에서 선언과 동시에 초기화된 멤버 변수들은 상위 클래스의 생성자 호출 직후, 하위 클래스의 생성자가 실행되기 전에 초기화됨.
- 인스턴스 초기화 블록
- 클래스 내에 인스턴스 초기화 블록(중괄호
{}
로 감싼 코드 블록) 이 존재하는 경우, 멤버 변수 선언과 함께 초기화된 후에 실행됨.
- 클래스 내에 인스턴스 초기화 블록(중괄호
- 생성자
클래스의 생성자가 실행됨. 생성자는 모든 멤버 변수와 초기화 블록이 처리된 후에 해당 클래스의 인스턴스를 마무리 짓기 위해 실행됨.
초기화 시점
* 클래스 변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한번 초기화 됨.
* 인스턴스 변수의 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화가 이루어짐.
초기화 순서
- 클래스 변수의 초기화 순서 : 기본값 ➡️ 명시적 초기화 ➡️ 클래스 초기화 블럭
- 인스턴스 변수의 초기화 순서 : 기본값 ➡️ 명시적 초기화 ➡️ 인스턴스 초기화 블럭 ➡️ 생성자
접근 제어자란?
- 클래스와 클래스의 멤버(필드, 메소드, 생성자) 를 사용할 때, 접근할 수 있는 범위를 지정 해주는 역할 ▶️ public, private, protected
클래스의 접근제어자
- 클래스를 정의할 때 사용할 수 있는 접근제어자는 public 과 default(생략) 두가지 임.
- public
- 어떤 클래스에서든 접근 가능
- 가장 넓은 접근 수준을 제공함.
- 주로 API 와 같이 외부에서 사용해야 할 기능에 사용됨.
- default
- 같은 패키지 내의 클래스에서만 접근 가능
- 패키지 내부에서만 사용되는 클래스나 메소드에 적합함.
- 특정한 패키지 내부에서만 사용되어야 할 때 사용됨.
클래스 멤버 접근 제어자
- 클래스 멤버 접근 제어자는 클래스의 내부 요소인 필드, 메소드 및 생성자의 접근성을 제어함. 4가지 있는데 위에 2개 합치면 됨.
- protected
- 같은 패키지 내의 다른 클래스 또는 다른 패키지의 자식 클래스에서 접근 가능함.
- 상속받은 클래스에서는 접근할 수 있으므로 상속을 위한 기능 제공 시 유용함.
- private
- 해당 클래스 내에서만 접근 가능함.
- 가장 제한적인 접근 수준을 제공하며, 클래스의 구현 세부 사항을 숨기는 데 사용됨.
- 객체의 데이터를 외부로부터 보호할 때 주로 사용됨.
왜 나눔?
클래스가 protected 면 다른 클래스가 해당 클래스를 extends 키워드 없이 선언할 수 있어서 객체 지향에 위반된다.
예시
public class MyClass { // public 클래스 접근 제어자
public int publicVar; // 모든 곳에서 접근 가능
protected int protectedVar; // 같은 패키지 또는 모든 자식 클래스에서 접근 가능
int defaultVar; // 같은 패키지 내에서만 접근 가능
private int privateVar; // 이 클래스 내에서만 접근 가능
}
class MyPackageClass { // default 클래스 접근 제어자 (패키지-private)
// 클래스 멤버들도 default 접근 제어자를 가질 수 있습니다.
}
728x90
'99클럽 TIL' 카테고리의 다른 글
99클럽 코테 스터디 19일차 TIL Spring POJO 기반의 구성 (0) | 2024.05.05 |
---|---|
99클럽 코테 스터디 18일차 TIL OOP (0) | 2024.05.04 |
99클럽 코테 스터디 15일차 TIL Java Multi-Thread 환경에서의 개발 (0) | 2024.05.02 |
99클럽 코테 스터디 14일차 TIL == 연산자, equals(), hashCode (2) | 2024.05.01 |
99클럽 코테 스터디 13일차 TIL Checked & UnChecked Exception (0) | 2024.04.30 |
Comment