728x90
반응형
객체지향 5대 원칙이란?
SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙),
을 말하며, 앞자를 따서 SOILD 원칙이라고 부른다.
프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 소프트웨어를 만드는데 이 원칙들을 적용할 수 있다.
또한 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다.
1. Single Responsiblity Principle (단일 책임 원칙)
- "소프트웨어의 설계 부품(클래스, 함수 등)은 단 하나의 책임만(기능)을 가져야 한다."
설계를 잘한 프로그램은 기본적으로 새로운 요구사항들과 프로그램 변경에 영향을 받는 부분이 적다.
즉, 유지보수가 편이하다는 이점이 있다.
설계를 잘하지 못한 프로그램 (여러 기능을 가지고 있는 모듈)은 강한 결합을 발생할 가능성이 높아진다.
따라서 한 클래스를 한 관심사에 집중하도록 유지하는 것이 중요한 이유는, 이것이 클래스를 더욱 튼튼하게 만들기 때문이다.
2. Open-Closed Principle (개방-패쇄 원칙)
- “소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.”
소프트웨어 개발 작업에 이용된 많은 모듈 중에 하나에 수정을 가할 때 그 모듈을 이용하는 다른 모듈을 줄줄이 고쳐야 한다면, 이와 같은 프로그램은 수정하기가 어렵다.
자주 변경되는 내용은 수정하기 쉽게 설계 하고, 변경되지 않아야 하는 것은 수정되는 내용에 영향을 받지 않게 하는 것이 핵심이다.
객체 지향 프로그래밍 언어(JAVA, C++ 등)에서는 고정되기는 해도 제한되지는 않은, 가능한 동작의 묶음을 표현하는 추상화가 가능하다. 이를 위해 자주 사용되는 문법이 인터페이스(Interface)이다.
3. Liskov Substitution Principle (리스코프 치환 원칙)
“프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.”
부모 클래스와 자식 클래스 사이의 행위에는 일관성이 있어야 한다는 원칙이며,
이는 객체 지향 프로그래밍에서 부모 클래스의 인스턴스 대신 자식 클래스의 인스터스를 사용해도 문제가 없어야 한다는 것을 의미한다.
4. Interface Segregation Principle (인터페이스 분리 원칙)
“특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.”
자신이 사용하지 않는 기능(인터페이스)에는 영향을 받지 말아야 한다는 의미이다.
인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다.
인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다.
5. Dependency Inversion Principle (의존 역전 원칙)
"프로그래머는 변화기 어려운 것에 의존해야지, 변하기 쉬운 것에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다."
변화하기 쉬운것이란 구체적인 것을 말하고, 변화하기 어려운 것이란 추상적인 것을 말한다.
객체지향적인 관점에서 보자면 변화하기 쉬운것이란 구체화 된 클래스를 의미하고, 변화하기 어려운 것은 추상클래스나 인터페이스를 의미한다.
DIP를 만족한다는 것은 의존관계를 맺을 때, 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺는다는 것을 의미
한다.
* 포스트 내용들은 위키피디아을 참고하여 작성하였습니다.
출처:
728x90