생성자 - 개체가 생성과 동시에 유효한 상태를 보장한다.
접근 제어자(Access Modifier) - 어떤 외부자가 개체 속에 접근할 수 있는지 정의한다. 개체 외부에서 개체의 상태에 직접 접근하는 것을 막을 수 있다. 개체의 상태를 변경하는 주체는 개체 자신인 것이 이상적이다.
public - 누구나 접근이 가능하다. 주로 메서드에 사용한다.
protected - 자식들만 접근이 가능하다.
생략할 경우 - 같은 패키지에 속한 클래스만 접근이 가능하다.(public) 다른 패키지에서는 private처럼 작동한다.
private - 외부 접근이 불가능하다. 내부에서만 접근 가능하다. 주로 멤버 변수에 사용한다. 멤버 변수는 메서드를 통해서만 접근하는 것이 좋다.(캡슐화, 추상화) 코드 중복을 막기 위해서 클래스 안에 메서드에 사용할 수 있다.
getter - get ~ 라는 이름의 메서드는 보통 어떤 정보를 가져오는 메서드일 때 사용한다. 멤버 변수를 저장하지 않고 필요할 때마다 사용할 수 있다.
setter - set ~ 라는 이름의 메서드는 어떤 정보를 변경하기 위한 메서드일 때 사용한다. 추가적인 로직을 실행할 수 있다.
제일 좋은 습관?
- 멤버 변수는 private
- 새 개체는 생성될 때부터 유효한 것이 이상적
- getter는 자유롭게 추가해도 괜찮다. 굳이 알 필요 없는 정보는 보여주지 않아야 하지만, 큰 문제는 없음. 레퍼런스 반환할 때는 확인
- setter는 데이터가 바뀌므로 고민하고 추가
캡슐화 - class(연관된 데이터와 동작들을 한 곳에서 처리)와 private 멤버 변수(외부에서의 접근 금지)
추상화 - private 멤버 변수와 getter/setter, 동작없이 데이터만 있는 클래스가 늘어날 수도 있다. 어떻게 추상화 해야 하는지 객관적인 기준이 없다.