Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- Algorithm
- 윤성우의 열혈 자료구조
- C 언어 코딩 도장
- buffer
- s
- 이스케이프 문자
- 윤성우 열혈자료구조
- Graph
- 이것이 자바다
- datastructure
- 메모리구조
- Selection Sorting
- C programming
- list 컬렉션
- coding test
- insertion sort
- JSON
- stream
- 혼자 공부하는 C언어
- Stack
- Serialization
- R
- 알기쉬운 알고리즘
Archives
- Today
- Total
Engineering Note
[OOP] OCP(개방 폐쇄 원칙) 본문
OCP(Open Closed Principle)
: 개방-폐쇄 원칙은 소프트웨어 구성요소(클래스, 모듈, 상수 등)는 확장에는 개방적이어야 하고, 수정에는 폐쇄적이어야 한다는 원칙입니다. 즉, 기존의 코드를 변경하지 않고도 시스템의 기능을 확장할 수 있어야 합니다.
OCP를 적용하면, 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있습니다. 이는 유지보수성과 재사용성을 향상시키는데 도움이 됩니다.
구현 방법
: OCP를 적용하기 위해선 다형성을 활용하는 것이 일반적입니다. 인터페이스나 추상 클래스를 사용하여 확장 가능한 부분을 정의하고, 구체적인 구현은 별도의 클래스에서 제공하는 방식입니다.
public interface PaymentMethod{
void pay(amount);
}
public class CreditCart implements PaymentsMethod{
@Override
public void pay(amount){
//신용카드 결제 로직 구현
}
}
public class PayPal implements PaymentMethod {
@Override
public void pay(amount){
//PayPal 결제 로직 구현
}
}
// 카카오페이 결제 (나중에 추가!)
public class KakaoPay implements PaymentMethod {
@Override
public void pay(int amount) {
System.out.println("카카오페이로 " + amount + "원 결제");
}
}
위 코드는 결제 방식을 인터페이스로 정의하고, 각 결제 방식을 구현한 클래스를 별도로 제공하는 방식으로 OCP 원칙을 적용한 예시입니다. 이런 방식으로 구현하면 새로운 결제 방식이 추가되더라도 기존 코드의 변경 없이 결제 방식 클래스를 추가하기만 하면 됩니다.
public class PaymentService {
// 이 메서드는 수정하지 않고 결제 기능을 확장할 수 있음
public void processPayment(PaymentMethod method, int amount) {
System.out.println("=== 결제 시작 ===");
method.pay(amount); // 어떤 결제든 동일하게 처리!
System.out.println("=== 결제 완료 ===\n");
}
}
public class Main {
public static void main(String[] args) {
PaymentService service = new PaymentService();
// 1. 신용카드로 결제
PaymentMethod creditCard = new CreditCard();
service.processPayment(creditCard, 10000);
// 2. PayPal로 결제
PaymentMethod paypal = new PayPal();
service.processPayment(paypal, 20000);
// 3. 카카오페이로 결제 (새로 추가!)
PaymentMethod kakaoPay = new KakaoPay();
service.processPayment(kakaoPay, 30000);
}
}'Computer Science > OOP & Design Pattern' 카테고리의 다른 글
| [OOP] DIP(의존성 역전 원칙) (0) | 2025.10.17 |
|---|---|
| [Design Pattern] Strategy Pattern(전략 패턴) (1) | 2025.07.14 |
| [OOP] OCP (Open-Closed Principle) 개념 정리 (0) | 2025.07.07 |
| [OOP] 역할, 책임, 협력 그리고 캡슐화, 상속, 추상화 (0) | 2025.06.19 |
| Object Oriented Programming(객체 지향 프로그래밍) (0) | 2022.07.09 |
Comments