7-22 캡슐화(Encapsulation), 접근 제어자

oyeon·2020년 12월 27일
0

(완)객체지향 개념

목록 보기
25/37

접근 제어자를 사용하여 객체를 캡슐화 가능
접근 제어자를 사용하는 이유(캡슐화 하는 이유)

  • 외부로부터 데이터를 보호하기 위해서
  • 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서

예제 1 - 외부로부터 데이터를 보호

public class Time{
    // 멤버 변수의 접근 제어자를 private으로 하여 외부에서 직접 접근하지 못하도록 한다.
    private int hour;
    private int minute;
    private int second;
    
    public int getHour(){ return hour };
    public void setHour(int hour){
    	if(hour < 0 || hour > 23) return;
        this.hour = hour;
    }
    // 매개변수로 넘겨진 hour가 유효한지 확인해서 알려주는 메서드
   
}

위와 같이 코드를 작성하면 다음과 같이 멤버 변수에 직접 접근할 수 없다.

Time t = new Time();
t.hour = 25;	// 에러!! 멤버변수에 직접 접근 불가능
t.setHour(25);	// 가능. 메서드가 호출되어도 조건문이 있기 때문에 안전하게 값을 보호 한다.

cf) alt+shift+M : 메서드 추출

예제 2 - hour < 0 || hour > 23 부분을 메서드 추출하여 가독성 좋은 코드로 변환
(isNotValidHour는 public일 필요 없으므로 private으로 하는 것이 좋다.)

class Time {
    private int hour;
    private int minute;
    private int second;
    
    public int getHour(){ return hour; };
    public void setHour(int hour){
    	if(isNotValidHour(hour)) return;
        this.hour = hour;
    }
    // 매개변수로 넘겨진 hour가 유효한지 확인해서 알려주는 메서드
    private boolean isNotValidHour(int hour) {
	return hour < 0 || hour > 23;
    }
}
public class practice {
    public static void main(String[] args){
	Time t = new Time();
	t.setHour(21);
	System.out.println(t.getHour());
    }
}
profile
Enjoy to study

0개의 댓글