제어자
제어자
제어자는 클래스, 변수, 메소드의 선언부에 사용되고 종류에는 접근제어자
(private, default, protected, public)와 그 외(static, abstract, final 등)가 있다. 한 대상당 접근제어자 1개, 그 외 제어자는 여러 개를 사용할 수있다.
static
클래스 내에 공통적인 것을 다룰 떄 사용한다.
멤버변수 | 메소드 | |
---|---|---|
공통적인 특성 | ||
객체를 생성하지 않아도 사용O | ||
메모리 로딩시 생성 | ||
인스턴스멤버 사용X |
final
한 번 정해지면 바꿀 수 없다.
클래스 | 메소드 | 변수 |
---|---|---|
확장X –> 조상클래스 불가능 | 오버라이딩X | 값 변경X |
abstract
미완성이기 때문에 객체를 생성할 수 없다.
클래스 | 메소드 | |
---|---|---|
abstract 메소드를 가진 클래스 | 선언부만 있는 메소드 |
접근 제어자
접근 제어자를 사용하여 캡슐화
한다.
- 외부로부터 데이터를 보호한다.(비밀번호 등)
- 외부가 굳이 알지 않아도 되는 데이터를 감춘다.( 나중에 유지보수시 테스트 범위를 줄여준다.)
접근제어자 | 같은 패키지 | 같은 클래스 | 다른 클래스의 자손 클래스 | 전체 |
---|---|---|---|---|
private | O | |||
default | O | O | ||
protected | O | O | O | |
public | O | O | O | O |
제어자의 사용할 수 없는 조합
하나의 대상 당 접근제어자 1개와 접근제어자를 제외한 여러 개 제어자를 사용할 수있다. 그러나 제어자들의 특징에 의해 하나의 대상에 함께 사용할 수없는 제어자의 조합이 있다.
메소드 | 클래스 | |
---|---|---|
static + abstract | final + abstract | |
private + abstract | ||
private + final |
- static은 구현부가 있는 메소드에만 사용한다.
- final은 확장할 수없는 클래스에 사용되고 abstract는 상속에 의하여 확장되는 클래스이기 떄문에 모순된다.
- abstract는 자손에 의해 확장되어야 하는데 private는 자손클래스가 접근할 수 없다.
- final, private 둘다 오버라이딩을 막는다. 하나만 사용해도 충분하다.
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.