해결된 질문
작성
·
377
·
수정됨
1
안녕하세요 영한님 강의 잘 보고 있습니다.
상속 관계와 캡슐화에 대해 궁금증이 있어 질문 남깁니다.
문제를 풀 때 부모와 자식은 각각 별도로 생성되지만, 하나의 묶음으로 생각되어 자식 클래스에서 부모 클래스의 필드에 직접 접근 가능하여야 한다 생각했습니다
그리하여 부모 클래스의 필드를 protected
로 생성하여 풀었는데, 영한님 문제 풀이를 보니 private
으로 감추시는걸 보고 의문점이 생겼습니다
private
으로 감춘다면 기존 부모 클래스 기능을 오버라이딩 하여 부모 필드에 접근이 필요 할 때는 getter/setter
같은 메소드를 만들어서 접근 해야 하는 걸까요?
아래는 Car Class
의 move
메소드를 GasCar Class
가 재정의 하는 코드를 간략하게 작성해보았습니다
public class Car {
private int speed;
public void move(){
speed++;
System.out.println("speed : " + speed);
}
protected int getSpeed() {
return speed;
}
protected void setSpeed(int speed) {
this.speed = speed;
}
}
public class GasCar extends Car{
@Override
public void move() {
int speed = getSpeed() + 2;
setSpeed(speed);
System.out.println("speed : " + speed);
}
}
따라서 상속 관계라도 일반 객체를 사용하는 입장과 동일하게 캡슐화를 해야 하고, 확장의 여지를 두고 부모 클래스의 필드에 접근하는 메소드를 만들어야 하는것인지 궁금합니다!
답변 1
4
안녕하세요. 9kku2님
캡슐화는 상속 관계에서도 마찬가지로 적용됩니다 :)
따라서 자식이 부모의 필드에 직접 접근하는 것 보다는 부모의 메서드를 통해서 접근하는 것이 더 나은 선택입니다.
단순한 예로 부모의 필드를 private으로 사용해서 자식에서 직접 접근하지 못하게 막으면, 자식 클래스가 10개 있다고 가정했을 때 부모의 필드 이름이 변경되어도 부모의 메서드 내부만 변경한다면 모든 자식 클래스의 코드는 변경하지 않아도 되겠지요?
도움이 되셨길 바래요.
감사합니다 ^^