[객체지향 사고 프로세스] 질문입니다. #40
-
잘 이해가 안되는 책 내용 전문입니다. 확장성을 고려한 설계클래스에 새로운 기능을 추가하는 일이 기존 클래스를 확장하고 몇 가지 새로운 메서드를 추가하고 다른 클래스의 행위를 수정하는 일처럼 간단할 수 있다. 모든 것을 다시 작성할 필요는 없다. 이럴 때 상속이 필요하다. Person 클래스를 작성하는 일을 이제 막 끝낸 경우라면, 나중에 Employee 클래스나 Customer 클래스를 작성할 수 있다는 사실을 고려해야 한다. 따라서, Employee를 Person으로부터 상속받는 것이 최선의 전략일 수 있는데, 이런 경우에 Person 클래스를 확장 가능 클래스라고 부른다. 여러분은 Emplyee 클래스나 Customer 클래스 등이 Person 클래스를 확장해 쓰지 못하게 하는 행위가 Person 안에 들어 있기를 바라지 않는다(설계 시에 다른 클래스가 Person을 확장하려는 의도가 있다고 가정했을 때). 예를 들어, 여러분이 감독 기능들에 특화된 Employee 클래스 안에 기능성을 담당하는 코드를 넣지 않으려 한다고 하자. 그런식으로 Employee 클래스를 작성해 두었는데, Employee에서 상속되는 감독 기능이 필요하지 않은 클래스가 있다면, 여러분은 문제에 봉착하게 된다. 이런 점이 앞에서 논의한 추상화 지침을 다루는 것이다. Person 클래스에는 개인과 관련된 데이터와 행위만 포함되어야 한다. 그런 다음에 그 밖의 클래스가 이를 서브클래스로 삼아서 적절한 데이터와 행위를 상속할 수 있다. 클래스는 확장할 수 있게 개방되어야 하지만, 수정하는 일과 관련해서는 폐쇄되어야한다. 인터페이스들부터 사용해 클래스에 코딩하면 실시간으로 테스트하고 배포한 코드를 건드리지 않고도 데코레이터와 같은 온갖 종류의 패턴을 사용해 필요한 것을 확장할 수 이 있다. 질문
뽑아낸 질문은 모두 italic으로 표시된 부분에서 가져온 겁니당. 억지로 질문을 뽑아내려고 하다보니 질문 자체도 이해가 잘 안되는 느낌이 강합니다..ㅠㅠ 여튼 italic체에서 무엇을 말하고 싶은지에 대해서 이해가 잘 안되요!!ㅠ |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 3 replies
-
Person class의 public method혹은 protected method 통해 속성 값을 변경할 수 있어야 하는데 그렇지 않게 설계되면 안된다는 뜻인 것 같습니다. 맞게 이해하신 것 같아요. Employee class 안에 감독 기능이 있는데, 이 클래스를 상속 받는 FreeEmployee class에 감독 기능이 필요 없게 하고 싶은데 상속을 받으면 어쩔 수 없이 감독 기능이 노출이 되니까요. 추상화에 대한 생각을 하다 보면 맞는 생각의 전개입니다.
object를 상속받은 class type은 무엇인가? => GetType 이정도만 있으면 object를 표현하는데 충분하다고 생각한 것이죠. 제가 알기로 2000년에 C# 언어를 처음 설계하고 20년간 사용하면서 이 최상위 class인 object class에 대한 설계의 변경은 없었습니다. |
Beta Was this translation helpful? Give feedback.
Person class의 public method혹은 protected method 통해 속성 값을 변경할 수 있어야 하는데 그렇지 않게 설계되면 안된다는 뜻인 것 같습니다.
Person class를 상속 받는 class는 Person class의 private method는 사용하지 못할테니까요.
맞게 이해하신 것 같아요. Employee class 안에 감독 기능이 있는데, 이 클래스를 상속 받는 FreeEmployee class에 감독 기능이 필요 없게 하고 싶은데 상속을 받으면 어쩔 수 없이 감독 기능이 노출이 되니까요.
FreeEmployee는 제가 예제로 만든 건데, 감독을 받지 않는 고용인이라면 대략 프리랜서와 같은 고용 형태일 테니까 이걸 생각해 보면 어떨까 싶어서 넣어 봤습니다.
추상화에 대한 생각을 하다 보면 맞는 생각의 전개입니다.
일례로 C#의 object class는 모든 class 객체가 상속받는 최상위 기본 class 입니다.
object class는 속성이 없고 method만 노출되어 있는데 object가 해야 하는 매우 기본적인 method만 노출되어 있습니다.
object를 상속받은 class type은 무엇인가? => GetType
object가 같은지 어떻게 판별할 것인가? => Equals
object가 실제…