Notice
Recent Posts
Recent Comments
Link
yeon's blog
[Spring] 스프링 컨테이너 본문
SRP: 단일 책임 원칙(single responsibility principle)
하나의 클래스는 하나의 책임만 가져야 한다는 원칙.
💡 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것!
OCP: 개방-폐쇄 원칙 (Open/closed principle)
확장에는 열려있으나 변경에는 닫혀 있어야 한다는 원칙.
소스코드 변경은 없고 다형성을 이용하여 객체 생성 코드만 늘어나게 한다.
💡 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다 → Config
LSP: 리스코프 치환 원칙 (Liskov substitution principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다는 원칙
💡 LSP를 이해하기 위해서는 예시를 기억하는 것이 편함
Animal 클래스를 상속하는 Eagle 자식 클래스가 부모 클래스의 `go()` 메소드 타입을 바꾸고 매개변수의 갯수도 바꾸었다.
부모 클래스의 행동 규약을 어겼으므로 LSP에 위반되는 것이다.
class Animal {
int speed = 100;
int go(int distance) {
return speed * distance;
}
}
class Eagle extends Animal {
String go(int distance, boolean flying) {
if (flying)
return distance + "만큼 날아서 갔습니다.";
else
return distance + "만큼 걸어서 갔습니다.";
}
}
public class Main {
public static void main(String[] args) {
Animal eagle = new Eagle();
eagle.go(10, true);
}
}
ISP: 인터페이스 분리 원칙 (Interface segregation principle)
클라이언트는 자신이 사용하지 않는 메소드에 의존관계를 맺으면 안된다는 원칙
- 자동차 인터페이스 => 운전 인터페이스, 정비 인터페이스로 분리
- 사용자 클라이언트 => 운전자 클라이언트, 정비사 클라이언트로 분리
위와 같이 분리하면 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않는다.
따라서 인터페이스가 명확해지고, 대체 가능성이 높아진다.
DIP: 의존관계 역전 원칙 (Dependency inversion principle)
추상화에 의존해야지, 구체화에 의존하면 안된다는 원칙 (=> 인터페이스에 의존하라는 뜻)
💡 구현체에 의존하게 되면 변경이 아주 어려워진다.
ex) MemberRepository m = new MemoryMemberRepository(); ⇒ DIP 위반
: 빨간 강조가 구현 클래스에 의존 하고 있는 부분)
References
'Spring > Spring 개념' 카테고리의 다른 글
[Spring] Spring Security 처리 과정 (0) | 2023.12.12 |
---|---|
[Spring] Spring Security 개념 (0) | 2023.12.12 |
[Spring] 프로그램 구조 설계 (0) | 2023.12.12 |
[Spring] Annotation? (0) | 2023.11.30 |
[Spring] Spring? Spring Boot? (2) | 2023.11.30 |