본문 바로가기

전체 글66

[오브젝트] 12장. 다형성 - 객체지향 패러다임이 주목받기 시작하던 초기에 상속은 타입 계층과 다형성을 구현할 수 있는 거의 유일한 방법이었다. 여기에 더해 상속을 사용하면 코드를 쉽게 재사용 할 수 있다는 과대광고가 널리 퍼지면서 상속에 대한 맹신과 추종이 자라났다. 많은 시간이 흐른 지금도 여전히 상속은 다형성을 구현할 수 있는 가장 일반적인 방법이다. 하지만 최근의 언어들은 상속 이외에도 다형성을 구현할 수 있는 다양한 방법들을 제공하고 있기 때문에 과거에 비해 상속의 중요성이 많이 낮아졌다고 할 수 있다. - 이번 장에서는 상속의 관점에서 다형성이 구현되는 기술적인 메커니즘을 살펴보기로 한다. 이번 장을 읽고 나면 다형성이 런타임에 메시지를 처리하기에 적합한 메서드를 동적으로 탐색하는 과정을 통해 구현되며, 상속이 이런 메.. 2022. 4. 11.
[오브젝트] 11장. 합성과 유연한 설계 - 상속을 이용하면 자식 클래스의 정의에 부모 클래스의 이름을 덧붙이는 것만으로 부모 클래스의 코드를 재사용할 수 있게 된다. 상속을 통해 자식 클래스는 부모 클래스의 정의 대부분을 물려받게 되며 부모 클래스와 다른 부분만 추가하거나 재정의함으로써 기존 코드를 쉽게 확장할 수 있다. 그러나 상속을 제대로 활용하기 위해서는 부모 클래스의 내부 구현에 대해 상세하게 알아야 하기 때문에 자식 클래스와 부모 클래스 사이의 결합도가 높아질 수밖에 없다. 결과적으로 상속은 코드를 재사용할 수 있는 쉽고 간단한 방법일지는 몰라도 우아한 방법이라고는 할 수는 없다. - 합성은 구현에 의존하지 않는다는 점에서 상속과 다르다. 합성은 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존한다. 따라서 합성을 이용하면.. 2022. 4. 11.
[오브젝트] 10장. 상속과 코드 재사용 상속과 중복 코드 - DRY 원칙 : Don't Repeat Yourself. 모든 지식은 시스템 내에서 단일하고, 애매하지 않고, 정말로 믿을 만한 표현 양식을 가져야 한다. - 중복 코드는 새로운 중복 코드를 부른다. 중복 코드를 제거하지 않은 상태에서 코드를 수정할 수 있는 유일한 방법은 새로운 중복 코드를 추가하는 것뿐이다. 중복코드가 늘어날수록 애플리케이션은 변경에 취약해지고 버그가 발생할 가능성이 높아진다. 중복 코드의 양이 많아질수록 버그의 수는 증가하며 그에 비례해 코드를 변경하는 속도는 점점 더 느려진다. - 상속을 이용해서 중복코드를 제거해라! 이미 존재하는 클래스와 유사한 클래스가 필요하다면 코드를 복사하지 말고 상속을 이용해 코드를 재사용하라는 것이다. - 그러나 실제 프로젝트에서 .. 2022. 4. 11.
[오브젝트] 9장. 유연한 설계 8장에서 설명한 기법들을 원칙이라는 관점에서 정리한다. 1. 개방-폐쇄 원칙 : 소프트웨어 개체(클래스, 모듈, 함수 등)는 '확장'에 대해 열려있어야 하고, '수정'에 대해서는 닫혀있어야 한다. '확장'에 대해 열려 있다 : 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다. '수정'에 대해 닫혀 있다 : 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다. - 컴파일 타임 의존성은 코드에서 드러나는 클래스들 사이의 관계, 런타임 의존성은 실행 시에 협력에 참여하는 객체들 사이의 관계다. 유연하고 재사용 가능한 설계에서 런타임 의존성과 컴파일 의존성은 서로 다른 구조를 가진다. - 의존성 관점에서 개방-폐쇄.. 2022. 4. 10.