ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향] 다형성 & 추상화
    우아한 테크코스/테크코스 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 타입을 정의. 

     

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

     

    반응형

    댓글

Designed by Tistory.