우아한 테크코스/테크코스

[객체지향] 다형성 & 추상화

jamie. 2020. 3. 16. 20:53
반응형

객체 지향이 주는 장점 - 구현 변경의 유연함

 캡슐화 외에도 유연함을 얻을 수 있도록 해주는 방법이 있는데, 이는 추상화이다.

상속(Inheritance)

 한 타입을 그대로 사용하면서 구현을 추가할 수 있도록 해주는 방법을 제공

 

 상속 대상 클래스 - 상위(super) 클래스 / 부모(parent) 클래스

 상속 받는 클래스 - 하위(sub) 클래스 / 자식(child) 클래스 

하위 클래스 특징

 상위 클래스에 정의된 구현을 물려받음. 언어마다 다르지만 자바(또는 다수의 언어)의 경우 private 범위를 갖는 메서드나 필드를 제외한 나머지를 물려받을 수 있음

 필요에 따라 상위 클래스에 정의된 메서드를 재정의(overriding), 즉 새롭게 구현할 수도 있음. 재정의시 해당 메서드를 실행할 때, 하위 클래스에 재정의된 메서드가 실행됨

다형성과 상속

 다형성(Polymorphism) : 한 객체가 여러(poly) 모습(morph)을 갖는다는 의미, 즉 한 객체가 여러 타입을 가질 수 있음

자바에서의 다형성 

 자바와 같은 정적 타입 언어에서는 타입 상속을 통해서 다형성을 구현

 상속 받은 클래스의 상위 클래스 타입 또는 구현한 클래스의 인터페이스 타입에 할당하는 것이 가능함 - upcasting

상속과 구현

 자바 등의 언어는 다형성을 구현하기 위해 타입을 상속받는 방법을 사용

- (implements) 인터페이스 상속 / (extends) 클래스 상속 or 구현 상속

 

 (implements) 인터페이스 상속

- 순전히 타입 정의만을 상속받음

- 자바의 인터페이스, C++의 추상 함수만을 가진 추상 클래스 상속

- 자바의 경우 다중 상속을 지원하지 않는데, 인터페이스는 다중 구현이 가능함

- 구현한 클래스를 실제 구현을 제공한다하여 'concrete(콘크리트-구상) class'라고도 함

 

 (extends) 클래스 상속 or 구현 상속

- 상위 클래스에 정의된 기능을 재사용하기 위한 목적으로 보통 사용

- 구현되어 있는 메서드의 경우에도 재정의 가능

- 재정의한 메서드는 upcasting 후 호출하는 경우에도 재정의한 메서드로 호출됨

Super sup = new Sub();
sub.method1(); // sub에서 재정의한 method1이 실행, 없다면 super에서 정의한 method1이 실행

abstract 타입과 유연함

 추상화(abstract) : 데이터나 프로세스 등을 의미가 비슷한 개념 또는 표현으로 정의하는 과정

 예시) 카드를 뽑기, 물건을 사기 => (무언가를 내게) 가져오기

 

 추상화된 타입은 오퍼레이션의 시그니처만 정의, 상세 구현은 알 수 없음. 구현을 알 수 없기 때문에, 제공할 수 없어서 구현을 제공하지 않는 타입(자바의 인터페이스 등)을 이용해서 abstract 타입을 정의. 

 

 추상화를 한다고 반드시 추상 타입을 만들어야되는 것은 아님. 추상화의 예) 모델링, 추상 타입 추출 등..

 

반응형