본문 바로가기

python

python 객체지향(OOP) 설계 원칙

oop를 활용하여 프로그램 설계할때의 5가지 원칙

객체 지향의 5가지 원칙을 이용하여 프로그램을 설계할 수 있다.

SRP(Single Responsilbility Principle) : 단일 책임 원칙

하나의 클래스&메서드는 단 하나의 책임을 가져야 한다는 의미이다.

단 하나의 기능만을 가지는 것을 의미하며 해당 기능이 변경될 때에만 클래스가 변경될 수 있다는 뜻이다.

또한 하나의 기능을 수행하는 클래스는 재사용성이 높아지고, 객체가 결합도가 최소가 된다.

(단일 책임 원칙 예제)

class BookService:
    def findBookById(query):
        # DB에서 찾아오기
        # Log 파일에서 찾은 정보 쓰기

위 클래스에서 사용되는 메서드는 DB에서 책을 찾아오고 찾은 정보를 Log파일에 기록하는 2가지의 일을 수행하는 메서드이다.
단일 책임 원칙은 메서드, 클래스 등에 적용될 수 있으며, 클래스는 이러한 단일책임 원칙을 지키지 못한다고 할 수 있다.
이런 메서드는 각자 일에 맞춰서 나누어 작업을 분리하고 사용하는 곳에서 조합하여 사용해야 한다.
그러면 다시 단일 책임 원칙에 맞게 수정한 코드를 볼 수 있다.

class BookService:
    def findBookById(query):
        // DB에서 찾아오기

    def WriteLog(log):
        // Log 파일에 찾은 정보 쓰기.

OCP(Open Closed Principle) : 개방-폐쇄 원칙

개방/폐쇄의 원칙이란 소프트웨어의 entity(클래스, 모듈, 메서드)들의 확장은 권장하지만 기존 모듈의 수정은 권장하지 않는다는 의미이다.

확장은 할 수 있지만 수정은 하지 않을 수 있도록 프로그램을 작성해야한다.

수정이 되지 않을 부분은 상위 클래스나 인터페이스로, 수정이 될 부분은 하위클래스로 관리한다.

LSP(Liskov Substitution Principle) : 리스코프 치환 법칙

자식 클래스는 언제나 자신의 부모 클래스로 교체될 수 있다는 원칙이다.

자식 클래스가 어떻게 구현이 되었든 부모 클래스를 알면 사용이 가능하여야한다.

다르게 말해 A is B라는 상속 관계가 있을때, B는 자식 클래스 이고 A는 부모클래스이다.

이때 B의 행위는 A의 행위의 예상할 수 있는 범위내에서 이루어져야 한다는것이다.

ISP(Interface Segregation Principle) : 인터페이스 분리 원칙

하나의 일반적인 인터페이스보다는, 여러개의 구체적인 인터페이스를 구현해서 사용해야 한다는 원칙이다.

자신이 사용하지 않는 메서드에 의존하지 않아야 하며, 필요한 인터페이스에만 의존해야한다.

인터페이스에서 단일 책임 원칙이라고도 볼 수 있다.

ISP 원칙을 지킴으로써 좋은건, 만약 Interface를 지나치게 범용적으로 구현한다면

그 Interface를 상속받은 Class는 자신이 사용하지 않는 Interface마저 억지로 구현해야한다.

그리고 사용하지 않는 Interface의 method가 변경되게 되더라도 기존의 Class를 변경해야한다.

이것은 ocp원칙을 위배하기도 한다.

DIP(Dependency Inversion Principle) : 의존성 역전 법칙

어떤 Class를 참조해야하는 상황이 생긴다면 그 Class를 직접 참조하는 것이 아니라 그 대상의

추상클래스를 만들어서 사용하라는 원칙이다.

상위클래스가 하위클래스에 의존하는것을 말하는데, 하위 클래스의 변경이 상위 클래스에 영향을 미치도록하여

의미상 관계를 역전 시키는 것이다.

'python' 카테고리의 다른 글

python 다형성(Polymorphism)  (0) 2020.10.19
python 객체지향(OOP)  (0) 2020.10.19
python 정적메소드  (0) 2020.10.18
python @property에 대해서  (0) 2020.10.13
python 개발환경 구축 pyenv-virtualenv install  (0) 2020.09.30