[오브젝트] 5일차

da__ell·2023년 8월 4일
0

독서 - 오브젝트

목록 보기
5/25
post-thumbnail

p 51 ~ p 64

TEMPLATE METHOD 패턴 : 부모 클래스에 기본적인 알고리즘의 흐름을 구현하고 중간에 필요한 처리를 자식 클래스에 위임하는 디자인 패턴

→ 책에서는 할인 정책(Discount Policy)을 구현할 때 할인 여부와 요금계산에 필요한 전체적인 흐름은 부모 클래스에서 정의하고 요금을 계산하는 부분을 추상 메서드에 위임한다. 요금을 계산에 대한 부분은 이를 상속한 자식 클래스에서 오버라이딩한 메서드가 실행된다.

→ 고정 금액 할인 / 비율 금액 할인 경우 2가지에 따라서 요금을 계산하는 부분이 나뉜다. 이렇게 할인 여부와 할인 정책에 따라 할인을 진행하는 공통된 기능이 존재하기 때문에 할인정책은 추상 클래스로 구현한다.

오버라이딩은 부모클래스에 정의된 같은 이름, 같은 파라미터 목록을 가진 메서드를 자식클래스에서 재정의하는 것.

오버로딩은 메서드의 이름을 같지만 제공되는 파라미터가 다른 것. 원래의 메서드를 가르키지 않기 때문에 메서드들의 공존이 가능하다. → 같은 이름으로 오버로딩된 여러 개의 메서드 모두 호출이 가능하다.

생성자의 파라미터 목록을 이용해 초기화에 대한 정보를 전달하도록 강제하여 올바른 상태를 가진 객체의 생성을 보장할 수 있다.

컴파일 시간 의존성과 실행 시간 의존성

어떤 클래스가 다른 클래스에 접근 할 수 있는 경로가 가지거나 해당 클래스의 객체의 메서드를 호출할 경우 두 클래스 사이에 의존성이 존재한다고 말한다.

책에서 예시를 통해 말하는 내용은 다음과 같다. 클래스가 추상 클래스나, 인터페이스를 의존하고 있는 상황에서 코드 상에서는 의존성이 발생하지 않는다. 하지만 생성자에 전달되는 객체를 통해 어떤 구현체를 의존하고 있는지 대상을 확인 할 수 있다.

이렇듯 확장 가능한 객체지향 설계는 클래스의 의존성과 객체의 의존성이 다를 수 있고, 이는 곧 컴파일 시점(코드)의 의존성과 실행 시점의 의존성이 서로 다를 수 있다는 것을 의미한다.
하지만 코드를 이해하는 데 있어 복잡성이 올라갈 수 있다.

→ 설계의 유연함과 확장성은 코드의 이해 난이도는 트레이드 오프의 관계가 된다. 따라서 유연성과 가독성에 있어서 고민해야 한다.

상속 - 차이에 의한 프로그래밍

상속은 객체지향에서 코드를 재사용하기 위해 가장 널리 사용되는 방법이다.

클래스 사이의 관계를 설정하는 것만으로 부모 클래스의 구현을 자식 클래스에 포함시킬 수 있다. 그리고 부모 클래스의 구현 기반을 바탕으로 새로운 자식 클래스를 구현할 수 있다.

→ 부모 클래스와 다른 부분만을 추가로 구현해서 새로운 클래스를 만드는 것을 차이에 의한 프로그래밍이라 한다.

자식 클래스와 부모 클래스

클래스 간의 상속 관계는 상대적이다. 상속 계층에서 두 클래스를 가리키는 가장 일반적인 용어는 슈퍼 클래스와 서브클래스다. 하지만 C++에서는 기반 클래스와 파생클래스라는 새로운 용어를 도입하기도 했다.

profile
daelkdev@gmail.com

0개의 댓글