다형성과 추상화
이 글과 하위 글들은 [객체 지향 프로그래밍 입문]에 관한 내용입니다. 최범균님의 인프런의 강의를 보며 정리한 내용으로 문제가 될시 삭제하겠습니다.
다형성
여러(poly) 모습(morph)을 갖는 것
객체 지향에서는 한 객체가 여러 타입을 갖는 것을 말한다. 즉 한 객체가 여러 타입의 기능을 제공하며, 보통 타입 상속으로 다형성을 구현한다. 하위 타입은 상위 타입도 된다.
다형성 예)
추상화(Abstraction)
데이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정.
두 가지 방식의 추상화
특정한 성질
공통 성질(일반화)
간단한 예
(특정한 성질) DB의 USER 테이블: 아이디, 이름, 이메일
(특정한 성질) Money 클래스: 통화, 금액
(공통 성질) 프린터: HP Mxxx, 삼성 SL-Mxxx
(공통 성질) GPU: 지포스, 라데온
타입 추상화
여러 구현 클래스를 대표하는 상위 타입을 도출한다. 흔히 인터페이스 타입으로 추상화하며, 추상화 타입과 구현은 타입 상속으로 연결한다.
아래와 같이 추상 타입을 이용한 프로그래밍을 할 수 있다.
추상 타입은 구현을 감추고, 기능의이 구현이 아닌 의도를 더 잘 드러내 준다.
추상 타입 사용에 따른 이점: 유연함
만약 콘크리트 클래스를 직접 사용한다면?
공통점을 도출하고, 도출한 추상 타입을 사용한다면?
사용할 대상 접근도 추상화 한다면?
언제나 추상화 하는게 좋을까?
추상화 -> 추상 타입 증가 -> 복잡도 증가
No. 아직 존재하지 않는 기능에 대한 이른 추상화는 주의해야 한다. 잘못된 추상화의 가능성이 높아지고 복잡도만 증가된다. 실제 변경, 확장이 발생할 때 추상화를 시도하자.
추상화를 잘 하려면 어떻게 해야 될까?
구현을 한 이유가 무엇 때문인지 생각해야 한다.
Last updated