📕 Today I Learned - 오늘 내가 공부한 것을 정리합니다.
자바는 public, private 같은 접근 제어자를 제공한다.
접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있다.
package access;
public class Speaker {
private 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("volumeDown 호출");
}
void showVolume() {
System.out.println("현재 음량 : " + volume);
}
}


private : 모든 외부 호출을 막는다.default(package-private) : 같은 패키지안에서의 호출은 허용한다.protected : 같은 패키지안에서 호출은 허용한다. 패키지가 달라도 상속 관계의 호출은 허용한다.public : 모든 외부 호출을 허용한다.정리(차단→허용): private → default → protected → public
접근 제어자는 필드와 메서드, 생성자에 사용된다.
추가로 클래스 레벨에도 일부 접근 제어자를 사용할 수 있다.
접근 제어자의 핵심은 속성과 기능을 외부로부터 숨기는 것이다.
private은 나의 클래스 안으로 속성과 기능을 숨길 때 사용, 외부 클래스에서 해당 기능을 호출할 수 없다.default는 나의 패키지 안으로 속성과 기능을 숨길 때 사용, 외부 패키지 안에서 해당 기능을 호출할 수 없다.protected는 상속 관계로 속성과 기능을 숨길 때 사용, 상속 관계가 아닌 곳에서 해당 기능을 호출할 수 없다.public은 기능을 숨기지 않고 어디서든 호출할 수 있게 공개한다.캡슐화(Encapsulation)는 객체 지향 프로그래밍의 중요한 개념 중 하나다. 캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다. 캡슐화를 통해 데이터의 직접적인 변경을 방지하거나 제한할 수 있다.
💊 캡슐화는 쉽게 이야기해서 속성과 기능을 하나로 묶고, 외부에 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는 것이다.
접근 제어자와 캡슐화를 통해 데이터를 안전하게 보호하는 것은 물론이고, BankAccount 를 사용하는 개발자 입장에서 해당 기능을 사용하는 복잡도도 낮출 수 있다.
💭 오늘 강의 내용을 톺아보며 중요한 개념을 뽑아보았다. 접근 제어자는 앞으로 코딩하며 계속 만나게 될테니 머리에 새겨넣자. 오늘로 사전캠프의 3주차가 끝났다. 아직 본 캠프까지 시간이 남았으니 그 전까지 자바 강의를 1회독하고 내용 정리를 하고 갈 수 있도록 꾸준히 해야겠다.