Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- #abex크랙미4번
- Spring
- #크랙미3번
- #심플즈
- java
- java8
- GraphQL
- #abex
- Easy
- #보안뉴스
- #abex크랙미
- #크랙미
- 리버싱
- #크랙미 10번
- springframework
- #크랙미 5번
- #파밍
- #크랙미4번
- #크랙미 9번
- #크랙미2번
- #고클린
- leetcode
- #심플즈 크랙미
- #리버싱
- #보안이슈
Archives
- Today
- Total
Halo World
[JAVA] SOLID 원칙 본문
SOLID는 OOP설계의 다섯가지 기본 원칙으로 객체지향 설계를 할때 지켜야 하는 원칙으로 알려져 있다.
SRP (Single Responsibility Principle)
- 단일 책임 원칙 : 하나의 클래스는 하나의 책임만 갖는다.
- 한 클래스가 여러 책임을 갖고 있는 경우 혼재된 책임을 개별 클래스로 분할하여 한 클래스당 하나의 책임만 맡도록 한다. 자식 클래스끼리 유사한 책임을 중복으로 정의한다면, 부모 클래스로 공통되는 책임을 위임한다.
- 여러 클래스에 동일한 책임이 분리된 경우 중복되는 책임을 특정 클래스로 분리한다. (응집성 증가)
- 장점 : 기능의 책임 영역이 확실해져 한 책임의 변화가 다른 책임에게 side effect를 미치지 않도록 방지할 수 있고, 코드의 가독성과 유지보수성이 향상된다.
- 클래스는 클래스의 책임이 잘 드러나도록 네이밍을 해야 한다.
OCP (Open/Close Principle)
- 개방/폐쇄 원칙 : 소프트웨어의 구성요소 (컴포넌트, 클래스, 모듈, 함수)는 함수의 확장에는 열려있고, 변경에는 닫혀 있어야 한다.
- 요구사항의 변경에도 기존 구성요소를 수정하기보다 확장하여 재사용해야 한다. (추상화와 다형성 이용)
- 변경될 것과 변하지 않는 것을 엄격히 구분하고, 구현에 의존하기보다 정의된 인터페이스에 의존하도록 코드를 작성해야 한다.
- 인터페이스 정의시 변경될 가능성을 최소화하여 정의한다.
LSP (Liskov Substitution Principle)
- 리스코프 치환 원칙 : 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체할 수 있어야 한다는 원칙 (즉, 하위 클래스는 언제나 상위 클래스로 치환할 수 있어야 한다.) - Is-a 관계를 만족해야 한다.
- 일반적으로 선언은 상위 클래스로, 생성은 구체화된 하위 클래스로 대입하는 방법을 사용한다.
- LSP는 OCP를 구성하는 구조가 된다.
ISP (Interface Segregtion Principle)
- 인터페이스 분리 원칙 : 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 말아야 한다. 큰 덩어리의 인터페이스들을 구체적이고 작은 단위로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있도록 해야 한다. (즉, 하나의 일반적인 인터페이스 보다 여러개의 구체적인 인터페이스가 낫다.)
- ISP를 통해 시스템 내부 의존성을 약과시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다.
- SRP : 클래스의 단일 책임을 강조 / ISP : 인터페이스의 단일 책임을 강조
DIP (Dependency Inversion Principle)
- 의존관계 역전의 원칙 : 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다. (즉, 세부사항에 의존해서는 안되고, 추상화에 의존해야 한다)
- 첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
- 이 원칙은 '상위와 하위 객체 모두가 동일한 추상화에 의존해야 한다'는 객체 지향적 설계의 대원칙을 제공한다.
https://bamdule.tistory.com/11#recentEntries
https://velog.io/@hanblueblue/Java-SOLID-SRP-OCP-LSP-ISP-DIP
https://huisam.tistory.com/entry/DIP
'개발자 인터뷰 준비' 카테고리의 다른 글
Twitter 시스템 설계 (0) | 2021.06.13 |
---|---|
JAVA 8 비동기 처리 (@Async) (0) | 2021.06.10 |
AWS SQS vs Kafka vs RabbitMQ (0) | 2021.06.09 |
Spring 버전별 차이 / 개선점 (0) | 2021.06.09 |
JAVA 버전별 개선점 (7, 8, 11) (0) | 2021.06.09 |