본문 바로가기
TIL/잡학다식

[잡학다식] 개방-폐쇄 원칙(OCP: Open-Closed Principle)

by 죠르띠에 2022. 7. 11.

객체지향 설계 5원칙

  • SRP(Single Responsibility Principle) - 단일 책임 원칙
  • OCP(Open-Closed Principle) - 개방-폐쇄 원칙
  • LSP(Liskov Substitution Principle) - 리스코프 치환 원칙
  • ISP(Interface Segregation Principle) - 인터페이스 분리 원칙
  • DIP(Dependency Inversion Principle) - 의존관계 역전 원칙

 

이번에 알아볼 것은 SOLID의 O인 OCP(Open-Closed Principle) - 개방-폐쇄 원칙에 대해 알아볼 것이다.

 

소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고,
수정에 대해서는 닫혀 있어야 한다.
- WIKIPEDIA -

 

 

OCP 예시

개방-폐쇄 원칙은 추상화가 핵심 요소이다. 저번에 예로 들었던 스위치로 알아보자.

class Switch {

    String switchOn(String machine){
    	return "Switch on " + machine;
    }
    
    String switchOff(String machine){
    	return "Switch off " + machine;
    }
    
}

각 메소드에 매개변수를 주어 해당 기기의 전원이 키고 끄는 것을 확인할 수 있게 했다.

이렇게 하면 스위치의 기능을 사용하고 싶을 때, 상속을 받아 사용할 수 있다. 그리고 해당 기능을 수정한다고 했을 때 Switch 클래스를 직접 수정하지 않고 상속받은 클래스에서 오버라이딩하여 기능을 확장할 수 있게 된다.

 

 

느낀점

개방-폐쇄 원칙은 이해하기가 조금 어려웠다. 인터페이스도 생각해보고 상속도 생각해보고 하니까 좀 더 쉽게 이해하기 쉬운게 상속이라서 예제도 상속에 관련지어 했다. 그리고 저번 글에도 나왔던 스위치로 예시를 들었다. 여름이라 에어컨과 선풍기를 하루종일 켜놓고 살기에 지금 날씨와 생각해보면 적절하다고 생각했다.

조금 더 딥하게 조사하면 끝도 없을 것 같아서 조금만 적었다. 다음에 정리하게 되면 발생할 수 있는 문제 등을 좀 조사해 봐야겠다.