JAVA & Spring/JAVA 이론
[JAVA] 접근 제어 지시자( private, protected, default, public) / 정보은닉, 캡슐화
HSRyuuu
2023. 5. 17. 11:09
1. 접근 제어 지시자(access modifier)
클래스 외부에서 클래스의 멤버변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
public > default > protected > private
- public : 클래스의 외부 어디에서나 접근 가능
- default : 같은 패키지 내부에서만 접근 가능
- protected : 같은 패키지나 상속관계의 클래스에서 접근 가능 / 그 외에서는 접근 불가
- 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)
정보은닉을 활용한 캡슐화
- 외부에서 꼭 필요한 정보, 기능만을 외부에 오픈
- 대부분의 멤버 변수와 메서드를 감추고, 외부에 통합된 인터페이스만을 제공하여 일관된 기능을 구형하게 함
- 각각의 메서드나 멤버변수에 접근함으로써 발생하는 오류를 최소화한다.
반응형