-
[객체지향] 다형성 & 추상화우아한 테크코스/테크코스 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 타입을 정의.
추상화를 한다고 반드시 추상 타입을 만들어야되는 것은 아님. 추상화의 예) 모델링, 추상 타입 추출 등..
반응형'우아한 테크코스 > 테크코스' 카테고리의 다른 글
3, 4주차 리뷰 (0) 2020.03.16 [Java] 단위 테스트 명명규칙 (0) 2020.03.16 [프로그래밍 패러다임] 객체 지향 프로그래밍 (0) 2020.03.14 [프로그래밍 패러다임] 절차지향 VS 객체지향 (0) 2020.03.14 [IntelliJ] 테스트 커버리지 확인하기 (0) 2020.03.13