Single Responsibility Principle(SRP)
이 원칙은 클래스를 변경할 이유가 하나만 있어야 한다는 것입니다. 즉, 각 클래스는 특정 기능을 수행해야 합니다.
예: 사용자 데이터 관리 및 email 알림 전송.
class UserManager {
constructor() {}
createUser(userData) {
// Logic for creating a user
}
}
class EmailService {
constructor() {}
sendEmail(emailData) {
// Logic for sending an email
}
}
Open/Closed Principle(OCP)
이 원칙은 기존 코드를 수정하는 대신 새 코드를 추가하여 기능을 확장하도록 권장합니다.
예: 전자 상거래 애플리케이션에서 다양한 지불 방법 처리.
class PaymentProcessor {
processPayment() {
// Common logic for payment processing
}
}
class CreditCardPaymentProcessor extends PaymentProcessor {
processPayment() {
// Logic for processing credit card payment
}
}
class PayPalPaymentProcessor extends PaymentProcessor {
processPayment() {
// Logic for processing PayPal payment
}
}
Liskov Substitution Principle(LSP)
이 원칙은 프로그램의 정확성에 영향을 주지 않으면서 파생 클래스의 개체를 기본 클래스의 개체로 대체할 수 있어야 한다고 주장합니다.
예: 기하학적 모양 관리.
class Shape {
area() {}
}
class Rectangle extends Shape {
constructor(width, height) {}
area() {
return this.width * this.height;
}
}
class Square extends Shape {
constructor(side) {}
area() {
return this.side * this.side;
}
}
ISP(인터페이스 분리 원칙)
이 원칙은 클래스가 필요하지 않은 메서드를 강제로 구현하지 않도록 인터페이스를 더 작은 것으로 나누는 것을 권장합니다.
예: 데이터 업데이트 및 표시를 위한 인터페이스.
class UpdateableFeature {
updateFeature() {}
}
class DisplayableFeature {
displayFeature() {}
}
Dependency Inversion Principle(DIP)
이 원칙은 상위 수준 모듈이 하위 수준 모듈에 의존해서는 안 된다는 것을 의미합니다. 둘 다 추상화에 의존해야 합니다.
예: dependency injection 종속성을 관리하는 데 사용합니다.
class OrderProcessor {
constructor(dbConnection, emailService) {
this.dbConnection = dbConnection;
this.emailService = emailService;
}
}
SOLID 이러한 예는 에 있는 원칙을 적용하는 방법을 보여 주는 예일 뿐임을 기억하십시오 Node.js. 실제로는 프로젝트의 목적과 규모에 따라 유연하게 적용해야 합니다.