Single Responsibility Principle(SRP)
이 원칙은 각 클래스가 단일 책임을 가져야 한다고 명시합니다. 클래스는 하나의 특정 기능을 수행해야 하며 변경할 이유가 너무 많지 않아야 함을 강조합니다.
예: 사용자 정보 관리 및 이메일 알림 전송.
class UserManager {
public void CreateUser(UserData userData) {
// Logic to create a user
}
}
class EmailService {
public void SendEmail(EmailData emailData) {
// Logic to send an email
}
}
Open/Closed Principle(OCP)
이 원칙은 기존 코드를 수정하는 대신 새 코드를 추가하여 기능을 확장하도록 권장합니다.
예: 전자 상거래 애플리케이션에서 다양한 지불 방법 처리.
abstract class PaymentProcessor {
public abstract void ProcessPayment();
}
class CreditCardPaymentProcessor: PaymentProcessor {
public override void ProcessPayment() {
// Logic to process credit card payment
}
}
class PayPalPaymentProcessor: PaymentProcessor {
public override void ProcessPayment() {
// Logic to process PayPal payment
}
}
Liskov Substitution Principle(LSP)
이 원칙은 프로그램의 정확성에 영향을 주지 않으면서 파생 클래스의 개체를 기본 클래스의 개체로 대체할 수 있어야 한다고 주장합니다.
예: 기하학적 모양 관리.
abstract class Shape {
public abstract double CalculateArea();
}
class Rectangle: Shape {
public override double CalculateArea() {
// Logic to calculate area of rectangle
}
}
class Square: Shape {
public override double CalculateArea() {
// Logic to calculate area of square
}
}
Interface Segregation Principle(ISP)
이 원칙은 클래스가 필요하지 않은 메서드를 강제로 구현하지 않도록 인터페이스를 더 작은 것으로 나누는 것을 권장합니다.
예: 데이터 업데이트 및 표시를 위한 인터페이스.
interface IUpdateableFeature {
void UpdateFeature();
}
interface IDisplayableFeature {
void DisplayFeature();
}
Dependency Inversion Principle(DIP)
이 원칙은 종속성을 관리하기 위해 종속성 주입을 사용하는 것을 제안합니다.
예: 종속성 주입을 사용하여 종속성을 관리합니다.
class OrderProcessor {
private readonly DBConnection _dbConnection;
private readonly EmailService _emailService;
public OrderProcessor(DBConnection dbConnection, EmailService emailService) {
_dbConnection = dbConnection;
_emailService = emailService;
}
}
C#에서 원칙을 적용하는 것은 SOLID 프로젝트의 특정 목적과 SOLID C#에 대한 이해를 기반으로 유연하게 수행되어야 합니다.