멤버 변수 설정

상속 관계에서 변수 설정

상위 클래스에서 멤버 변수를 만들 때 가장 중요하게 생각해야 하는 부분은 접근제한 설정이다. 단일 클래스로 구현할 경우 private 설정으로 불완전하거나 원치 않는 데이터를 차단할 수 있으나, 상속 관계에서는 현재 클래스 뿐 아니라 이 클래스를 상속받는 클래스까지 고려해야 한다.

Galaxy 라는 클래스를 만들 때 Galaxy21, Galaxy21s 클래스 등도 고려해서 만들어야 한다는 의미이다.

자식 클래스까지 접근을 허용하는 protected 접근제한자를 사용하면 이러한 문제를 해결할 수 있다.

데모 1 : private 접근제한으로 구성된 상속관계

Phone.java
public class Phone {
    private String number;
    private int price;
    
    public void setNumber(String number){
        this.number = number;
    }
    public String getNumber(){
        return this.number;
    }
    public void setPrice(int price){
        this.price = price;
    }
    public int getPrice(){
        return this.price;
    }
}

Phone 클래스의 변수를 private으로 구성할 경우 IPhone12 클래스에서 상속을 받았음에도 setter/getter를 이용해서만 변수에 접근할 수 있는 것을 확인할 수 있다. 이 경우 상속의 취지인 개발 생산성 향상에 부합하지 않기 때문에 반드시 막아야 하는 경우가 아니라면 접근을 완화하여 자식 클래스까지 이용할 수 있도록 해주는 것이 좋다.

데모 2 : protected 접근제한으로 구성된 상속관계

Phone.java
public class Phone {
    protected String number;
    protected int price;
    
    public void setNumber(String number){
        this.number = number;
    }
    public String getNumber(){
        return this.number;
    }
    public void setPrice(int price){
        this.price = price;
    }
    public int getPrice(){
        return this.price;
    }
}

데모 1과 비교했을 경우 IPhone12 클래스에서 Phone 클래스를 우회하지 않고 직접 접근할 수 있는 것을 확인할 수 있다. 외부 패키지에서는 setter / getter를 이용해야 접근할 수 있기 때문에 이용 방법에 차별화를 둘 수 있다.

Last updated