🦁 걸어봐 위엄 라잌어 라이옹/👀 주차별 과제

[대학교멋사🦁/OOD] 2. 다형성 추상화

우주수첩 2023. 5. 4. 16:59
728x90

1. 다형성(Polymorphism)이란?

  • 여러(poly) 모습(morph)을 갖는 것
  • 객체 지향에서는 한 객체가 여러 타입을 갖는 것
  •  한 객체가 여러 타입의 기능을 제공
  •  타입 상속으로 다형성 구현
    •  하위 타입은 상위 타입도 가능 : 여러 타입을 가질 수 있음

 

 


 

 

2. 추상화(Abstraction)

  • 데이터나 프로세스 등을 의미가 비슷한 개념이나 의미있는 표현으로 정의하는 과정

 

# 추상화 방식

  • 특정한 성질 추출 : 사용자의 Id, 이름, 이메일 추출
  • 공통성질 추출(일반화) : 다른 모델명을 가진 같은 프린터기 == 프린터

 

# 타입 추상화

  • 여러 구현 클래스를 대표하는 상위 타입 도출
  • 흔히 인터페이스 타입으로 추상화
  • 추상화 타입과 구현 클래스는 타입 상속으로 연결
  • 추상화한 타입은 interface로 대개 표현.
    •  공통된 특징을 표현
    • 어떤 기능을 제공하고 있는지를 나타냄
    • 구현은 제공하지 않음
    • 어떻게 구현할지 알 수 없음
    • 실제 구현은 추상 타입을 상속하고 있는 클래스(concrete 클래스)에서 구현을 완성

 

 

# 추상 타입 사용

 

  • 구현을 감추는 특징이 있음
  • 사용 이유 
    1. 유연함 
      • 콘크리트 클래스 사용 시 메소드의 본질과 상관 없는 요구사항 변경에 의해 
        본질을 구현하고 있는 기능에 변화가 발생
      • 추상 타입 사용 시 해당 기능을 사용하는 다른 메소드들의 코드 수정 없이 관련있는 코드만 수정함으로써
        해당 기능을 사용하는 로직은 변하지 않으면서 기능에 대한 수정은 들어갈 수 있게 하는 그런 어메이징한...
  • 사용 결과
    1. 사용 대상 변경이 유연함
      • 내가 사용하는 대상을 쉽게 변경할 수 있는 유연함을 얻을 수 있음
      • Interface(추상타입)에서 구현한 클래스를 수정하거나 구현 클래스를 새로 추가해도
        이를 상속받아 진행하는 concrete class는 변경이 없음

 

 

? 그럼 와그리싸그리 싹싹 다 추상화를 진행해도 되는거야?

 

- 겠냐

  • 추상화를 한다는 것 == 추상타입이 증가한다는 것 == 프로그램의 복잡도 증가
  • 아직 존재하지 않는 기능에 대한 성급한 추상화는 비추
  • 잘못된 추상화 가능성 존재, 복잡도만 증가 => 비 효율적

 

그럼 언제 써?

  • 실제 변경 및 확장이 발생했을 때 추상화 시도

 

어떻게 하면 잘 할 수 있을까?

  • 어떤 식으로 추상화를 하던 간에 구현을 하는 이유가 무엇인지 생각을 해봐야 함.

 

 

 

# OCP(Open-Closed Principle)

  • Open for Extenstion : 확장에 열려있음
  • Closed for Modification : 수정에 닫혀있음

 

  • 추상화를 잘 했을 경우 OCP 구조를 따를 확률이 높아짐. 
  • 이는 수정이나 확장의 비용을 낮춰줌

 

728x90