컴퓨터 프로그래밍에서 SOLID는 객체지향 프로그래밍의 설계의 원칙으로
보다 유지보수에 간편하고 유연하며 확장이 용이한 프로그램을 만들 수 있는 방법론이다.
각 원칙의 정의에 입각해 간략히 알아보고자 한다.
SOLID는 각각의 원칙의 첫자를 약어로 따온것으로 원칙의 내용은 아래와 같다.
5가지 원리의 핵심내용
- SRP(Single Responsibility Principle) - 단일 책임의 원칙
- OCP(Open Close Principle) - 개방 폐쇄 원칙
- LSP(Liskov Substitution Principle) - 리스코프 치환 원칙
- ISP(Interface Segregation Prinvciple) -인터페이스 분리 원칙
- DIP(Dependency Inversion Principle) - 의존관계 역전 원칙
1) SRP(Single Responsibility Principle) - 단일 책임의 원칙
작성된 클래스는 하나의 기능만을 가지며 클래스가 제공하는 모든 메서드는 그 하나의 책임(기능)을 수행하는데 집중해야 한다는 원칙 - 하나의 클래스는 하나의 기능을 표현해야한다.
하나의 클래스가 하나의 역할(기능)을 수행하므로 해서, 여러 클래스의 연쇄작용으로부터 수정이나 변경으로부터 자유로울 수 있으며 코드의 가독성향상, 유지보수에 이점을 가진다
2) OCP(Open Close Principle) - 개방 폐쇄 원칙
소프트웨어의 구성요소( 컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고
변경에는 닫혀있어야 한다는 원리
-요구사항의 변경이나 추가사항이 발생하더라도 기존 구성요소의 수정은 최소화해야하고 기존 구성요소를 쉽게 확장해서 재사용 할 수 있어야 한다는 뜻
3) LSP(Liskov Substitution Principle) - 리스코프 치환 원칙
리스코프 치환원칙은 일반화 관계에 대한 이야기로,
자식 클래스는 최소한 자신의 부모클래스에서 가능한 행위를 수정할 수 있어야 한다는 의미
다시말해 LSP를 만족하면 프로그램에서 -
부모클래스의 인스턴스 대신
자식 클래스의 인스턴스로 대체해도 프로그램의 의미는 변화되지 않는다
상속이나 다형성 등의 관계를 거치더라도
부모- 자식 클래스는 큰 목적에 있어 행위에 차이가 생기면 안되며 행위는 일관되어야 한다는 뜻
4) ISP(Interface Segregation Prinvciple) -인터페이스 분리 원칙
한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리
즉, 어떤 클래스가 다른 클래스에 종속될 때 가능한 필요한 최소한의 인터페이스만을 사용해야한다는 뜻이며
이를 위해 여러개의 구체적인 인터페이스를 지향하는것으로 여러가지 의미를 다양하게 가지는 인터페이스는 추천하지 않는다
5) DIP(Dependency Inversion Principle) - 의존관계 역전 원칙
의존 역전의 원칙은 클래스간 서로 메소드를 호출하거나 객체를 생성하는 객체지향 프로그래밍의 특성상
필수불가결한 의존(상속 등)관계에 있어
추상화 클래스와 같이 범용적으로 공통적인 부분을 우선 의존(상속)하는 것을 우선순위로 두는 것을 말한다.
보다 크고 공통적인 추상클래스로 다양한 행위를 가져가고
반대로 구체화에 의존(상속)하면 이를 재정의하는 프로그래밍이 복잡해지는것을 지양하는 원칙이다.