티스토리 뷰
주의 사항!
- 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
- 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
- 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.
main() 메서드를 가지지 않는 대부분의 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스입니다. 라이브러리 클래스를 설계할 때에는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 생성자, 메서드를 설계하는 것이 바람직합니다. 객체 생성을 막기 위해서 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 합니다. 자바는 이러한 기능을 구현하기 위해 접근 제한자(Access Modifire)를 제공하고 있습니다.
접근 제한자는 public, protected, default, private과 같이 네 가지 종류가 있습니다.
접근 제한자 | 적용 대상 | 접근할 수 없는 클래스 |
public | 클래스, 필드, 생성자, 메서드 | 없음 |
protected | 필드, 생성자, 메서드 | 자식 클래스도 아니고, 다른 패키지에 소속된 클래스 |
default | 클래스, 필드, 생성자, 메서드 | 다른 패키지에 소속된 클래스 |
private | 필드, 생성자, 메서드 | 모든 외부 클래스 |
1. 클래스의 접근 제한
클래스를 선언할 때는 패키지 내에서만 사용할 것인지, 다른 패키지에서도 사용할 수 있도록 할 것인지를 결정해야 합니다. 클래스에 적용할 수 있는 접근 제한은 public과 default 단 두 가지인데, 다음과 같은 형식으로 작성합니다.
//default 접근 제한
class 클래스 { ... }
//public 접근 제한
public class 클래스 { ... }
1.1 public 접근 제한
클래스를 선언할 때, public을 붙이면 클래스는 public 접근 제한을 가집니다. 클래스가 public 접근 제한을 가지게 되면 같은 패키지뿐만 아니라 다른 패키지에서도 아무런 제한 없이 사용할 수 있습니다. 클래스를 다른 개발자가 사용할 수 있도록 라이브러리 클래스로 개발되어야 한다면, 반드시 public 접근 제한을 가지도록 해야 합니다. 인터넷으로 배포되는 라이브러리 클래스들도 모두 public 접근 제한을 가지고 있습니다.
1.2 default 접근 제한
클래스를 선언할 때, public을 생략했다면 자동으로 default 접근 제한을 가지게 됩니다.
1.3 protected 접근 제한
protected는 public과 default의 중간쯤에 위치합니다. 같은 패키지의 클래스에 대해서는 접근 제한이 없지만, 다른 패키지라면 자식 클래스에 대해서만 접근을 허용합니다.
1.4 private 접근 제한
private은 자기 자신을 제외한 모든 외부로부터 접근을 제한합니다. 이는 같은 패키지에 있는 클래스에 대해서도, 자식 클래스에 대해서도 마찬가지입니다.
2. 생성자의 접근 제한
클래스를 제외한 생성자, 필드, 메서드는 위에서 소개한 네 가지의 접근 제한을 모두 가질 수 있습니다. 클래스에 생성자를 선언하지 않으면 컴파일러에 의해 자동으로 기본 생성자가 추가되는데, 기본 생성자의 접근 제한은 클래스의 접근 제한과 동일하게 됩니다. 생성자를 선언할 때 아무런 접근 제한자를 붙이지 않으면 자동으로 default 접근 제한을 가지게 됩니다.
public class ClassName
{
//public 접근 제한
public ClassName(...) { ... }
//protected 접근 제한
protected ClassName(...) { ... }
//default 접근 제한
ClassName(...) { ... }
//private 접근 제한
private ClassName(...) { ... }
}
3. 필드와 메서드의 접근 제한
필드와 메서드를 선언할 때 고려해야 할 사항은 클래스 내부에서만 사용할 것인지, 패키지 내에서만 사용할 것인지, 아니면 다른 패키지에서도 사용할 수 있도록 할 것인지를 결정해야 하는 것입니다. 각 접근 제한의 역할은 클래스나 생성자의 경우와 동일합니다.
public class ClassName
{
//public 접근 제한
public int num;
public void getNum() { ... }
//protected 접근 제한
protected int num;
protected void getNum() { ... }
//default 접근 제한
int num;
void getNum() { ... }
//private 접근 제한
private int num;
private void getNum() { ... }
}
'공부 일지 > JAVA 공부 일지' 카테고리의 다른 글
자바, 어노테이션(Annotation) (0) | 2021.04.07 |
---|---|
자바, Getter와 Setter 메서드 (0) | 2021.04.07 |
자바, import문 (0) | 2021.04.07 |
자바, 패키지 (0) | 2021.04.07 |
자바, final 필드와 상수 (0) | 2021.04.07 |