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 | 31 |
Tags
- ajax
- pseudo-code
- SQL
- 2차원배열 구간합
- 마리아DB 쿼리 로그
- Bean LifecCycle
- 합배열
- interrupted()
- 구간합구하기
- 백준 11659번
- this와 this() 차이
- MariaDB Query Log
- this
- 백준 1235번
- 백준
- 상속과 참조
- json
- map()
- @AllArgsConstructor
- function test
- 자바 람다식
- Java
- @NoArgsConstructor
- select
- 백준 11660번
- 생성자
- 구간합
- jquery
- InterruptException
- 슈더코드
Archives
- Today
- Total
평범한 연구소
[Spring] SOLID 원칙 본문
SOLID 란 ?
객체지향 프로그래밍 설계의 대표적인 5가지 원칙이다.
아래 5가지 원칙의 앞글자를 따서 만든 용어이다.
- SRP
- OCP
- LSP
- ISP
- DIP
SOLID 의 장점은 ?
객체 지향 프로그래밍의 특성과 장점을 극대화 시킬 수 있다 !
1) SRP(Single Responsibility Principle, 단일 책임 원칙)
- 하나의 객체는 하나의 책임만 가져아한다는 원칙이다.
- 여기서 책임이란, 클래스가 담당하는 동작을 의미한다.
- 모듈화가 강해질수록 다른 객체와의 의존성이 줄어든다.
- 결합도↓ 응집도 ↑
- 효율적인 유지보수가 가능.
2) OCP (Open Closed Principle, 개방 폐쇄 원칙)
- 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야한다는 원칙이다.
- 새로운 기능이 추가될 때, 기존 코드에는 수정이 일어나지 않아야한다.
- 변경이 예상되는 부분을 추상화하고 다형성을 이용한다면?
- 기존 코드를 수정하지 않아도 된다.
- 기존 코드를 수정하지 않고도 기능을 확장할 수 있도록 함으로써 유연함이 높아진다.
3) LSP (Liskov Subsitution Principle, 리스코프 치환 원칙)
- 상속 관계를 가진 두 객체가 있다. 부모 객체의 인스턴스 위치에 자식 객체의 인스턴트를 대신 사용했을 때 코드가 원래 의도대로 동작해야한다. 즉, 자식 객체는 부모 객체를 완전히 대체할 수 있어야한다는 원칙이다.
- 이 원칙은 협업하는 개발자 사이의 신뢰를 위한 것이다.
- 주의할 점은 오버라이딩 시 파라미터와 리턴값의 타입과 갯수가 일치해야한다.
- 컬렉션은 LSP를 잘 적용한 예제!
4) ISP (Interface Segregation Principle, 인터페이스 분리 원칙)
- 객체는 자신이 호출하지 않는 메소드에 의존하지 않아야한다는 원칙이다.
- 인터페이스를 작은 단위로 분리시켜서 클라이언트가 꼭 필요한 메소드만 이용 가능하도록 해야한다.
- 하나의 통상적인 인터페이스보단 여러 개의 세부적인 인터페이스들이 낫다.
5) DIP (Dependancy Inversion Principle, 의존성 역전 원칙)
- 객체는 구현된 객체(저수준 모듈)보다 추상적인 것(고수준 모듈)에 의존해야 한다는 원칙이다.
- 추상클래스, 인터페이스
- 상위 레벨의 모듈은 하위 레벨 모듈에 의존하지 않아야한다.
- 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야한다.
- 객체에 의존하게 되면, 메소드들도 의존성을 가진다. 새로운 기능이 추가되면 기존 코드에 수정이 일어나므로 개방폐쇄원칙을 위배한다.
추상화?
- 공통되는 속성이나 기능을 묶어 내는 것. 함수 선언은 하되 구현부는 작성하지 않는다.
- 코드의 재사용성, 가독성이 향상된다.
- 함수를 작게 만들 수 있다. → 단일 책임 원칙과 연관된다.
- 확장에는 열려있고 수정에는 닫혀있는 개방 폐쇄 원칙을 준수할 수 있다.
- 자식 클래스에서 반드시 재정의 해야하므로 다형성을 갖는다.
'Spring Framework' 카테고리의 다른 글
private final vs @Autowired (생성자 주입 방식을 권장하는 이유) (0) | 2024.09.03 |
---|---|
[Spring] getOutputStream() 와 getWriter() 를 둘 다 쓴다면? (java.lang.IllegalStateException: getOutputStream() has already been called for this response) (0) | 2023.01.07 |
[Spring] 카카오페이 API 연동 (0) | 2023.01.05 |
[Spring] AJAX VO Controller to JSP (AJAX VO객체를 Controller에서 JSP로 보내기) (0) | 2023.01.02 |
[Spring] 스프링 시큐리티 세션, 권한 활용하기 (0) | 2022.12.23 |