티스토리 뷰
1. 단일 책임 원칙
-한 클래스는 하나의 책임만 가져야 한다
-변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다.
2. OCP (Open/CLosed Principle) 개방-폐쇄 원칙 --> 중요!
-소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
-다형성을 활용
-하지만 다형성을 사용한다고해서 OCP 원칙을 지킬 수 있는 것은 아니다. 예를 들어 아래와 같이 MemberRepository 인터페이스의 구현체로 MemorymemberRespository를 JdbcMemberRepository로 확장한다고 했을 때 MemberService 클래스를 변경해야 함.
public class MemberSerivce {
private MemberRepository memberRepository = new MemoryMemberRepository();
}
public class MemberSerivce {
//private MemberRepository memberRepository = new MemoryMemberRepository();
private MemberRepository memberRepository = new JdbcMemberRepository();
}
-이런 문제점을 해결하기 위해 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요한데 그것이 바로 스프링 이다.
3. LSP (Liskov substitution principle) 리스코프 치환 원칙
-프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다
-예를 들면 자동차 인터페이스의 액셀은 앞으로 가는 기능 이기 때문에 만약 뒤로 가는 기능으로 구현하다면 이 원칙을 위반하는 것.
4. ISP (Interface segregation principle) 인터페이스 분리 원칙
-자동차 인터페이스가 있을때,
자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스로 분리하면
사용자 클라이언트 -> 운전자 클라이언트, 정비사 클라이언트로 분리하여
예를 들어 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않음
5. DIP (Dependency inversion principle) 의존관계 역전 원칙 --> 중요!
-구체화에 의존하기 보다 추상화에 의존해야 한다. ex) 의존성 주입
-'역할'에 의존해야 한다.
-클라이언트가 인터페이스에 의존해야 한다.
public class MemberSerivce {
//private MemberRepository memberRepository = new MemoryMemberRepository();
private MemberRepository memberRepository = new JdbcMemberRepository();
}
-위 코드는 DIP 위반(인터페이스에 의존하지만 구현 클래스도 동시에 의존하고 있기 때문)
참고: 김영한-스프링 핵심 기본 원리(인프런)
'Spring' 카테고리의 다른 글
| 롬북(Lombok)의 @RequiredArgsConstructor 기능 (0) | 2023.08.16 |
|---|---|
| 컴포넌트 스캔 (0) | 2023.08.15 |
| @Configuration의 역할과 싱글톤 (0) | 2023.08.14 |
| 싱글톤 패턴과 스프링 컨테이너 (0) | 2023.08.14 |
| 스프링과 스프링부트 (0) | 2023.08.09 |