1. 접근 제한자(Access Modifier)
: 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 한다. 그리고 특정 메소드를 호출할 수 없도록 제한할 필요가 있는데 이러한 기능을 구현하기 위해 자바는 접근 제한자를 제공한다.
접근 제한자 | 적용 대상 | 접근할 수 없는 클래스 |
public | 클래스, 필드, 생성자, 메소드 | 없음 |
protected | 필드, 생성자, 메소드 | 자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
default | 클래스, 필드, 생성자, 메소드 | 다른 패키지에 소속된 클래스 |
private | 필드, 생성자, 메소드 | 모든 외부 클래스 |
private > default > protected > public
2. 클래스의 접근 제한
: 같은 패키지 내에서만 사용할 것인지, 아니면 다른 패키지에서도 사용할 수 있도록 할 것인지를 결정해야 한다. 클래스에 적용할 수 있는 접근 제한은 public과 default 두 가지 이다.
-default 접근 제한
: 클래스 선언 시 public을 생략했다면 클래스는 default 접근 제한을 가진다. default 접근 제한을 가지게 되면 같은 패키지에서는 아무런 제한 없이 사용할 수 있지만 다른 패키지에서는 사용할 수 없도록 제한된다.
-public 접근 제한
: 같은 패키지뿐만 아니라 다른 패키지에서도 아무런 제한 없이 사용할 수 있다.
3. 생성자의 접근 제한
: 생성자의 호출 가능 여부를 접근 제한자에 따라 결정된다.
public class ClassName {
// public 접근 제한
public ClassName(...) { ... }
// protected 접근 제한
protected ClassName(...) { ... }
// default 접근 제한
ClassName(...) { ... }
// public 접근 제한
public ClassName(...) { ...}
}
접근 제한자 | 생성자 | 설명 |
public | 클래스(...) | 모든 패키지에서 아무런 제한 없이 생성자를 호출할 수 있도록 한다. |
protected | 클래스(...) | 같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있다. default와 차이점은 다른 패키지에 속한 클래스가 해당 클래스의 자식(child) 클래스라면 자식을 호출 가능하다. |
default | 클래스(...) | 생성자 선언 시 public 또는 private를 생략했다면 default 접근 제한을 가진다. 아무런 제한 없이 생성자를 호출할 수 있으나, 다른 패키지에서는 생성자를 호출할 수 없다. |
private | 클래스(...) | 동일 패키지이건 다른 패키지이건 상관없이 생성자를 호출하지 못하도록 제한한다. 따라서 클래스 외부에서 new 연산자로 객체를 만들 수 없다. 오로지 클래스 내부에서만 생성자를 호출할 수 있고, 객체를 만들 수 있다. |
4. 필드와 메소드의 접근 제한
: 클래스 내부에서만 사용할 것인지, 패키지 내에서만 사용할 것인지 아니면 다른 패키지에서도 사용할 수 있도록 결정해야하는데 이것은 어떤 접근 제한을 갖느냐에 따라 결정된다.
접근 제한자 | 생성자 | 설명 |
public | 필드 메소드(...) | 모든 패키지에서 아무런 제한 없이 필드와 메소드를 사용할 수 있도록 해준다. |
protected | 필드 메소드(...) | 같은 패키지에 속하는 클래스에서 필드와 메소드를 사용할 수 있도록 한다. |
default | 필드 메소드(...) | 같은 패키지에서는 아무런 제한 없이 필드와 메소드를 사용할 수 있으나, 다른 패키지에서는 필드와 메소드를 사용할 수 없도록 한다. |
private | 필드 메소드(...) | 오로지 클래스 내부에서만 사용할 수 있다. |
'Programming > JAVA' 카테고리의 다른 글
자바의 추상 클래스 (0) | 2020.01.07 |
---|---|
자바 상속의 개념 (0) | 2020.01.03 |
자바의 클래스 (0) | 2019.12.27 |
자바의 참조 타입과 배열 (0) | 2019.12.23 |
BufferedReader, BufferedWriter를 이용한 빠른 입출력 (0) | 2019.12.20 |