-
로버트 마틴이 2000년대 명명한 객체지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 앞글자를 따서 소개한 것.
목적은 유지보수와 확장이 쉬운 시스템 개발을 위해.
두문자 약어 개념 S SRP 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야 한다. O OCP 개방-폐쇄 원칙 : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. L LSP 리스코프 치환 원칙 : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. I LSP 인터페이스 분리 원칙 : 인터페이스는 분리가 되면 쪼개라 D DIP 의존관계 역전 원칙 : 프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나다. 단일 책임 원칙 : 한 클래스는 하나의 일만 해야한다는 것,
예로 사각형 클래스는 그리는 책임과 , 계산하는 책임을 동시에 가지고 있다면 하나이상의 책임을 지고 있다는 것
그래서 둘 중 하나를 빼던가 둘 다 빼던가 책임을 분리해야 한다.
개방-폐쇄 원칙 : 확장에는 열려 있고, 변경(수정)에는 닫혀 있어야 한다. 무슨 뜻일까..
사용자가 원하는 기능이 새롭게 추가 됬을 때 원래 있던 객체를 수정하는 것이 아니라 새로운 객체를 추가함으로써
확장에는 열려 있고, 수정에는 닫혀 있다는 말을 지킬 수 있게 되는 거 같다.
예로 오각형,팔각형이 추가될 때 기존 코드를 수정하는 것이 아닌 각 객체를 추가하는 것만으로도 기능이 구형될 때가
있을 수 있겠다. 이렇게 하려면 객체간의 의존도를 줄이고 다형성을 활용해야 할 것이다.
처음부터 개방-폐쇄 원칙을 지키는 것은 어렵기에 처음 총알은 맞고 두 번째 총알에는 확실히 보호하자는 게 좋다.
ocp와 거리가 먼 소프트 웨어 : 변경이 단계적으로 퍼져나간다.
ocp를 잘 따르는 소프트 웨어 : 변경이 필요할 때 기존 코드수정 보다는 새로운 코드를 추가하면 된다.
리스 코프 치환 원칙 : 자식이 부모의 역할을 대체할 수 있어야 한다. 다형성을 이용해야 한다.
예로 피규어를 사용할 때 피겨 클래스 자리에 삼각형, 사각형이 들어가도 작동해야 한다는 것이다.
인터페이스 분리 원칙 : 클라이언트가 지신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.
어떤 클라이언트에서는 사용하지 않고, 다른 어떤 클라이언트에서는 사용하는 메소드가 있다면
이 메소드가 변경될 때 사용하지 않는 클라이언트에 영향을 줄 것이다. 그럼 인터페이스를 분리해야 한다.
예로 drawable과 calcable 인터페이스를 만들었는데 둘 다를 상속받아 사용하니 피겨에서는 calcable을 사용하지 않는데 calc를 사용할 수 있었다. 이렇게 되면 사용자는 불필요한 기능을 사용할 수 있게 돼서 클래스의 목적이 명확해지지 않는다.
의존관계 역전 원칙 : 상위 수준의 모듈은 하위 수준의 모듈에 의존해선 안된다. 둘 다 추상화에 의존 해야한다.
'TIL' 카테고리의 다른 글
함수형 프로그래밍 (0) 2021.01.18 2021.01.18 기록장 (0) 2021.01.17 2021.01.17 기록장 (0) 2021.01.16 OOP에 관해서 (0) 2021.01.16 2021.01.16 기록장 (0) 2021.01.15