- public, protected, pirvate, default
- default: 아무런 선언도 하지 않은 상황
- 선언을 할 수 있는 대상 -> 클래스의 정의, 클래스의 인스턴스 변수와 메소드
- 클래스 정의 대상: public, default
- 인스턴스 변수와 메소드 대상: public, protected, private, default
클래스 정의 대상 public 선언
- public class AAA { ••• } —> 클래스의 public 선언
- public으로 선언되면 위치에 상관없이 어디서든 해당 클래스의 인스턴스를 생성할 수 있다.
- 하나의 소스파일에는 public으로 선언된 클래스의 정의를 하나만 둘 수 있다.
- 소스파일의 이름은 public으로 선언된 클래스의 이름과 동일해야 한다.
- 위 두 개의 이유는 프로그램의 큰 틀을 분석하는 과정에서 먼저 관찰하게 되는 public 클래스를 중심으로 소스파일을 형성하기 위함이다.
클래스 정의 대상 default 선언
- class ZZZ { ••• } —> 클래스의 default 선언
- default로 선언되면 동일 패키지로 묶인 클래스 내에서만 인스턴스 생성이 가능하다.
인스턴스 멤버 대상의 public, protected, private, default 선언
class X {
public int num1; // 인스턴스 변수의 public 선언
protected int num2; // 인스턴스 변수의 protected 선언
private int num3; // 인스턴스 변수의 private 선언
int num4; // 인스턴스 변수의 default 선언
public void md1() {} // 인스턴스 메소드의 public 선언
protected void md2() {} // 인스턴스 메소드의 protected 선언
private void md3() {} // 인스턴스 메소드의 private 선언
void md4() {} // 인스턴스 메소드의 default 선언
}
인스턴스 멤버의 public과 default 선언
- public -> 어디서든 접근이 가능하다.
- default -> 동일 패키지로 묶인 클래스 내에서만 접근이 가능하다.
- 변수 ‘접근’ / 메소드 ‘호출’
인스턴스 멤버의 private 선언
- 동일 클래스에 정의된 메소드 내에서만 접근, 호출 가능
인스턴스 멤버의 protected 선언
- protected 선언은 default 선언이 허용하는 접근을 모두 허용한다.
- 더불어 protected는 default가 허용하지 않는 ‘한 영역’에서의 접근도 허용한다.
- ‘한 영역’ —> protected로 선언된 멤버는 상속 관계에 있는 다른 클래스에서 접근 가능하다. —> 상속 관계에 있는 두 클래스가 서로 다른 패키지여도 접근 가능!!
- (default 선언된 인스턴스의 멤버는 동일 패키지에서 상속 관계에 있는 다른 클래스에서 접근 가능)
