SOLID 객체지향의 5대 원칙
객체지향에서 강조하는 5가지 원칙
OOP의 5대 원칙
- SRP (단일 책임 원칙)
- OCP (개방, 폐쇄 원칙)
- LSP (리스코프 치환 원칙)
- ISP (인터페이스 분리 원칙)
- DIP (의존 역전 원칙)
Single Responsibility Principle (단일 책임 원칙)
소프트웨어의 메서드, 함수, 클래스는 단 하나의 기능(책임)만을 가져야 한다
응집도는 높이고 결합도를 낮추는 프로그램을 위한 설계방식이다.
한 클래스가 수행하는 기능이 많아지면 클래스 내부의 함수끼리 강한 결합이 발생할 가능성이 커진다.
이는 유지 보수의 비용이 증가하는 현상을 불러온다.
-추가 Tip -
클린 아키텍처에서는 해당 원칙을
컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다
로 설명한다.
컴포넌트를 변경할 이유가 오로지 한 가지라면 컴포넌트는 딱 한 가지 일만 하게 된다.
여기에서 제일 중요한 점은 변경할 이유가 오로지 한 가지 라는 그 자체이다.
좀 더 설명을 붙이자면 컴포넌트를 변경할 이유가 한 가지라면
우리가 어떤 다른 이유로 소프트웨어를 변경하더라도 이 컴포넌트에 대해서는 전혀 신경 쓸 필요가 없어진다.
소프트웨어가 변경되더라도 여전히 우리가 기대한 대로 동작할 것이기 때문이다.
Open-Closed Principle (개방 폐쇄 원칙)
기존의 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계를 해야 한다.
설계를 할 때 변경되는 것이 무엇인지에 초점을 맞춘다.
자주 변경되는 내용은 수정하기 쉽게 설계, 변경되지 않아야 하는 것은 수정되는 내용에 영향을 받지 않게 한다.
이를 가장 잘 해결해주는 것이 인터페이스이다.
Liskov Substitution Principle (리스코프 치환 원칙)
자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.
부모 클래스와 자식 클래스 사이의 행위에는 일관성이 있어야 한다는 원칙
이는 객체지향 프로그래밍에서 부모 클래스의 인스턴스 대신 자식 클래스의 인스턴스를 사용해도 문제가 없어야한다는것을 의미한다.
Interface Segregation Principle (인터페이스 분리 원칙)
클래스에서 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
자신이 사용하지 않는 기능에 대해 영향을 받지 않아야 한다는 내용이다 기능별로 인터페이스를 독립적으로 구현하여 서로에게 영향을 주면 안 된다.
Dependency Inversion Principle (의존 역전 원칙)
변화하기 쉬운 것보다는 변화하기 어려운 것에 의존해야 한다.
상위 모듈은 하위 모듈에 의존해서는 안 된다.
추상화는 세부사항에 의존해서는 안 된다.
세부사항이 추상화에 의존해야 한다.
즉 해당 구현클래스에 직접 의존하기보다는 인터페이스, 추상 클래스에 의존하여 세부 사항에 변경에 영향을 받지 않아야 한다.
댓글남기기