JAVA & Spring/JAVA 이론

[JAVA] 접근 제어 지시자( private, protected, default, public) / 정보은닉, 캡슐화

HSRyuuu 2023. 5. 17. 11:09

1. 접근 제어 지시자(access modifier)

클래스 외부에서 클래스의 멤버변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드

public > default > protected > private

  1. public : 클래스의 외부 어디에서나 접근 가능
  2. default : 같은 패키지 내부에서만 접근 가능
  3. protected : 같은 패키지나 상속관계의 클래스에서 접근 가능 / 그 외에서는 접근 불가
  4. private : 같은 클래스 내부에서만 접근가능

2. get() , set() 메서드

private으로 선언된 멤버 변수에는 접근할 수 없다.  >> 접근, 수정할 수 있는 메서드를 public으로 제공

  • get() 메서드만 제공되는 경우 : read-only field
  • 이클립스에서 [shift + alt + s] -> Generate Getters and Setters로 자동 생성 가능
  • 인텔리제이에서 [alt+insert] -> Getters and Setters로 자동 생성 가능

getter은 해당 클래스 객체의 값을 가져오는 메서드이고, setter은 해당 클래스 객체의 값을 세팅(설정)하는 메서드이다.

class Car{	
	private String color;	
	private int speed;	
    
    public Car(){}
    
	public Car(String color, int speed){	
		this.color = color;	
		this.speed = speed;
	}
	
	public String getColor() {
		return color;	
	}
	public void setColor(String color){
		this.color = color;
	}
    
	public int getSpeed(){
		return speed;
	}
	public void setSpeed(int speed){
		this.speed = speed;
	}
   
 }

3. 정보 은닉

  • 정보은닉 : private 키워드를 사용해서 외부에서 클래스 내부의 정보에 접근할 수 없도록 하는 기능
  • 외부에서 꼭 필요한 정보만 제어하고 접근할 수 있도록 함.
class Date{
 	private int year;
	private int month;
	private int day;
	private boolean isValid;
    
	public void setYear(int year) {
		this.year = year;
	}
	public void setMonth(int month) {
		if(month<1||month>12){
			isValid=false;
        }
		else {
			isValid=true;
			this.month = month;
		}
	}
      public void setDay(int day) {
		 this.day = day;
	 }

}

위의 코드처럼 month 변수를 private로 설정하면 외부에서는 date.month와 같이 변수에 직접 접근하지 못하고,

setMonth()를 통해 접근해야 한다.,

Date date = new Date();
date.setYear(2023);
date.setMonth(1);
// date.setMonth(14); //isValid=false
date.setDay(31);

month를 1~12월 사이로 설정한다면 isValid 가 true가 되고 정상적으로 month 변수에 값이 전달되겠지만, 

그렇지 않다면 isValid는 false가 되어 날짜 대신 " 유효하지 않은 날짜입니다. " 가 출력될 것이다.

 

위와 같이 정보은닉을 사용하면,

month 값이 잘못 입력되는 것을 방지할 수 있고,

외부에서 날짜 데이터에 접근할 수 없도록 할 수 있다.


4. 캡슐화 (encapsulation)

정보은닉을 활용한 캡슐화

  • 외부에서 꼭 필요한 정보, 기능만을 외부에 오픈
  • 대부분의 멤버 변수와 메서드를 감추고, 외부에 통합된 인터페이스만을 제공하여 일관된 기능을 구형하게 함
  • 각각의 메서드나 멤버변수에 접근함으로써 발생하는 오류를 최소화한다.

 

반응형