본문 바로가기

자바의 정석 정리

자바의 정석 - 7.7 제어자

7.7.1 접근제어자 및 제어자

  • 접근 제어자 : public, protected, default, private
  • 제어자 : static, final, abstract, native, transient, synchronized, volatile, strictfp
  • 하나의 대상에 여러 제어자 조합하여 사용 가능
  • 접근 제어자는 하나만 가능

7.1.2 static

  • 클래스의, 공통적인
  • 인스턴스에 관계없이 항상 같은 값
  • 인스턴스를 생성하지 않고 사용가능
  • 멤버변수, 메서드, 초기화블럭에서 사용 가능

7.1.3 final

  • 변경될 수 없는
  • 상수로 선언할 때 사용
  • 클래스, 메서드, 멤버변수, 지역변수에서 사용 가능
  • 인스턴스변수를 활용해 final을 초기화 가능(매개변수로부터 제공받음)
class Card{
    final int NUMBER;
    Card(int num){
        this.NUMBER = num;
    }
}

7.1.4 abstract

  • 추상의, 미완성의
  • 추상 메서드를 선언하면 구변부 정의 불가
  • 오버라이딩을 통해 자식이 추상 메서드의 구현부 정의
abstract class Parent{
    abstract void move();
}
class Child extends Parent{
    void move(){}
}

7.1.5 접근제어자(access modier)

  • public : 전체에서 사용 가능
  • default : 같은 패키지에서 사용 가능
  • protected : 같은 패키지 및 자손 클래스에서 사용 가능
  • private : 같은 클래스에서만 사용 가능
  • 접근제어자를 사용하여 외부로부터 보호 및 내부 숨김이 가능해 캡슐화 가능
  • 멤버변수를 private로 선언하고 getter, setter를 사용하여 변수에 직접접근 금지
private int a;

int getterA(){
    return a;
}
void setterA(int a){
    this.a = a;
}

7.1.6 생성자의 접근 제어자

  • 생성자에 private를 선언하면 외부에서 생성자에 접근할 수 없므로 인스턴스를 생성할 수 없다.
  • public메소드를 제공하여 외부에서 인스턴스를 사용할 수 있게 할 수 있음. 단, public static이어야 한다.
class Singleton{
    private static Singleton s = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return s;
    }
}

7.1.7 제어자의 조합

  • 클래스 : public ,default, protected, abstract
  • 메서드 : 모든 접근 제어자, final, abstract, static
  • 멤버변수 : 모든 접근 제어자, final, static
  • 지역변수 : final
  • 주의사항
  1. 메서드에 static과 abstract를 함께 사용할 수 없다.
  2. 클래스에 abstract와 final을 동시에 사용할 수 없다.
  3. abstract메서드의 접근 제어자가 private일 수 없다.
  4. 메서드에 private과 final을 같이 사용할 필요는 없다.