본문 바로가기
알고리즘/디자인 패턴

3. Object-Oriented Paradigm 예시

by 지칸 2021. 3. 11.

안녕하세요. 지칸입니다.

1~2장에 걸쳐서 OOP에 대해 필요한 기본 개념에 대해서 공부해봤습니다.

본 글에서는 OOP를 써야하는 이유를 설명하기 위한 예시를 보여드리겠습니다.

 

class = ADT + Inheritance + Polymorphism

1) 도형 그리기

우리는 Line,Circle,Rectangle 도형 3가지를 그릴 수 있는 함수를 만들려고 합니다.

어떠한 도형을 그려달라고 요청하면 도형 타입을 확인하여 각각의 알맞는 도형을 그린다고 하면 아래와 같은 코드를 만들 수 있습니다.

Client 입장에서 Circle를 그리고 싶을 때 renderShape를 호출하고

파라미터로 Circle관련 데이터를 넣어준다면 if-else 조건에 따라 DrawCircle를 호출할 것입니다.

Line이였다면 DrawLine를 호출할 것입니다.

여기까진 별 문제 없이 코드가 동작하며 3가지 도형이 잘 그려집니다.


2) 새로운 도형 확장하기

만약, 새로운 삼각형 도형이 추가된다면 어떻게 할까요?? 

아래 처럼 확장을 하면 될까요??

새로운 도형이 생길 때 마다 Client 입장에서 if-else를 계속 추가하며 draw 함수를 만들어야 합니다.

이 방식은 확장성에 문제가 있습니다.

지금은 3~4개여서 if-else로 관리가 되는 것입니다. 수만개의 도형이라면 코드는 지져분해지며

도형의 추가/삭제가 있을 때 마다 해당 if-else를 수정해줘야 합니다.


3) object-oriented programming(객체 지향 프로그래밍)

여기서, ADT + Inheritance + Polymorphism 를 도입한다면 매우 스마트하게 바꿀 수 있습니다.

Shape이라는 추상화 클래스를 만들고 각 도형들은 상속을 받습니다.

다형성을 이용하여 draw라는 동일 이름의 함수를 각 도형마다 다른 동작을 하는 함수를 정의합니다.

이렇게 하면, 어떤 타입의 도형인지 체크할 필요가 없어지기 때문에 우리는 코드가 매우 간단해지는 걸 알 수 있습니다.

 

마찬가지로 도형이 확장되면 어떻게 달라질까요??

새로운 Triangle 도형이 추가되더라도 코드는 변하지 않습니다.

그리고 Client는 새로운 도형이 추가/삭제되든 신경쓰지 않습니다.

Client는 Shape 추상화 클래스만 보일테니까요.

 

이렇게 우리는 추상화 클래스와 상속, 다형성을 이용하여 확장성과 재사용성을 향상시키는 디자인을 할 수 있습니다.

 

반응형

댓글