'컴퓨터 과학' 카테고리의 글 목록
ProgramminGucci
컴퓨터 과학/객체지향 & 디자인 패턴
💻 [디자인 패턴] Spring DI + 전략 패턴으로 정책 선택 구조 깔끔하게 개선하기
2025.07.03
🎯 개요: 전략은 깔끔한데 선택은 여전히 if/switch?이전 글에서는 다양한 할인 정책을 전략 패턴으로 분리하여동작은 같고 로직만 다른 구조를 깔끔하게 처리했습니다.하지만...실행 시점에 어떤 전략을 선택할지 여전히 if, switch, 혹은 new 클래스()로 처리하고 계신가요? 이번 글에서는 Spring DI의 자동 주입 기능과 Enum + Map 조합을 활용해정책 선택 구조를 더욱 깔끔하게 개선해보았습니다.1️⃣ 주요 기능 요약✔ 전략 구현체를 Spring이 자동으로 등록 (@Component)✔ 실행 시점에 정책 이름(Enum)으로 전략을 조회 (Map)✔ 조건문 없이 전략을 선택하고 적용 가능✔ 새로운 정책 추가 시 OCP 원칙을 지키며 확장 가능2️⃣ 기술 스택항목내용언어Java 17프레..
컴퓨터 과학/객체지향 & 디자인 패턴
💻 [디자인 패턴] 전략 패턴으로 할인 정책을 깔끔하게 분리해보자
2025.07.03
🎯 개요: 할인 정책이 늘어나는데 if/switch만 쓰고 계신가요?전자상거래 서비스에서는 아래와 같이 다양한 할인 정책이 존재할 수 있습니다.VIP 회원은 20% 할인쿠폰 보유자는 정액 1000원 할인일반 회원은 할인 없음이걸 if/switch 문으로 처리하면?if (member.getGrade() == VIP) { ... } else if (...) { ... } 🚨 정책이 추가될수록 코드가 지저분해지고 유지보수가 어려워집니다.이럴 때 사용하는 것이 바로 전략 패턴(Strategy Pattern)입니다.실행 시점에 어떤 전략을 쓸지 유연하게 선택할 수 있게 해주는 패턴입니다.1️⃣ 주요 기능 요약✔ 다양한 할인 전략을 하나의 인터페이스로 추상화✔ 조건문 없이 실행 시점에 전략을 선택✔ 새로운 할인..
컴퓨터 과학/객체지향 & 디자인 패턴
💻 [디자인 패턴] 옵저버 패턴으로 충분한데 굳이 Kafka나 Redis Pub/Sub을 왜 써야 하나요?
2025.07.02
❓ 질문: 옵저버 패턴으로 충분한데 굳이 Kafka나 Redis Pub/Sub을 왜 써야 하나요?👉 하나의 애플리케이션 안에서는 옵저버 패턴이면 충분하지만,서버가 나눠지거나 비동기, 확장성, 장애 복구가 필요해지면 Kafka나 Redis Pub/Sub 같은 메시징 시스템이 필요합니다.아래에서 그 이유를 예제와 함께 차근히 설명드리겠습니다.🎯 개요: 알림 기능, 옵저버 패턴이면 충분하지 않을까?서비스 내에서 어떤 이벤트가 발생했을 때자동으로 메일, 포인트, 슬랙 알림 등을 전송하고 싶은 경우가 있습니다.예를 들어, 게시글이 등록되면 아래처럼 후속 작업이 이루어져야 합니다.이메일 알림 전송포인트 적립슬랙 메시지 발송이런 흐름을 if 문으로 분기하지 않고 유연하게 처리하기 위해옵저버 패턴(Observer ..
컴퓨터 과학/객체지향 & 디자인 패턴
💻 [디자인 패턴] 결제 로직에 팩토리 패턴을 적용해보기
2025.07.02
🎯 개요: 조건문 없이 결제 수단을 선택할 수 없을까?사용자가 상품을 결제할 때KakaoPay로 결제할 수도 있고카드로 결제할 수도 있으며향후에는 네이버페이, 애플페이 등 새로운 수단이 추가될 수 있습니다.보통 이런 구조는 아래처럼 if나 switch 문으로 처리되곤 합니다:if (type.equals("kakao")) { kakaoPayService.pay();} else if (type.equals("card")) { cardService.pay();}하지만 서비스가 커지고, 결제 수단이 많아지면 조건문도 복잡해지고,테스트나 확장도 어려워집니다.그래서 이번 글에서는 팩토리 패턴을 활용하여결제 방식에 따라 객체를 분리하고 동적으로 선택하는 구조를 적용해보았습니다.1️⃣ 주요 기능 요약✔ 결..
컴퓨터 과학/객체지향 & 디자인 패턴
💻 [디자인 패턴] 싱글톤 패턴, 그리고 왜 스프링은 자동으로 싱글톤을 만들어줄까?
2025.07.02
🎯 개요: 스프링을 사용하는데 굳이 싱글톤을 알아야 하나요?Spring 기반으로 프로젝트를 할 때 @Component, @Service, @Repository 같은 어노테이션을 흔히 사용합니다.개발자는 단지 클래스에 어노테이션만 붙였을 뿐인데, 객체가 알아서 생성되고, 필요한 의존성도 주입되고,서비스가 돌아갑니다. 여기서 문득 의문이 들었습니다."이거 다 new 안 했는데… 객체는 누가 만들고, 어떻게 공유되는 거지?""UserService랑 AuthService에서 같은 UserRepository를 쓴다면, 걔네는 같은 객체일까?"이 질문은 싱글톤(Singleton) 패턴과 DI(의존성 주입), 그리고 Spring의 기본 철학을 이해해야 풀 수 있습니다.그래서 싱글톤 패턴의 개념 → 자바 코드 구현 ..