닭발개발

[오브젝트] 5일차. 51~64pg | 오버라이딩, 오버로딩, 상속과 다형성 본문

책책책 책을 읽읍시다‼ ver.개발/[ 오브젝트: 코드로 이해하는 객체지향 설계 ]

[오브젝트] 5일차. 51~64pg | 오버라이딩, 오버로딩, 상속과 다형성

D269 2023. 6. 30. 09:10
728x90

 

5일차.

 
오브젝트: 코드로 이해하는 객체지향 설계[1주차_금요일]
51~64pg
 
 

#요약 

 **Chapter 02. 객체지향 프로그래밍** 

(feat. 가벼운 마음가짐)
 
03. 할인요금 구하기

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

- 오버라이딩(overriding) : 부모 클래스에 정의된 같은 이름, 같은 파라미터 목록을 가진 메서드를 자식 클래스에서 재정의하는 경우. 자식 클래스의 메서드는 오버라이딩한 부모 클래스의 메서드를 가리키기 때문에 외부에서는 부모 클래스의 메서드가 보이지 않는다.

- 오버로딩(overloading) : 메서드의 이름은 같지만 제공되는 파라미터의 목록이 다르다. 오버로딩한 메서드는 원래의 메서드를 가리지 않기 때문에 이 메서드들은 사이 좋게 공존한다.

 

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

 

04. 상속과 다형성

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

- 코드의 의존성과 실행 시점의 의존성이 서로 다를 수 있다 : 클래스 사이의 의존성과 객체 사이의 의존성은 동일하지 않을 수 있다.

 

- 상속을 이용하면 클래스 사이에 관계를 설정하는 것만으로 기존 클래스가 가지고 있는 모든 속성과 행동을 새로운 클래스에 포함시킬 수 있다.

- 차이에 의한 프로그래밍(programming by difference) : 부모 클래스와 다른 부분만을 추가해서 새로운 클래스를 쉽고 빠르게 만드는 방법

- 코드를 제공하는 클래스 : 슈퍼클래스, 부모클래스, 부모, 직계조상, 직접적인 조상

- 코드를 제공받는 클래스 : 서브클래스, 자식클래스, 자식, 직계 자손, 직접적인 자손

 

- 자식클래스는 부모 클래스가 수신할 수 있는 모든 메시지를 수신할 수 있기 때문에 외부객체는 자식 클래스를 부모 클래스와 동일한 타입으로 간주할 수있다.

- 업캐스팅(upcasting) : 자식 클래스가 부모 클래스를 대신하는 것.

 

- 다형성 : 동일한 메시지를 전송하지만 실제로 어떤 메서드가 실행될 것인지는 메시지를 수신하는 객체의 클래스가 무엇이냐에 따라 달라진다.

- 지연 바인딩(lazy binding) 또는 동적 바인딩(dynamic binding) : 메시지와 메서드를 실행 시점에 바인딩하는 것.

- 초기 바인딩(early binding) 또는 정적 바인딩(static binding) : 전통적인 함수 호출처럼 컴파일 시점에 실행될 함수나 프로시져를 결정하는 것.

- 객체지향이 컴파일 시점의 의존성과 실행 시점의 의존성을 분리하고, 하나의 메시지를 선택적으로 서로 다른 메서드에 연결할 수 있는 이유가 바로 지연 바인딩이라는 메커니즘을 사용하기 때문이다.

 

- 구현 상속(implementation inheritance) : 서브 클래싱(subclassing) : 순수하게 코드를 재사용하기 위한 목적으로 상속을 사용하는 것.
- 인터페이스 상속(interface ingeritance) : 서브 타이핑(subtyping) : 다형적인 협력을 위해 부모 클래스와 자식 클래스가 인터페이스를 공유할 수 있도록 상속을 이용하는 것.

- 상속은 구현 상속이 아니라 인터페이스 상속을 위해 사용해야 한다.

 

 


 

#발췌

유연하고, 쉽게 재사용할 수 있으며, 확장 가능한 객체지향 설계가 가지는 특징은 코드의 의존성과 실행 시점의 의존성이 다르다는 것이다.
 설계가 유연해질수록 코드를 이해하고 디버깅하기는 점점 더 어려워진다는 사실을 기억하라. 반면 유연성을 억제하면 코드를 이해하고 디버깅하기는 쉬워지지만 재사용성과 확장 가능성은 낮아진다는 사실도 기억하라. 
다형성은 동일한 메시지를 수신했을 때 객체의 타입에 따라 다르게 응답할 수 있는 능력이다.
클래스를 상속받는 것만이 다형성을 구현할 수 있는 유일한 방법은 아니다.

 

 

 

 

728x90
반응형