728x90
1. 다형성(Polymorphism)이란?
- 여러(poly) 모습(morph)을 갖는 것
- 객체 지향에서는 한 객체가 여러 타입을 갖는 것
- 한 객체가 여러 타입의 기능을 제공
- 타입 상속으로 다형성 구현
- 하위 타입은 상위 타입도 가능 : 여러 타입을 가질 수 있음
2. 추상화(Abstraction)
- 데이터나 프로세스 등을 의미가 비슷한 개념이나 의미있는 표현으로 정의하는 과정
# 추상화 방식
- 특정한 성질 추출 : 사용자의 Id, 이름, 이메일 추출
- 공통성질 추출(일반화) : 다른 모델명을 가진 같은 프린터기 == 프린터
# 타입 추상화
- 여러 구현 클래스를 대표하는 상위 타입 도출
- 흔히 인터페이스 타입으로 추상화
- 추상화 타입과 구현 클래스는 타입 상속으로 연결
- 추상화한 타입은 interface로 대개 표현.
- 공통된 특징을 표현
- 어떤 기능을 제공하고 있는지를 나타냄
- 구현은 제공하지 않음
- 어떻게 구현할지 알 수 없음
- 실제 구현은 추상 타입을 상속하고 있는 클래스(concrete 클래스)에서 구현을 완성
# 추상 타입 사용
- 구현을 감추는 특징이 있음
- 사용 이유
- 유연함
- 콘크리트 클래스 사용 시 메소드의 본질과 상관 없는 요구사항 변경에 의해
본질을 구현하고 있는 기능에 변화가 발생 - 추상 타입 사용 시 해당 기능을 사용하는 다른 메소드들의 코드 수정 없이 관련있는 코드만 수정함으로써
해당 기능을 사용하는 로직은 변하지 않으면서 기능에 대한 수정은 들어갈 수 있게 하는 그런 어메이징한...
- 콘크리트 클래스 사용 시 메소드의 본질과 상관 없는 요구사항 변경에 의해
- 유연함
- 사용 결과
- 사용 대상 변경이 유연함
- 내가 사용하는 대상을 쉽게 변경할 수 있는 유연함을 얻을 수 있음
- Interface(추상타입)에서 구현한 클래스를 수정하거나 구현 클래스를 새로 추가해도
이를 상속받아 진행하는 concrete class는 변경이 없음
- 사용 대상 변경이 유연함
? 그럼 와그리싸그리 싹싹 다 추상화를 진행해도 되는거야?
- 겠냐
- 추상화를 한다는 것 == 추상타입이 증가한다는 것 == 프로그램의 복잡도 증가
- 아직 존재하지 않는 기능에 대한 성급한 추상화는 비추
- 잘못된 추상화 가능성 존재, 복잡도만 증가 => 비 효율적
그럼 언제 써?
- 실제 변경 및 확장이 발생했을 때 추상화 시도
어떻게 하면 잘 할 수 있을까?
- 어떤 식으로 추상화를 하던 간에 구현을 하는 이유가 무엇인지 생각을 해봐야 함.
# OCP(Open-Closed Principle)
- Open for Extenstion : 확장에 열려있음
- Closed for Modification : 수정에 닫혀있음
- 추상화를 잘 했을 경우 OCP 구조를 따를 확률이 높아짐.
- 이는 수정이나 확장의 비용을 낮춰줌
728x90
'🦁 걸어봐 위엄 라잌어 라이옹 > 👀 주차별 과제' 카테고리의 다른 글
[대학교멋사🦁/OOD] 4. 기능과 책임 분리 (0) | 2023.05.05 |
---|---|
[대학교멋사🦁/OOD] 3. 상속 보다 조립 (0) | 2023.05.04 |
[대학교멋사🦁/OOD] 1. 객체 | 캡슐화 (1) | 2023.05.04 |
[대학교멋사🦁/JAVA] Assignment_2회차_3 (1) | 2023.04.28 |
[대학교멋사🦁/JAVA] Assignment_2회차_2 (0) | 2023.04.28 |