public 접근 제한자 : 외부 클래스가 자유롭게 사용할 수 있도록 한다.
protected 접근 제한자 : 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 한다.
private 접근 제한자 : 개인적인 것이라 외부에서 사용될 수 없도록 한다.
default 접근 제한자 : 같은 패키지에 소속된 클래스에서만 사용할 수 있도록 한다.
객체 지향 프로그래망에서는 메소드를 통해서 필드를 변경하는 방법을 선호한다.
필드는 외부에서 접근할 수 없도록 막고 메소드는 공개해서 외부에서 메소드를 통해 필드에 접근하도록 유도한다.
이는 메소드는 매개값을 검증해서 유효한 값만 객체의 필드로 저장할 수 있기 때문이다.
이러한 역할을 하는 메소드가 Setter이다.
void setSpeed(double speed){
if(speed < 0) { //매개값이 음수일 경우 speed 필드에 0으로 저장하고, 메소드 실행종료.
this.speed = 0;
return;
}else{
thins.speed = speed;
}
}
double getSpeed(){
double km = speed*1.6; // 필드값인 마일을 km단위로 환산 후 외부로 리턴
return km;
}
클래스를 선언할 때 가능하다면 필드를 private로 선언해서 외부로부터 보호하고, 필드에 대한 Setter와 Getter 메소드를 작성해서 필드값을 안전하게 변경/ 사용하는 것이 좋다.
필드 타입이 boolen일 경우에는 Getter는 get으로 시작하지 않고is로 시작하는 것이 관례이다.
만약 외부에서 필드값을 읽을 수만 있고 변경하지 못하도록 하려면(읽기 전용) Getter 메소드만 선언해도 좋고, 아니면 Setter 메소드가 private 접근 제한을 갖도록 선언해도 좋다.
*참고 혼자공부하는자바 신용권 지음 한빛미디어.