SPRING
Spring SOLID원칙
도원좀비
2025. 3. 25. 19:03
✅ SOLID 원칙이란?
SOLID 원칙은 유지보수성, 확장성, 유연성을 갖춘 소프트웨어를 만들기 위한 5가지 설계 원칙
원칙이름설명
| 원칙 | 이름 | 설명 |
| SRP | 단일 책임 원칙 | 하나의 클래스는 하나의 책임만 가져야 한다 |
| OCP | 개방-폐쇄 원칙 | 확장에는 열려 있고, 변경에는 닫혀 있어야 한다 |
| LSP | 리스코프 치환 원칙 | 부모 타입은 자식 타입으로 대체 가능해야 한다 |
| ISP | 인터페이스 분리 원칙 | 하나의 범용 인터페이스보단, 여러 개의 작은 인터페이스가 낫다 |
| DIP | 의존관계 역전 원칙 | 구체적인 구현보다 추상화에 의존해야 한다 |
1️⃣ SRP - 단일 책임 원칙
하나의 클래스는 오직 하나의 책임만 가져야 한다.
더보기
🚫 위반 예시
public class User {
public void login() { /* 로그인 */ }
public void saveUser() { /* DB 저장 */ }
}
✅ 적용 예시
public class User { /* 사용자 정보 */ }
public class AuthService {
public void login(User user) { ... }
}
public class UserRepository {
public void saveUser(User user) { ... }
}
2️⃣ OCP - 개방/폐쇄 원칙
소프트웨어 요소는 확장에 열려 있고, 변경에는 닫혀 있어야 한다
더보기
🚫 위반 예시
public double calculate(Shape shape) {
if (shape.type.equals("circle")) ...
}
✅ 적용 예시
public interface Shape {
double calculateArea();
}
public class Circle implements Shape {
public double calculateArea() { ... }
}
3️⃣ LSP - 리스코프 치환 원칙
더보기
🚫 위반 예시
class ElectricCar extends Car {
@Override
public void accelerate() {
throw new UnsupportedOperationException();
}
}
✅ 적용 예시
interface Acceleratable { void accelerate(); }
class Car implements Acceleratable { ... }
class ElectricCar implements Acceleratable { ... }
4️⃣ ISP - 인터페이스 분리 원칙
불필요한 메서드에 의존하지 않도록, 인터페이스를 작게 분리해야 한다.
더보기
🚫 위반 예시
interface Animal {
void fly(); void run(); void swim();
}
✅ 적용 예시
interface Runnable { void run(); }
interface Swimmable { void swim(); }
class Dog implements Runnable, Swimmable { ... }
5. DIP - 의존관계 역전 원칙
더보기
🚫 위반 예시
class NotificationService {
private EmailNotifier emailNotifier = new EmailNotifier();
}
✅ 적용 예시
interface Notifier { void send(String msg); }
class EmailNotifier implements Notifier { ... }
class SMSNotifier implements Notifier { ... }
class NotificationService {
private final Notifier notifier;
public NotificationService(Notifier notifier) {
this.notifier = notifier;
}
}