[Java] 접근 제어 지시자 private

miyeon·2023년 3월 23일
0
post-thumbnail

접근 제어 지시자는 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드이다. 그 중 private 에 대해 실습 해 보았다. 그 외 제어자들
private은 같은 클래스 내부에서만 접근 가능하다.

get()/set() 메서드

private 으로 선언된 멤버 변수 (필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공한다.

[객체]

package ch10;

public class Birthday2 {

	private int day;
	private int month;
	private int year;
	
	private void showLeapYear() {
		if(year % 4 == 0 && year % 100 == 0 && year % 400 == 0) {
			System.out.println(year + "년은 윤년입니다.");
		} 
		System.out.println(year + "년은 윤년이 아닙니다.");
	}
		
	private boolean isValid;	//default : false
	public int getDay() {
		return day;
	}
	
	public void setDay(int day) {
		this.day = day;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		if(month < 1 || month > 12) {
			isValid = false;
		}
		else {
			isValid = true;
			this.month = month;
		}
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}
	
	public void showDate() {
		if(isValid) {
			System.out.println(year + "년 " + month + "월 " + day + "일 입니다.");
			showLeapYear();
		}
		else {
			System.out.println("유효하지 않은 날짜입니다.");
		}
	}
	 
}

원래 예제에 윤달을 추가해서 실습했다.

윤달

1) 4로 나누어 떨어지고, 100으로 나누어 떨어지면서 400으로 나누어 떨어지는 년도
2) 4로 나누어 떨어지고, 100으로 나누어 떨어지지 않는 년도

위 조건을 showLeapYear 메서드로 생성하고, 유효한 날짜를 입력했을 때만 윤달의 여부가 출력되도록 showDate() 메서드 안에 호출했다.

[메인 클래스]

package ch10;

public class BirthdayTest2 {

	public static void main(String[] args) {

		Birthday2 date = new Birthday2();
		date.setYear(2023);
		date.setMonth(3);
		date.setDay(23);
		
		date.showDate();
	}

}

날짜를 private으로 제한을 하지 않을 경우 유효하지 않은 날짜를 입력받았을 경우에 대한 제어를 할 수가 없다.
따라서 private 제어자는 접근을 막고 메서드에서 제어를 함으로써 쓸데없는 데이터의 오용을 막아준다. 👉 정보은닉 (정보보호)

[실행 결과]

유효한 날짜를 입력했을 때 결과

유효하지 않은날짜를 입력했을 때 결과

시행착오

month 에 if 문으로 범위를 제어해주면서 day 에도 범위를 제어 해주려고 isValid 변수를 사용해서 코드를 짰었는데, month를 유효하지 않은 범위로 입력 했을 때 "유효하지 않은 날짜입니다."가 아닌 0이 출력되는 오류가 발생했다.

해결

이는 같은 isValid를 사용해서 생긴 오류였다. month에서 false였더라고 day에서 true가 되어 출력이 된것이다. day에 if문으로 범위를 제어할 때 다른 isValid가 아닌 다른 변수를 사용해서 해결할 수 있다.

profile
내가 보려고 기록하는 블로그

0개의 댓글