- 클래스의 내부에 선언된 데이터를 보호하기 위함.(캡슐화)
- 사용처 : 클래스 - public, default / final, abstract
멤버변수 - public, protected, default, private / final, abstract, static
메서드 - public, protected, default, private / final, static
생성자
지역변수 - final
public / 접근제한이 전혀 없다
protected / 다른패키지의 자손클래스까지 접근 가능
default / 같은 패키지 안에서만 접근 가능
private / 같은 클래스 안에서만 접근 가능
제어자 |
같은클래스 |
같은패키지 |
자손클래스 |
전체 |
public |
○ |
○ |
○ |
○ |
protected |
○ |
○ |
○ |
|
default |
○ |
○ |
||
private |
○ |
* default - 아무 접근제어자도 사용하지 않는 것.
캡슐화 - (접근제어자를 이용해 제한)
생성자의 접근제어자를
private로 지정하면 외부에서 접근할수 없어 객체를 생성할 수 없게 된다.
클래스 내부에서는 생성가능.
객체를 생성해서 반환해줄 public메서드로 외부에서 클래스를 이용 -> public static이어야 한다.
생성자가 private인 클래스는 다른 클래스의 조상이 될수 없다.(final추가)
- 메서드에 static는 몸통이 있는 메서드에만 사용할 수 있기 때문에 abstract(추상)를 함께 쓸수 없다.
- final은 클래스를 확장할수 없다는 의미이고, abstract는 상속으로 완성되어야 한다의 의미로 동반불가
- abstract메서드의 접근제어자는 private일수 없다.
- private는 메서드를 오버라이딩 할수 없기 때문에 꼭 final과 함께 쓸 필요는 없다.