Package-privaet 접근 제한자
자바에서 대부분의 클래스는 외부에서 사용하기 위해서 만드는 경우가 많다. 클래스를 설계할 때 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버를 구분해서 필드, 생성자, 메서드를 설계하는 것이 바람직하다. 이때 누군가는 호출을 어디까지 허용할 건지 만드는 것이 접근 제한자이다. 접근 제한자의 종류와 적용할 대상은 다음 표와 같다.
접근 제한 | 적용 대상 | 접근할 수 없는 클래스 |
public | 클래스, 필드, 생성자, 메소드 | 없음 |
protected | 필드, 생성자, 메소드 | 자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
default | 클래스, 필드, 생성자, 메소드 | 다른 패키지에 소속된 클래스 |
private | 필드, 생성자, 메소드 | 모든 외부 클래스 |
이젠 클래스, 생성자, 필드, 메소드 별로 어떤 식으로 적용되는지 설명을 통해 알아보자.
1. 클래스의 접근 제한
클래스에서 사용되는 접근 제한자는 public, default 이렇게 2가지이다.
1. default
public을 생략했을 때 class엔 자동으로 defualt 제한이 걸린다. 같은 package안에서는 아무런 제한 없이 다 사용할 수 있지만 다른 패키지에서는 사용할 수 없다.
2. public
같은 package 다른 package에서도 아무런 제약없이 사용 가능하다. 클래스를 다른 개발자가 사용하게 하려면 public을 사용하자. 라이브러리 클래스들도 public 접근 제한을 가지고 있다.
2. 구성 요소(생성자, 필드, 메서드)의 접근 제한
생성자, 필드, 메소드는 모든 접근 제한자를 다 사용할 수 있다.
클래스에 생성자를 선언하지 않으면 컴파일러에 인해서 자동적으로 기본 생성자가 생성된다. 이때 class의 접근 제한자를 따라간다. class가 default라면 default로 public이면 public인 식이다.
다른 구성 요소또한 지정하지 않으면 컴파일러가 자동으로 default로 만든다.
1. private
동일 패키지던 다른 패키지던 전부다 구성 요소를 호출할 수 없다. 즉 new연산자로 객체를 만들 수 없다. 클래스 내부에서만 구성 요소를 호출할 수 있고 객체를 만들 수 있다.
2. default
같은 패키지에서는 구성 요소 호출이 가능하지만 다른 패키지에서는 생성이 불가능하다.
3. protected
default와 같이 다른 패키지에서는 생성이 불가능하나 다른 패키지에 자식클래스는 호출할 수 있다.
4. public
모든 클래스에서 구성 요소 호출이 가능하다.
But. class도 보통 public인 경우가 많지만 만약 class가 default라면 같은 패키지의 클래스에서만 클래스호출이 가능하니 자연스럽게 구성 요소도 같은 패키지의 클래스에서만 호출 가능하다.
3. 정리
Class의 접근 제한
1. default
- 같은 패키지 내에서는 접근가능, 다른 패키지에서는 불가
- public을 명시하지 않는 경우 기본적으로 적용
2. public
- 모든 패키지에서 접근 가능
- 라이브러리 클래스 등을 다른 개발자가 사용할 때 주로 활용됨
구성 요소(생성자, 필드, 메서드)의 접근 제한
1. private
- 클래스 내부에서만 접근 가능
- 외부 클래에서 호출할 수 없고, 객체를 생성할 수 없음
2. default
- 같은 패키지 내에서 접근 가능하지만, 다른 패키지에서는 접근 불가능
3. protected
- 같은 패키지에서는 접근 가능하지만, 다른 패키지에서는 접근 불가능
- 다른 패키지의 자식 클래에서는 접근 가능
4. public
- 모든 클래스에서 접근 가능
'JAVA > JAVA 기초' 카테고리의 다른 글
[Java/기초] Exceptions 총정리 (0) | 2024.07.07 |
---|---|
[Java/기초] abstract (0) | 2024.03.04 |
[Java/기초] Overloading, Overriding (0) | 2024.03.04 |
[Java/기초] Static, Final (0) | 2024.03.04 |
[Java/기초] Getter Setter (0) | 2024.02.13 |
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간