개발 일기
접근 제어자 본문
접근 제어자 이해
자바는 public, private 같은 접근 제어자를 제공한다.
접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 매서드에 접근하는 것을 허용하거나 제한할 수 있다.
package access;
public class Speaker {
int volume;
Speaker(int volume){
this.volume = volume;
}
void volumeUp(){
if(volume >= 100){
System.out.println("볼륨이 최대치 입니다.");
}else{
volume += 10;
System.out.println("볼륨을 10 증가합니다.");
}
}
void volumeDown(){
volume -= 10;
System.out.println("볼륨을 10 감소했습니다.");
}
void showVolume(){
System.out.println("현재 볼륨은 " + volume);
}
}
package access;
public class SpeakerMain {
public static void main(String[] args) {
Speaker speaker = new Speaker(90);
speaker.volumeUp();
speaker.showVolume();
speaker.volumeUp();
//필드에 직접 접근
System.out.println("volume 직접 접근수정");
speaker.volume =200;
speaker.showVolume();
}
}
위 코드를 보면 SpeakerMain에서 Speake 필드에 직접 전급이 가능하다.
이런 경우 만약 볼륨의 값이 100 초과시 기계적 에러가 발생한다면 분명 문제가 생길 것이다.
private int volume;
이런 경우 private를 사용하면 모든 외부 호출을 막을 수 있다.
따라서 private가 붙은 경우 해당 클래스 내부에서만 호출이 가능하다.
위와 같이 실행 후 SpeakerMain을 실행하게 되면 컴파일 에러가 발생한다.
접근 제어자 종류
자바는 4가지 종류의 접근 제어자를 제공한다.
- private: 모든 외부 호출을 막는다.
- default(package-private): 같은 패키지 안에서의 호출을 허용한다.
- protected: 같은 패키지안에서 호출을 허용하고 패키지가 달라도 상속 관계의 호출은 허용한다.
- public: 모든 외부 호출을 허용한다.
private > default> protected> public 순서로 public이 가장 많이 허용한다.
default: 접근 제어자를 명시하지 않으면 같은 패키지 안에서 호출을 허용하는 default 접근 제어자가 적용된다.
default라는 용어는 해당 접근 제어자가 기본값으로 사용되기 떄문에 붙여진 이름이지만, 실제로는 package-private가 더 정확한 표현이다. 왜냐면 해당 접근 제어자를 사용하는 멤버는 동일한 패키지 내의 다른 클래스에서만 접근이 가능하기 때문이다.
접근 제어자의 핵심은 속성과 기능을 외부로부터 숨기는 것
- private 나의 클래스 안으로 속성과 기능을 숨길 때 사용, 외부 클래스에서 해당 기능을 호출할 수 없다.
- default는 나의 패키지 안으로 속성과 기능을 숨길 때 사용, 외부 패키지에서 해당 기능을 호출할 수 없다.
- protected는 상속 관계로 속성과 기능을 숨길 때 사용, 상속 관계가 아닌 곳에서 해당 기능을 호출할 수 없다.
- public은 기능을 숨기지 않고 어디서든 호출할 수 있게 공개한다.
반응형