객체지향 프로그래밍 제 5원칙 SOLID
객체지향 프로그래밍 제 5원칙 SOLID
객체지향 프로그래밍은 소프트웨어 개발 방법론 중 하나로, 프로그램을 독립적인 객체들로 구성하여 문제를 해결하는 방식입니다.
객체지향 프로그래밍의 핵심 원칙은 "SOLID"
원칙으로 알려져 있는 다섯 가지 원칙입니다.
각 원칙은 소프트웨어 설계의 품질과 유지보수성을 향상시키기 위해 따라야 할 지침을 제공합니다.
소프트웨어의 유지보수성, 재사용성, 확장성 등을 향상시키는 객체지향 설계의 중요한 지침을 제공합니다.
이러한 원칙을 따르면 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.
단일 책임 원칙
단일 책임 원칙(Single Responsibility Principle, SRP)은 하나의 클래스(객체)는 단 하나의 책임만을 가져야 한다는 원칙입니다.
책임(Responsibility)이란, 변경의 이유(Reason to Change)를 의미합니다.
즉, 어떤 변화에 의해 어떤 클래스(객체)를 수정해야 할 이유가 오직 하나여야 한다는 뜻입니다.
한 클래스는 하나의 주요 기능 또는 책임을 갖도록 설계되어야 합니다.
개방-폐쇄 원칙
개방-폐쇄 원칙(Open-Closed Principle, OCP)은 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있고(확장 가능), 수정에는 닫혀있어야(변경 금지) 한다는 원칙입니다.
확장(Extension)이란, 새로운 기능이나 요구사항을 추가할 수 있어야 한다는 것을 의미합니다.
수정(Modification)이란, 기존에 작성한 코드를 변경하지 않아야 한다는 것을 의미합니다.
즉, 기존의 코드를 수정하지 않고도 새로운 기능을 추가할 수 있도록 설계되어야 합니다.
리스코프 치환 원칙
리스코프 치환 원칙(Liskov Substitution Principle, LSP)은 서브 타입(Subtype)은 언제나 자신의 기반 타입(Base Type)으로 교체할 수 있어야 한다는 원칙입니다.
즉, 자식 클래스가 부모 클래스의 역할을 완전히 대체할 수 있어야 하며, 이로 인해 프로그램의 기능적 변경이나 오류가 발생해서는 안됩니다.
리스코프 치환 원칙은 “상속은 is-a 관계를 만족할 때만 사용해야 한다”는 것을 강력히 요구합니다.
인터페이스 분리 원칙
인터페이스 분리 원칙(Interface Segregation Principle, ISP)은 클라이언트 자신이 사용하지 않는 메서드에 의존하도록 강요받아서는 안 된다는 원칙입니다.
즉, 클라이언트가 사용하지 않는 기능에 의존하지 않도록 인터페이스를 분리해야 한다는 원칙입니다.
클라이언트가 필요로만 하는 기능을 인터페이스로 분리하며, 그 인터페이스로 의존하는 방법으로 불필요한 재컴파일과 의존을 막을 수 있습니다.
하나의 거대한 범용 인터페이스를 만드는 것이 아니라, 작고 구체적인 여러 인터페이스로 분리하는 방법이 있습니다.
의존성 역전 원칙
의존성 역전 원칙(Dependency Inversion Principle, DIP)은 두가지 규칙으로 구성됩니다.
- 상위 수준의 모듈은 하위 수준의 모듈에 의존하면 안된다는 것과 이 둘 모두 추상화에 의존해야 한다.
- 추상화는 세부사항에 의존해서는 안되고, 세부사항은 추상화에 의존해야 합니다.
고수준과 저수준 모두 중간에 추상화된 인터페이스나 추상 클래스를 두고, 해당 추상 클래스를 통해 상호작용하도록 설계되어야 합니다.
의존성 역전 원칙을 구현하는 일반적인 방법에는 다음과 같은 의존성 주입(Dependency Injection) 방식이 있습니다.
- 생성자 주입 (Constructor Injection): 생성자를 통해 주입
- 세터 주입 (Setter Injection): setter 함수를 통해 주입
- 인터페이스 주입 (Interface Injection): 인터페이스에서 주입받는 구조
댓글남기기