접근 제어자
IT 위키
더 많은 작업
- Access Modifier; 접근 제한자, 접근 지정자
- 클래스와 그 멤버(필드·메서드·생성자)를 어디서 쓸 수 있는지 범위를 정하는 키워드
객체지향 언어는 접근 제어자로 정보 은닉을 구현한다. 외부에 공개할 메서드만 열어 두고 내부 데이터는 감추면, 내부 구현을 바꿔도 바깥 코드가 영향을 받지 않는다.
자바에는 public, protected, (default), private 의 네 단계가 있다. 아무것도 쓰지 않은 상태를 default(package-private)라 부르며, 이를 나타내는 키워드는 따로 없다.
| 접근 제어자 | 같은 클래스 | 같은 패키지 | 다른 패키지의 하위 클래스 | 그 밖의 모든 곳 |
|---|---|---|---|---|
| public | O | O | O | O |
| protected | O | O | O | X |
| (default) | O | O | X | X |
| private | O | X | X | X |
넓은 순서로 public > protected > default > private 이다.
- 최상위 클래스에는 public 과 default 만 붙일 수 있다
- 필드는 private 으로 감추고 공개 메서드(getter·setter)로 접근하게 하는 것이 일반적이다
package com.example.bank; // package : 이 파일이 속한 패키지를 선언하는 키워드
public class Account {
private long balance; // 클래스 안에서만
protected String owner; // 같은 패키지 + 하위 클래스
int branchCode; // default : 같은 패키지
public long getBalance() { // 어디서나
return balance;
}
}
package 는 접근 제어자가 아니다. 소스 파일이 어느 패키지에 속하는지 선언하는 키워드다. 패키지 범위의 접근은 접근 제어자를 생략해서 얻는다.
| 언어 | 접근 제어자 | 기본값 |
|---|---|---|
| 자바 | public, protected, default, private | default(같은 패키지) |
| C++ | public, protected, private (접근 지정자라 부른다) | 클래스는 private, 구조체는 public |
| C# | public, protected, internal, private 등 | private |
| 파이썬 | 키워드 없음. 이름 앞의 밑줄(_x, __x)로 관례상 구분 |
공개 |