-
[Java] SOLID원칙 - 객체 지향 설계의 원칙Java 2022. 6. 16. 04:50
객체 지향 프로그래밍 및 설계의 다섯가지 원칙을 의미하는 것이 바로 SOLID원칙이다.
SOLID는 각각 아래의 원칙을 의미한다.
1. SRP : 단일 책임 원칙
2. OCP : 개방 - 폐쇄 원칙
3. LSP : 리스코프 치환 원칙
4. ISP : 인터페이스 분리 원칙
5. DIP : 의존관계 역전 원칙
위 원칙들은 유지보수와 확장이 쉬운 프로그램을 만들 때 적용할 수 있으며
소스코드를 읽기 쉽고 확장하기 쉬울 때까지 리팩터링 할 때의 지침이 된다.
1. SRP 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야한다.
클래스는 하나의 책임만 가지며 클래스는 그 책임을 완전히 캡슣화해야한다는 것을 의미하며
클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야한다.
책임은 변경하려는 이유로 정의하고
어떤 클래스나 모듈을 변경하려는 단 하나 이유만을 가져야한다고 하는데
예를 들어 보고서 내용을 편집하고 출력하는 모듈이 있다고 할 때
이 모듈은 두가지 이유로 변경될 수 있다.
1. 보고서 내용 때문에 변경
2. 보고서 형식 때문에 변경
따라서 변경 원인이 2가지 라는 것은 2가지 책임을 가진다는 것이고
이러한 이유를 바탕으로 분리된 클래스 또는 모듈로 나눠야한다는 것이다.
이러한 원칙을 통해 하나의 클래스가 하나의 관심사에만 집중하도록 유지한다.
2. OCP 개방-폐쇄 원칙
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
개발을 함에 있어서 하나의 모듈, 클래스를 수정을 할 때
연관된 다른 모듈이나 클래스를 연쇄적으로 수정해야한다면
한번의 수정소요에 지불되는 비용이 높아지게 된다.
즉, 개방-폐쇄원칙은 기능을 추가하거나 변경할 때 원래 코드를 변경하지 않아도
새로운 코드를 추가하면서 기능의 추가나 변경이 가능하다는 것이다.
이를 수행하기 위해 가장 중요한 요소는 추상화로
고정된 추상화에 의존하도록 코드를 작성하여
수정에 대해 닫혀있게 만들고 추상화에 기반하여 확장 클래스를 작성할 수 있게 만든다.
3. LSP 리스코프 치환 원칙
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서
하위 타입의 인스턴스로 바꿀 수 있어야한다.
자료형 B가 자료형 A의 하위형이라면 A의 객체를 B의 객체로
교체 할 수 있어야한다는 원칙이다.
4. ISP 인터페이스 분리 원칙
- 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다
이는 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야한다는 원칙이다.
즉 큰 덩어리의 인터페이스들을 작은 단위로 분리시킴으로써
클라이언트들이 꼭 필요한 메서드만 이용할 수 있도록 하는 것이다.
이와 같은 작은 단위들을 역할 인터페이스라고도 부르며
인터페이스 분리원칙을 통해 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 만든다.
5. DIP 의존관계 역전 원칙
- 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다.
이는 소프트웨어 모듈들을 분리하는 특정형식을 지칭한다.
상위계층이 하위계층에 의존하는 전통적인 의존관계를 역전시킴으로써
상위 계층이 하위 계층의 구현으로부터 독립되게 하는 것이다.
1. 상위 모듈은 하위 모듈에 의존해서는 안된다
상위 모듈과 하위 모듈 모두 추상화에 의존해야한다.
2. 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야한다.
'Java' 카테고리의 다른 글
[Java] 스트림(stream) - 스트림 만들기 (0) 2022.06.17 [Java] 스트림(stream) - 스트림이란? (0) 2022.06.17 [Java] 람다 - 람다식의 타입과 형변환, java.util.function 패키지 (0) 2022.06.15 [Java] 람다 - 람다식이란?, 람다식 작성방법 (0) 2022.06.15 [Java] 쓰레드(Thread) - 쓰레드의 실행제어2(동기화) (0) 2022.06.14