객체 지향 설계 원칙(SOLID) 중 OCP

2023. 8. 26. 21:47자격증/정보처리기사

반응형

개방 폐쇄 원칙(OPC : Open Close Principle) : 확장에는 열려있고 변경에는 닫혀 있다 라는 것이다.

이게 무슨 말임? 무슨 번역기 돌린 것 같다. 근데 찾아보면 대부분 이런 말투이다. 물론 코딩을 짜보면 무슨 의미인지 맥락적으로 아는 경우가 많지만 처음 보는 사람은 이게 뭐지 싶을 것이다.

from abc import *


class Shape(metaclass=ABCMeta):
    @abstractmethod
    def area(self):
        pass


class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius * self.radius


class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

추상 클래스를 쓰려면 abc(abstract base class)를 불러와야 한다.

Shape라는 클래스를 선언하고 추상메소드로 area를 정의했다.

 

그리고 원과 사각형의 area를 각각 다르게 구현하도록 정의를 한 것. 그렇다면 만약 삼각형을 추가하고싶다면 기존의 코드를 수정해야 하나?

class Triangle(Shape):
    def __init__(self, base, height):
        self.base = base
        self.height = height

    def area(self):
        return 0.5 * self.base * self.height

삼각형의 area의 공식은 위와 같은데 내가 앞서 정의한 원, 사각형이나 기존의 추상 Shape 클래스를 변경한 것은 아니니까.

 

이게 OCP다.

728x90