본문 바로가기

개발이야기/C, C++, MFC, C#, .Net

[이론] 객체지향 5원칙 SOLID

저번 주말에 스터디했던 객체지향 5원칙에 대해서 정리해 보아요~


객체지향 5대원칙이라고도 하는 5원칙은 OOP를 설계할 때 따져야 할


다섯가지 원칙의 영문 앞 글자를 따서 SOLID 라고 하는데요


제가 이해한데로 간단하게 명료하게 써 볼께요





* SRP (단일책임의 원칙: Single Responsibility Principle)

하나의 클래스는 한가지 기능만 제공해야 함

여러가지 하면 다른거 고칠 때 문제발생 우려가 있음

그래서 독립적으로 만들어야 되니까 한 클래스에는 한가지 기능에 책임을 질 수 있도록 설계 !!



* OCP (개방폐쇄의 원칙: Open Close Principle)

확장에는 열려있고, 변경에는 닫혀있어야 함

일단 만든 객체에서 변경은 폐쇄으로 하고 확장개방 하도록 설계해야 한다는 의미인데

예를 들어

일단 '남자' 라는 객체가 있어요

이 남자는 여러가지 직업을 가질 수 있어요. 프로그래머, 만화가, 운동선수, 요리사, 등등....

만약 여자 프로그래머가 추가된다면??

'남자' 이전에 '사람' 을 인터페이스로 가지고 있으면 편하겠네요


그러면 사람이라는 객체에서 

남자, 여자 공통부분이 많으니까 공통을 인터페이스로 잡고 각각 고유의 특성을 확장할 수 있으니까 개방적이에요

그리고 사람이라는 객체 자체에서 변경을 해버리면 남자, 여자 객체에서 문제가 발생할 수 있으니까 폐쇄적이네요

(이건 어려움요..)



* LSP (리스코브 치환의 원칙: The Liskov Substitution Principle)

객체(부모)는 서브 타입(자식)에 관계없이 대체 가능해야 함

서브 타입(자식)은 기반 타입(부모)으로 교체할 수 있어야 함

=> 서브 타입(자식)은 기반 타입(부모)의 규칙을 잘 지켜서 만들어져야 함



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

사용하지 않는 기능은 애초에 빼야 함

차라리 인터페이스를 여러개 만들어서 동시에 사용할수 있도록 기능 분리



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

상위 부모 모듈이 하위 자식 모듈에 의존하면 안됨

하위 것 때문에 위에서 변경하면 복잡해짐 

그래서 최대한 단순화 하기 위해 하위 모듈은 상위 모듈을 상속만 하는 걸로...


 

이해한게 맞는지 모르겠네요..

어렵다

'개발이야기 > C, C++, MFC, C#, .Net' 카테고리의 다른 글

[C++] cppcheck (win)  (0) 2014.03.04