[Java] 접근제어자

정보제어자의 종류

  • public : 모든 패키지 및 클래스에서 다 접근 가능
  • private : 클래스 내부에서만 접근 가능
  • protected : 상위 클래스에서 하위 클래스로 public하게 접근할 때 사용
  • 기본 접근 제어자(default) : 같은 패키지 내에서만 사용, 서로 다른 패키지에서는 접근 불가능(public으로 해야 다른 패키지에서도 접근 가능)

private

정보 보안, 보호를 위해 접근제어자를 private으로 선언 한 뒤, 통상적인 get, sum 메소드를 만들어 원하는 정보를 선언, 접근, 제어할 수 있게 해준다.

private int day;

// 통상적인 이름 set
public void setDay(int day) {
        this.day = day;
        // this.day의 day는 위의 private int day, 우측 day는 setDay의 변수 day
}

// 통상적인 이름 get
public int getDay() {
        return day;
}

이클립스의 경우 우클릭 -> Source -> Generate Getters and Setters 옵션을 통해 다른 변수들도 빠르게 get, set 메소드를 만들 수 있다.

특정 변수를 get만 주거나 혹은 set만 주어서 원하는 정보만 제공하거나,
메소드 안에서 조건문을 이용하여 get, set에서 원하는 제어를 할 수 있다.

package objectoriented;

public class MyDate {

	// private이기 때문에 다른 클래스에서 참조 불가능
	private int day;
	private int month;
	private int year;

	private boolean isValid; // boolean은 초기변수 일 때 default가 false

	// private한 속성을 불러오는 방법

	// 통상적인 이름 set
	public void setDay(int day) {
		this.day = day;
		//this.day의 day는 위의  private int day, 우측 day는 setDay의 변수 day
	}

	// 통상적인 이름 get
	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		if(month<1 || month>12) { // public과 다르게 특정 조건 핸들링 가능(정보 보안, 보호)
			isValid=false;
		}
		else {
			isValid=true;
			this.month = month;
		}
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public int getDay() {
		return day;
	}

	// public과 다르게 특정변수의 get, set 조정 가능

	public void showDate() {
		if(isValid) {
			System.out.println(year + "년 "+month+"월 "+day+"일");
		}

		else {
			System.out.println("유효하지 않은 값입니다.");
		}
	}
}

private를 활용한 코드

package objectoriented;

public class MyDateTest {

	public static void main(String[] args) {

		MyDate date = new MyDate();
		date.setYear(2020);
		date.setMonth(21);
		date.setDay(5);
		date.showDate(); // 유효하지 않은 값입니다. 출력

		date.setMonth(2);
		date.showDate(); // 2020년 2월 5일 출력

	}
}

Test용 코드