2023.08.04 FRI
50p ~ 64p
4일차 내용 ⬇️
2023.08.04 - [개발 서적 기록/오브젝트_조영호] - 4일차 - 객체 지향 설계를 위한 자세
4일차 - 객체 지향 설계를 위한 자세
2023.08.03 THU 33p ~ 50p 3일차 내용 ⬇️ 2023.08.02 - [개발 서적 기록/오브젝트_조영호] - 3일차 - 캡슐화를 통해 결합도 낮추기 3일차 - 캡슐화를 통해 결합도 낮추기 2023.08.02 WED 17p ~ 33p 2일차 내용 ⬇️ 2
magenta-ming.tistory.com
추상 클래스의 용도
TEMPLATE METHOD 디자인패턴을 사용하기 위해서 이다.
TEMPLATE METHOD 디자인패턴은, 부모 클래스에 기본적인 알고리즘의 흐름을 구현하고, 중간에 필요한 처리를 자식 클래스에 위임한다.
즉 추상 클래스는 부모 추상 클래스가 인터페이스 + 공통적인 구현을 제공하고, 필요한 부분을 자식 클래스가 구현하게끔하는데에 목적이 있다.
상속과 다형성을 통한 유연한 설계
상속과 다형성이 유연하고 쉽게 재사용할 수 있는 코드를 만든다.
그 말은, 객체 지향 프로그래밍은 상속과 다형성을 기반으로 한다는 말이 된다.
하지만 유연한 만큼, 코드의 의존성과 실행 시점의 의존성이 다를 수 있다.
예를 들어, Fruit 인터페이스를 처리하는 코드지만, 실행 시점에서는 구현 클래스 Apple, Orange, ...를 처리하는 의존성을 가지는 것이다.
그래서 확장 가능한 객체 지향 설계는 코드의 의존성과 실행 시점의 의존성이 다르다.
차이에 의한 프로그래밍이 상속을 만든다.
차이에 의한 프로그래밍이란, 부모 클래스와 다른 부분만을 추가해서, 새로운 클래스를 쉽고 빠르게 만드는 방법이다.
상속도 부모와 자식간의 차이를 통해 새로운 객체를 만들게 된다.
상속하게되면, 부모의 속성과 행동이 빌트인으로 제공되기 때문에 코드를 재사용하게된다.
클래스 간 관계를 설정하는 것만으로, 기존의 클래스가 가진 모든 속성과 행동을 새로운 클래스에 포함시킬 수 있다.
결과적으로 클래스 간의 관점에서 상속은, 부모클래스의 구현은 공유하고, 행동은 다른 자식클래스를 만들어낼 수 있다.
인터페이스의 상속에 관한 목적
인터페이스는 객체가 이해할 수 있는 메시지 목록을 정의함으로써, 메시지로의 커뮤니케이션을 가능케한다.
그렇기 때문에 인터페이스를 구현하는 자식 클래스는 부모가 수신할 수 있는 모든 메시지를 수신할 수 있다.
즉, 인터페이스를 통해 상속하면, 업캐스팅이 적용된다.
업캐스팅은 자식 클래스가 부모 클래스를 대신하는 것을 말한다.
외부 객체는 자식 클래스를 부모 클래스와 동일한 타입으로 간주하기 때문에, 업캐스팅이 적용된다.
그래서 메서드나 인스턴스를 재사용하는 단편적인 부분이 인터페이스의 목적이 아니다.
바인딩을 통해 다형성을 가능하게 만든다.
다형성은 컴파일 시점의 의존성과 실행 시점의 의존성이 다른 특성을 통해서, 서로 다른 메서드를 실행할 수 있게 만든다.
동시에 동일한 메시지를 수신했을 때, 객체 타입에 따라 다르게 응답할 수 있는 능력을 가지고 있다.
당연히, 다형성을 추구하는 객체들은 같은 메시지를 이해할 수 있어야한다. 그리고 그 방법이 상속이다.
그렇다면 어떻게 다형성이 가능할까?
상속으로 가능하다는 질문이 아니다. 어떻게 컴파일 시점과 실행 시점의 의존성이 다른데 같은 특성을 가지고 있는 것으로, 같은 메시지를 이해할 수 있는 것으로, 업캐스팅이 적용되는 걸까?
바로, 메서드와 메시지간의 바인딩이 다형성을 가능하게 만든다.
즉, 실행될 메서드는, 실행 시점에 결정하도록 해 연결시키는 원리를 가지고 있다.
이런 바인딩을 지연 바인딩, 동적 바인딩 등으로 부른다.
조상 클래스는 상위에 위치한 모든 클래스다.
코드를 제공하는 클래스는 부모, 부모 클래스로 불릴 뿐만 아니라, super class, 직계 조상, 직접적인 조상으로도 불린다.
코드를 제공받는 클래스는 자식, 자식 클래스로 불릴 뿐만 아니라, subclass, 직계 자손, 직접적인 자손으로도 불린다.
인터페이스와 추상 클래스는 다형성을 추구하는 것은 동일하다.
하지만, 인터페이스는 구현은 공유하지 않은채 인터페이스만 공유하고, 추상 클래스는 인터페이스 뿐만 아니라, 공통적인 구현도 공유한다.
'개발 서적 기록 > 오브젝트_조영호' 카테고리의 다른 글
7일차 - 적절한 책임과 적합한 역할 (0) | 2023.08.08 |
---|---|
6일차 - 합성을 통한 코드 재사용과 협력 (2) | 2023.08.07 |
4일차 - 객체 지향 설계를 위한 자세 (0) | 2023.08.04 |
3일차 - 캡슐화를 통해 결합도 낮추기 (0) | 2023.08.02 |
2일차 - 객체 지향적인 모듈 (0) | 2023.08.02 |