제어자(modifier)
포스트
취소

제어자(modifier)

제어자(modifier)란?

  • 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드
  • 종류 (Java 기준)
    • 접근 제어자 (access modifier)
    • 기타 제어자
  • 기타 제어자는 경우에 따라 여러 개를 함께 사용할 수도 있다.
  • 접근 제어자를 두 개 이상 같이 사용할 수는 없다.

접근 제어자(access modifier)란?

  • 자바에서는 이러한 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공하고 있습니다.

  • Java에서 제공하는 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉을 구체화할 수 있게 해주는 제어자

  • 접근 제어자의 접근 범위

접근 제어자같은 클래스의 멤버같은 패키지의 멤버자식 클래스의 멤버그 외의 영역
public
protectedX
defaultXX
privateXXX
  • 사용 예시
public class Car {
    private String name = "";
    public String getName() {
        return this.name;
    }
}

기타 제어자

  • final
    • 필드나 지역 변수에 사용하면 값을 변경할 수 없는 상수가 되는 키워드
    • 클래스에 사용하면 해당 클래스는 다른 클래스가 상속받을 수 없게 된다.
    • 메소드에 사용하면 해당 메소드는 오버라이딩을 통한 재정의를 할 수 없게 된다.
    • 사용 대상
      • 클래스
      • 메소드
      • 필드
      • 지역 변수
    • 사용 예시
final class Car { //상속을 통한 하위 클래스 생성 불가
    final int REG_YEAR = 2023; //상수라서 값 변경 불가
    final void brake() { //메소드 오버라이딩 불가
        final int DOWN_STEP_SPEED = 5; //상수라서 값 변경 불가
        System.out.println("브레이크!");
    }

}
  • static
    • 변수에 사용하면 해당 변수를 클래스 변수로 만들어 준다.
    • 메소드에 사용하면 해당 메소드를 클래스 메소드로 만들어 준다.
    • 초기화 블록에도 사용할 수 있다.
    • 프로그램 시작시 최초에 단 한 번만 생성되고 초기화된다.
    • 인스턴스를 생성하지 않고도 바로 사용할 수 있게 된다.
    • 해당 클래스의 모든 인스턴스가 공유한다.
    • 사용 대상
      • 메소드
      • 필드
      • 초기화
        • 스태틱 초기화 블럭
          • 클래스가 로딩될 때 호출되며 따라서 각 클래스당 최초 1회만 실행되는 블럭
          • 객체가 생성되기 이전에 수행된다.
          • 인스턴스 멤버에 접근할 수 없다.
          • 클래스가 로딩 될 때 복잡한 초기화 과정을 수행해야 할 때 사용할 수 있다.
          • 스태틱 블록에서도 스태틱 메소드를 호출할 수 있다.
          • 클래스 로딩시 멤버를 먼저 힙에 올린 후 초기화 블럭이 수행된다.
          • 클래스가 로딩되는 시점은 레퍼런스 변수를 만드는 것을 제외한 클래스가 최초로 호출될 때이다.
          • 만약 스태틱 초기화 블럭 안에 스태틱 메소드가 있고 해당 메소드를 부르면 다음 순서로 실행된다.
            1. 스태틱 초기화 블럭 실행
            2. 스태틱 메소드 실행
        • 인스턴스 초기화 블럭
          • 인스턴스 초기화 블럭은 인스턴스가 생성될 때마다 수행된다.
          • 모든 생성자가 공통적인 내용을 수행해야할 때 작성하여 중복을 최소화할 수 있다.
          • 인스턴스를 new 키워드를 통해 생성했을때 수행 순서는 다음과 같다.
            1. 인스턴스 멤버 초기화
            2. 인스턴스 초기화 블럭 수행
            3. 생성자 수행
            4. 인스턴스 메서드를 초기화 블럭 및 생성자에서 호출
          • 스태틱 초기화 블럭과 인스턴스 초기화 블럭이 같이 있다면 실행 순서는 다음과 같다.
            1. 인스턴스 초기화 블럭
            2. 스태틱 초기화 블럭
    • 사용 예시
class Car {
    static int name;

    //스태틱 초기화 블럭
    static{
        //초기화 내용
    }

    //인스턴스 초기화 블럭
    {
        //초기화 내용
    }
    static void brake() {
        System.out.println("브레이크!");
    }

}
  • abstract
    • 추상 메소드
      • 선언부만 있고 구현부가 없는 메소드
    • 추상 메소드에 반드시 붙여야 하는 키워드
    • 하나 이상의 추상 메소드가 포함되어 있는 추상 클래스에 반드시 붙여야 하는 키워드
    • 사용 대상
      • 클래스
      • 메소드
    • 사용 예시
abstract class Car {
    abstract void brake();
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.