📚
제어자
June 13, 2023
클래스, 변수, 메소드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.
제어자는 접근 제어자와 그 외 제어자로 나눌 수 있는데, 접근 제어자는 선언부에 하나만 쓸 수 있으며, 그 외 제어자는 조합하여 사용이 가능하다.
static - 클래스의, 공통적인
static이 사용될 수 있는 곳 : 멤버변수, 메소드, 초기화 블럭
- 멤버변수에 static이 붙는다면
- 모든 인스턴스에 공통적으로 사용되는 클래스 변수며, 인스턴스를 생성하지 않고도 사용이 가능하다.
- 클래스가 메모리에 로드될 때 생성된다.
- 메소드에 static이 붙는다면?
- 인스턴스를 생성하지 않고도 사용 가능한 클래스 메소드가 된다.
- 클래스 메소드 내에서는 인스턴스 멤버들을 사용할 수 없다.
final - 마지막의, 변경될 수 없는
final이 사용될 수 있는 곳 : 클래스, 메소드, 멤버변수, 지역변수
- 클래스에 final이 붙는다면
- 확장될 수 없다. 즉 다른 클래스의 조상이 될수 없고 상속 구조에서 제일 마지막 클래스이다.
- 메소드에 final이 붙는다면
- 변경될 수 없으므로 오버라이딩이 될 수 없다.
- 멤버변수와 지역변수에 final이 붙는다면
- 변경할 수 없는 상수가 된다.
abstract - 추상의, 미완성의
abstract가 사용될 수 있는 곳 : 클래스, 메소드
- 클래스에 abstract가 붙는다면
- 클래스 내에 추상 메소드가 선언되어 있음을 의미한다.
- 메소드에 abstract가 붙는다면
- 추상메소드임을 의미한다.
접근 제어자
- private : 같은 클래스 내에서만 접근이 가능하다.
- default : 같은 패키지 내에서만 접근이 가능하다.
- protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근이 가능하다.
- 패키지에 관계없이 상속관계에 있는 자손클래스에서 접근할 수 있도록 제한 하는것이 목적이지만, 같은 패키지 내에서도 접근이 가능하다.
- public : 접근 제한이 없다.
접근 제어자를 이용한 캡슐화
접근 제어자를 사용하는 이유는 클래스 내부에 선언된 데이터를 보호하기 위해서이다.
멤버변수의 접근자를 private로 선언하여 외부에서 쉽게 접근하지 못하게 할 수 있다.
생성자의 접근제어자
생성자에 접근제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다.
제어자를 조합해서 사용할 때 주의해야할 사항
- 메소드에 static과 abstract는 동시에 사용할 수 없다.
- static은 구현부가 있는 메소드에만 사용할 수 있다.
- 클래스에는 abstract와 final을 동시에 사용할 수 없다.
- 서로 모순되는 제어자이기 때문이다.
- abstract메소드의 접근제어자가 private일 수 없다.
- 접근제어자가 private이면 자손 클래스에서 접근할 수 없기 때문이다.
- 메소드에 private과 final을 같이 사용할 필요는 없다.
- 접근제어자가 private 메소드는 오버라이딩 될 수 없기때문에 이 둘 중 하나만 사용해도 의미가 충분하다.