JAVA_34_캡슐화

charl hi·2021년 8월 18일
0

JAVA

목록 보기
34/53

접근 제어자를 사용하는 이유

  • 외부로부터 데이터를 보호하기 위해 : 캡슐화

  • 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해

  • 접근 제어자를 사용해 최소한으로 줄였다가 점차 넓혀가는 게 좋다.

  • iv 직접 접근보다 ✨private iv명으로 보호한 뒤, ✨public 메소드명을 통한 간접 접근이 훨씬 안전하다.


  • ✨ alt+shift+m : 메소드 만들기
class Time {
	private int hour;	// 0~23만 가져야 한다.-> 접근 제한!!
//	private int minute;	// 직접 접근 제한하고
//	private int second;

	// public 메소드를 통한 간접 접근
	// 시 입력받음
	public void setHour(int hour) {
		if (isNotValidHour(hour)) {		// alt+shift+m
			return;
		}
		this.hour = hour;
        //false-> hour값 20으로 바뀜
	}
	// 매개변수로 받은 hour가 유효한지 확인
	// 여기서만 쓰이기 때문에 private이 좋다.
	private boolean isNotValidHour(int hour) {
		return hour < 0 || hour > 23;
        //0미만,23초과면 true->return문으로 밖으로 빠져나감
        //그러면 저 메소드(t.setHour(100);)로 호출돼도 hour값이 100으로 안바뀜
	}
	// 입력받은 시 읽기, 반환
	public int getHour() {
		return hour;
	}
	
}


public class TimeTest {

	public static void main(String[] args) {
		// 접근제어자 활용
		Time t = new Time();
		//t.hour = 100; <- private이므로 에러난다.
		t.setHour(20);	//false -> this.hour = 20
		System.out.println(t.getHour());
		t.setHour(100);	//true -> return
		System.out.println(t.getHour());
	}

}

20
20

-> 업그레이드!

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;
	}
	private boolean isNotValidHour(int hour) {
		return hour<0 || hour>23;
	}
	public int getMinute() {
		return minute;
	}
	public void setMinute(int minute) {
		if(isNotValidMinute(minute)) return;
		this.minute = minute;
	}
	private boolean isNotValidMinute(int minute) {
		return minute<0 || minute>59;
	}
	public int getSecond() {
		return second;
	}
	public void setSecond(int second) {
		if(isNotValidSecond(second)) return;
		this.second = second;
	}
	private boolean isNotValidSecond(int second) {
		return second<0 || second>59;
	}
}



public class TimeTest {

	public static void main(String[] args) {
		Time t = new Time();
		t.setHour(22);
		t.setMinute(59);
		t.setSecond(600);
		System.out.println(t.getHour()+"시 "+t.getMinute()+"분 "+t.getSecond()+"초");
		t.setHour(2);
		System.out.println(t.getHour()+"시 "+t.getMinute()+"분 "+t.getSecond()+"초");

	}

}

22시 59분 0초
2시 59분 0초



Ref

0개의 댓글

관련 채용 정보