Objects 2장 객체지향 프로그래밍

카일·2020년 3월 2일
2

Objects 오브젝트

목록 보기
2/11
post-thumbnail

복습 및 정리

프로그램은 언제나 변화하고 요구사항은 변한다. 프로그램이 가져야 할 덕목은 변경에 유연하게 대처할 수 있는 자세이다. 1장에서 자율성을 부여한 객체는 그 자체로 변경에 유연한 구조를 가질 수 있다. 하지만 그 외에도 예외사항은 발생한다. 할인이라는 역할에 대해서 다양한 객체가 동일한 역할을 수행할 수 있는 경우 누구에게 역할을 할당할 것인가? 이러한 상황에서 유용하게 사용할 수 있는 것이 상속과 인터페이스 이다. 추상화된 계층을 사용하여 같은 역할을 하는 클래스를 하나의 추상화된 인터페이스나 부모클래스로 묶음으로써 인자로 전달되는 과정에서 같은 역할을 구현한 다양한 클래스를 사용할 수 있다. 이렇게 변경하는 경우 새로운 정책이나 새로운 변경사항에 대해서는 같은 추상체를 구현 혹은 상속받는 클래스를 추가함으로써 내부 코드의 수정없이 새로운 정책을 추가할 수 있는 장점을 갖는다.

다형성을 이용한 프로그래밍이 항상 장점만 있는 것은 아니다. 다형성을 이용하게 개발하게 되면 변화에 유연하게 대처할 수 있고 높은 수준에서 즉 추상화된 수준에서 요구사항의 정책을 서술할 수 있다는 장점을 가지지만 디버깅이 어려워지고 프로그램을 이해하는 것이 어려워진다 변화를 예측하고 미리 유연한 프로그램을 구성하기 보다는 단순하면서도 간결한 프로그램에서 요구사항의 변화가 어느정도 정해졌을 때 추상화를 통해 이를 포장하는 것이 바람직한 관점이다.

상속과 인터페이스를 활용하여 유연하게 변하는 프로그램을 작성할 수 있다.

다형성을 이용한 프로그래밍이 무조건적으로 좋은 것은 아니다.

  • 장점
    • 변화에 유연하게 대처할 수 있고
    • 높은 수준에서 요구사항의 정책을 서술할 수 있다.
  • 단점
    • 디버깅이 어려워지고
    • 프로그램을 이해하는 것이 어려워진다.

상속

  • 상속은 코드를 재사용하기 위해서 널리 사용되는 기법이다. 하지만 재활용을 위해 사용되는 것이 아니라 부모 클래스의 인터페이스를 관리하기 위해서 사용된다.

    • 단점
      • 설계가 유연하지 않다. 부모 클래스와 자식 클래스 사이간의 관계를 컴파일 시점에 결정하기 때문에 실행시점에서 종류를 변경하는 것이 불가능하기 때문에
      • 부모클래스의 구현이 자식클래스에 노출됨으로 캡슐화가 약화된다. 이러한 캡슐화의 약화는 부모클래스의 변경이 자식클래스에게 영향을 미치게 되고 이는 결국 요구사항의 변경에 유연하게 대처하기 힘들게 한다.
  • 상속과 합성을 고르게 사용함으로써 다형성의 의미를 더욱 잘 사용할 수 있다.

    • 인터페이스를 베이스로 주입받는 형태를 띄고 인터페이스를 구현하는 곳에서 부모클래스의 인터페이스가 중복되는 경우 상속을 사용한다.
    • 합성으로 사용되는 인자는 인터페이스 타입을 주입받는 형태로 사용하는 것이 좋고 인터페이스 구현단계에서 상속을 고려하는 것도 하나의 방법이다 .
  • 추가적으로 다형성은 동적바인딩을 통해 컴파일시점에서 반영되는 코드와 실행시점에서 사용되는 객체가 다르다. 이를 이용하여 동작하는 방식을 의미하고 대부분의 디자인패턴은 이러한 다형성을 활용하여 구현된다.

어떠한 경우를 이용하든 다형성을 이용하여 유연하게 대처할 수 있는 프로그램을 만들 수 있다. 업캐스팅을 통해서.

0개의 댓글