자바는 public, private 같은 접근 제어자(access modifier)를 사용한다.
접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 관리할 수 있다.
이해를 한 내용들은 생략을 하자면..
기존 코드를 이어받게 되었을 때, 요구사항을 잘 모르는 상태에서 private으로 접근이 제한되어있지 않다면
새로운 개발자가 기능을 추가할 때 치명적 오류가 발생할 수 있다.. 해당 필드에 직접 접근을 막기위해 private을 사용한다.
private : 모든 외부 호출을 막음
default : 같은 패키지 안에서의 호출은 허용
protected : 같은 패키지 안에서 호출 허용 + 패키지가 달라도 상속관계 호출은 허용
public : 모든 호출 허용
private -> default -> protected -> public 순으로 스코프가 넓어진다.
접근 제어자 - 클래스 레벨
클래스 레벨의 접근 제어자는 public, default만 사용 가능하다.
하나의 자바 파일에 public 클래스는 반드시 파일명과 이름이 같아야한다.
하나의 자바 파일에 default 접근 제어자를 사용하는 클래스는 무한정 만들 수 있다.
캡슐화
캡슐화는 객체 지향 프로그래밍의 중요한 개념이다. 캡슐화는 데이터와 해당 데이터를 처리하는 메서드를
하나로 묶어서 외부에서의 접근을 제한하는것을 말한다. 캡슐화를 통해 데이터의 직접적인 변경을 방지하거나 제한할 수 있다.
요약하면 속성과 기능을 하나로 묶고, 외부에 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는 것
그럼 어떤 것을 숨기고 어떤 것을 노출해야 하나?
1. 데이터를 숨겨라
캡슐화에서 숨겨야 할 것은 속성(데이터)이다.
객체 내부의 데이터를 외부에서 함부로 접근하게 되면, 클래스 안에서 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있다.
이게 지켜지지 않는다면 캡슐화가 깨지는 것이다
*객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다.
2. 기능을 숨겨라
객체의 기능 중에서 외부에서 사용하지 않고 내부에서 사용하는 기능들이 있다. 이런 기능도 모두 감추는 것이 좋다.
자동차 예: 우리는 액셀과 핸들정도만 알면 된다. 엔진 조절기능, 배기 등 자세한 기능까진 알 필요가 없다.
데이터는 모두 숨기고, 기능은 꼭 필요한 기능만 노출하는 것이 좋은 캡슐화이다.