접근 제어자의 필요 이유

<aside> 📃

스피커 개발 요구 사항

public class Speaker{
		int volume;
		...
		void volumeUp(){
				if(volume >= 100){
						System.out.println("음량을 증가할 수 없습니다.");
				}
				else{
						volume += 10;
				}
		}
}
public class SpeakerMain{
		speaker.volume = 200;
}

Speaker 객체를 사용하는 사용자는 Speaker의 volume 필드와 메서드에 모두 접근이 가능

volumeUP() 메서드를 통해 음량이 100을 넘지 못하도록 개발했지만 Speaker에서 volume 필드에 직접 접근해 원하는 값을 설정할 수 있기 때문에 소용이 없음.

⇒ 근본적 해결 방법 : volume필드를 Speaker 클래스 외부에서 접근하지 못하도록 막는 것!

✅ 해결 방법

public class Speaker{
		private int volume;
}

image.png

//필드에 직접 접근
System.out.println("volume 필드 직접 접근 수정");
speaker.volume = 200; //private 접근 오류

// 컴파일 오류 메시지
volume has private access in access.Speaker

⭐️접근 제어자 종류⭐️

차단 범위 : private → default → protected → public

📦 package-private

접근 제어자를 명시하지 않으면 같은 패키지 안에서 호출을 허용하는 default 접근 제어자가 적용 기본값으로 사용되기에 default라는 용어를 사용하나, package-private가 더 정확한 표현이다. 두 용어를 함께 사용한다.