※ 객체 지향 설계 5원칙(SOLID)
객체지향 프로그래밍 및 설계의 다섯가지 기본 원칙의 맨 앞철자로 만든 것이다. 이에 의거한 설계를 하면 유지 보수와 확장이 쉬운 시스템을 구축할 수 있다.
1) 단일 책임의 원칙 (Single Responsibility Principle, SRP)
하나의 객체는 단 하나의 책임을 가져야 한다. 즉, 클래스나 모듈을 변경할 이유가 단 하나 뿐이어야 한다는 원칙이다.
SRP는 책임이라는 개념을 정의하며 적절한 클래스의 크기를 제시하는데, 객체 지향설계에서 중요한 개념이고 이해하고 따르기 쉬운 개념이지만, 프로그래머가 가장 무시하는 규칙 중 하나이다.
2) 개방-폐쇄 원칙 (Open-Closed Principle, OCP)
소프트웨어 엔티티 또는 개체(클래스, 모듈, 함수 등)는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
즉, 소프트웨어 개체의 행위는 확장될 수 있어야 하지만 개체를 변경해서는 안 되며, 기존 코드에 영향을 주지않고 소프트웨어에 새로운 기능이나 구성 요소를 추가할 수 있어야 한다
만약 요구사항을 조금 반영하는 데 소프트웨어를 엄청나게 수정해야 한다면, 소모되는 개발 코스트 또한 엄청나게 증가할 것이다.
3) 리스코프 치환 원칙 (Liskov substitution principle, LSP)
어플리케이션에서 객체는 프로그램의 동작에 영향을 주지 않으면서, 하위 타입의 객체로 바꿀 수 있어야 한다.
즉, S가 T의 하위 유형이라면, 프로그램의 기능에 변화를 주지 않고서도 T 타입의 객체를 S 객체로 대체할 수 있어야합니다.
우리가 부모 클래스(Parents)와 자식 클래스(Child) 를 가지고 있다면, 이 두가지의 클래스의 객체를 서로를 바꾸더라도 해당 프로그램에서 잘못된 결과를 도출하지 않아야하는 원칙이다.
한 클래스가 다른 클래스를 포함하는 것이 아니라면 무작정 상속하는 것을 옳은 방법이 아니다. 이럴경우 두 클래스를 모두 포함하는 인터페이스를 구현해야 한다. 요컨대, 새로운 부모 클래스를 만들어 그 둘 모두에게 상속하는 방법을 사용할 수 있다.
4) 인터페이스 분리 원칙 (Interface segregation principle, ISP)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
클라이언트가 필요하지 않는 기능을 가진 인터페이스에 의존해서는 안 되고, 최대한 인터페이스를 작게 유지해야합니다. 즉, 사용자가 필요하지 않은 것들에 의존하지 않도록, 인터페이스는 작고 구체적으로 유지해야 한다는 것입니다.
인터페이스는 특정 클래스가 반드시 구현해야 할 메서드와 속성을 정의하는 일종의 템플릿이고, 이를 통해 서로 다른 클래스가 동일한 동작을 하는것을 유추할 수 있게 되는 것이다. 인터페이스 분리 원칙(ISP)을 적용하면 어플리케이션의 복잡성을 줄이고, 각 클래스가 필요한 기능에만 집중할 수 있게 된다.
5) 의존성 역전 원칙 (Dependency Inversion Principle, DIP)
프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.
즉, 높은 계층의 모듈(도메인)이 저수준의 모듈(하부구조)에 직접 의존해서는 안된다.
- a)프로그래머는 구체적인 것에 의존하기보다는 추상적인 것에 의존해야 한다.
- 고수준 계층의 모듈(도메인)은 저수준 계층의 모듈(하부구조)에 의존해서는 안된다. 둘 다 추상화에 의존해야 한다.
- 추상화는 세부 사항에 의존하지 않아야 하며, 세부 사항이 추상화에 의존해야 한다.
만약 이런 추상화 없이 고수준 계층의 모듈이 저수준 계층의 모듈을 의존하게 되면 사소한 변경 사항에도 고수준 계층의 코드를 변경해야할 것이고, 소모되는 개발 코스트또한 증가할 것이다. DIP 원칙에 따라 설계하면 저수준의 모듈을 수정하더라도 고수준의 모듈 코드를 더이상 수정하지 않아도 된다.
'Sparta > TIL' 카테고리의 다른 글
24.02.26 TIL - test code(1) (0) | 2024.02.27 |
---|---|
24.02.23 TIL - Layered architecture (1) | 2024.02.25 |
24.02.21 TIL - 객체지향 프로그래밍(OOP) (1) (0) | 2024.02.22 |
24.02.20 TIL - 코딩 환경 설정만 한시간 (1) | 2024.02.21 |
24.02.16 TIL - express 미들웨어 정리 (0) | 2024.02.16 |