일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- MSSQL PYTHON
- MSSQL
- oracle
- matplot
- 장고
- rs422
- vscode
- PYTHON MSSQL
- 딥러닝
- rs485
- windows10
- django
- 자본주의
- Serial
- 오라클
- 티스토리 초대장
- M2M
- 윈도우10
- 크롤링
- Python
- 파이썬
- Visual Studio Code
- MX Component
- tensorflow
- scrapy
- MEAN Stack
- pymssql
- 텐서플로우
- c#
- sql developer
Archives
- Today
- Total
안까먹을라고 쓰는 블로그
SOLID 원칙이란? 본문
반응형
아래의 내용은 Perplexity에서 아래의 프롬프트로 문의하여 조회한 내용입니다.
SOLID 원칙이 뭔지 알려줘
SOLID 원칙은 객체 지향 프로그래밍(OOP)에서 소프트웨어 설계를 더 유연하고 유지보수하기 쉽게 만들기 위한 다섯 가지 핵심 원칙을 나타냅니다. 이 원칙들은 로버트 C. 마틴(Uncle Bob)에 의해 소개되었으며, 각각의 약자는 다음을 의미합니다:
1. 단일 책임 원칙 (Single Responsibility Principle, SRP)
- 정의: 클래스는 단 하나의 책임만 가져야 하며, 변경 사유도 하나여야 합니다.
- 목적: 각 클래스가 하나의 역할만 수행하도록 설계하여 코드의 응집도를 높이고, 유지보수를 용이하게 합니다.
- 예시:
class UserManager {
public void CreateUser(string name) { /* 사용자 생성 로직 */ }
}
class Logger {
public void Log(string message) { /* 로그 출력 로직 */ }
}
2. 개방-폐쇄 원칙 (Open/Closed Principle, OCP)
- 정의: 소프트웨어 구성 요소는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 합니다.
- 목적: 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있도록 설계합니다.
- 예시:
interface PaymentMethod {
void Pay(decimal amount);
}
class CreditCardPayment : PaymentMethod {
public void Pay(decimal amount) { /* 신용카드 결제 로직 */ }
}
class PayPalPayment : PaymentMethod {
public void Pay(decimal amount) { /* PayPal 결제 로직 */ }
}
3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
- 정의: 하위 클래스는 상위 클래스의 기능을 대체할 수 있어야 하며, 프로그램의 동작에 영향을 주지 않아야 합니다.
- 목적: 상속 관계에서 일관성을 유지하고, 다형성을 올바르게 활용합니다.
- 예시:
class Bird {
public virtual void Fly() { /* 새가 날다 */ }
}
class Sparrow : Bird { /* 참새도 날 수 있음 */ }
class Penguin : Bird {
public override void Fly() { throw new NotSupportedException(); } // LSP 위반
}
4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
- 정의: 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 합니다.
- 목적: 인터페이스를 작고 구체적으로 나눠 불필요한 의존성을 줄입니다.
- 예시:
interface IPrinter {
void Print();
}
interface IScanner {
void Scan();
}
class MultiFunctionPrinter : IPrinter, IScanner {
public void Print() { /* 출력 로직 */ }
public void Scan() { /* 스캔 로직 */ }
}
class SimplePrinter : IPrinter {
public void Print() { /* 출력 로직 */ }
}
5. 의존 역전 원칙 (Dependency Inversion Principle, DIP)
- 정의: 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 합니다.
- 목적: 구체적인 구현이 아닌 추상화에 의존하도록 설계하여 유연성을 높입니다.
- 예시:
interface IMessageSender {
void SendMessage(string message);
}
class EmailSender : IMessageSender {
public void SendMessage(string message) { /* 이메일 전송 로직 */ }
}
class NotificationService {
private readonly IMessageSender _messageSender;
public NotificationService(IMessageSender messageSender) {
_messageSender = messageSender;
}
public void Notify(string message) {
_messageSender.SendMessage(message);
}
}
// 사용
var emailSender = new EmailSender();
var notificationService = new NotificationService(emailSender);
SOLID 원칙의 장점
- 코드 재사용성 증가
- 유지보수 비용 감소
- 확장성과 유연성 향상
- 결합도 감소 및 응집도 증가
SOLID 원칙을 잘 이해하고 적용하면 더 나은 소프트웨어 설계를 실현할 수 있습니다.
끝~

반응형
'Language' 카테고리의 다른 글
[C#] 디자인 패턴 (0) | 2025.03.24 |
---|---|
개발 프리 준비 (0) | 2022.03.13 |
개발 프리 관련 (0) | 2022.03.11 |
[Tip] 프로그램 소스코드를 공개하는 사이트 모음집 (0) | 2022.03.07 |
FLEXGRID 참고자료 (0) | 2022.03.02 |
Comments