제어자(modifier)란?
- 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드
- 종류 (Java 기준)
- 접근 제어자 (access modifier)
- 기타 제어자
- 기타 제어자는 경우에 따라 여러 개를 함께 사용할 수도 있다.
- 접근 제어자를 두 개 이상 같이 사용할 수는 없다.
접근 제어자(access modifier)란?
자바에서는 이러한 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공하고 있습니다.
Java에서 제공하는 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉을 구체화할 수 있게 해주는 제어자
접근 제어자의 접근 범위
접근 제어자 | 같은 클래스의 멤버 | 같은 패키지의 멤버 | 자식 클래스의 멤버 | 그 외의 영역 |
---|---|---|---|---|
public | ○ | ○ | ○ | ○ |
protected | ○ | ○ | ○ | X |
default | ○ | ○ | X | X |
private | ○ | X | X | X |
- 사용 예시
기타 제어자
- final
- 필드나 지역 변수에 사용하면 값을 변경할 수 없는 상수가 되는 키워드
- 클래스에 사용하면 해당 클래스는 다른 클래스가 상속받을 수 없게 된다.
- 메소드에 사용하면 해당 메소드는 오버라이딩을 통한 재정의를 할 수 없게 된다.
- 사용 대상
- 클래스
- 메소드
- 필드
- 지역 변수
- 사용 예시
- static
- 변수에 사용하면 해당 변수를 클래스 변수로 만들어 준다.
- 메소드에 사용하면 해당 메소드를 클래스 메소드로 만들어 준다.
- 초기화 블록에도 사용할 수 있다.
- 프로그램 시작시 최초에 단 한 번만 생성되고 초기화된다.
- 인스턴스를 생성하지 않고도 바로 사용할 수 있게 된다.
- 해당 클래스의 모든 인스턴스가 공유한다.
- 사용 대상
- 메소드
- 필드
- 초기화
- 스태틱 초기화 블럭
- 클래스가 로딩될 때 호출되며 따라서 각 클래스당 최초 1회만 실행되는 블럭
- 객체가 생성되기 이전에 수행된다.
- 인스턴스 멤버에 접근할 수 없다.
- 클래스가 로딩 될 때 복잡한 초기화 과정을 수행해야 할 때 사용할 수 있다.
- 스태틱 블록에서도 스태틱 메소드를 호출할 수 있다.
- 클래스 로딩시 멤버를 먼저 힙에 올린 후 초기화 블럭이 수행된다.
- 클래스가 로딩되는 시점은 레퍼런스 변수를 만드는 것을 제외한 클래스가 최초로 호출될 때이다.
- 만약 스태틱 초기화 블럭 안에 스태틱 메소드가 있고 해당 메소드를 부르면 다음 순서로 실행된다.
- 스태틱 초기화 블럭 실행
- 스태틱 메소드 실행
- 인스턴스 초기화 블럭
- 인스턴스 초기화 블럭은 인스턴스가 생성될 때마다 수행된다.
- 모든 생성자가 공통적인 내용을 수행해야할 때 작성하여 중복을 최소화할 수 있다.
- 인스턴스를 new 키워드를 통해 생성했을때 수행 순서는 다음과 같다.
- 인스턴스 멤버 초기화
- 인스턴스 초기화 블럭 수행
- 생성자 수행
- 인스턴스 메서드를 초기화 블럭 및 생성자에서 호출
- 스태틱 초기화 블럭과 인스턴스 초기화 블럭이 같이 있다면 실행 순서는 다음과 같다.
- 인스턴스 초기화 블럭
- 스태틱 초기화 블럭
- 스태틱 초기화 블럭
- 사용 예시
- abstract
- 추상 메소드
- 선언부만 있고 구현부가 없는 메소드
- 추상 메소드에 반드시 붙여야 하는 키워드
- 하나 이상의 추상 메소드가 포함되어 있는 추상 클래스에 반드시 붙여야 하는 키워드
- 사용 대상
- 클래스
- 메소드
- 사용 예시
- 추상 메소드