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 |
Tags
- Vue 알아보기
- spring boot 시작
- 민생회복지원금
- docker
- 디버깅
- intelliJ plugin
- JetBrains
- 개발생산성
- 주식용어
- Vue 배우기
- java
- Vue 강의
- docker mysql
- python
- 자동포맷팅
- GPT
- gradle
- 지원금신청방법
- scrapy
- MYSQL
- python 기초
- AES256
- Ai
- Spring Batch 강의
- Spring
- 자바패턴
- Python 기본편
- 개발툴팁
- IntelliJ
- intellij완전정복
Archives
나만의공간
💡 Java 디자인 패턴 시리즈: 팩토리 패턴 (Factory Pattern) 실무 예제로 배우기 본문
객체를 만들 때마다 new를 남발하고 있다면? 유지보수와 확장성에 골치 아픈 코드를 만나기 전에 꼭 알아야 할 디자인 패턴, 바로 **팩토리 패턴(Factory Pattern)**입니다.
🏭 1. 팩토리 패턴이란?
팩토리 패턴은 객체 생성을 팩토리(공장) 역할을 하는 클래스에 맡기는 구조입니다.
즉, 직접 new 키워드를 사용하지 않고, 특정 조건에 따라 객체를 유연하게 생성할 수 있도록 도와줍니다.
✅ 목적
- 객체 생성 로직을 캡슐화해서 코드의 복잡도를 낮춤
- 같은 인터페이스를 구현한 다양한 객체를 상황에 따라 선택 생성
- 객체 생성을 중앙 집중화하여 유지보수와 테스트에 유리
❓ 2. 왜 팩토리 패턴을 써야 할까요?
예를 들어, 이런 고민 해본 적 있으신가요?
- "조건에 따라 서로 다른 클래스를 만들어야 하는데 코드가 너무 복잡해져요."
- "new 키워드를 여기저기 써서 나중에 변경이 너무 어려워요."
- "어떤 클래스를 생성할지 유동적인데, 매번 if문으로 분기하는 게 너무 지저분해요."
바로 이런 문제를 팩토리 패턴 하나로 깔끔하게 해결할 수 있습니다.
📦 3. 실무 예시: 배송 방식 선택
온라인 쇼핑몰에서 상품 배송 방식은 다양하죠?
예를 들어 다음과 같은 방식이 있다고 가정해볼게요:
- Courier (택배)
- Post (우편)
- Pickup (매장 픽업)
고객이 주문할 때 어떤 배송 방식을 선택하느냐에 따라, 서로 다른 배송 서비스 클래스를 생성해야 합니다.
이때 팩토리 패턴을 사용하면, 간결하고 확장성 있는 구조를 만들 수 있습니다.
🔨 4. 실전 코드 예제
📁 인터페이스: DeliveryService
public interface DeliveryService {
void deliver(String orderId);
}
📁 구현 클래스들: 다양한 배송 방식
public class CourierDelivery implements DeliveryService {
public void deliver(String orderId) {
System.out.println("택배로 배송: " + orderId);
}
}
public class PostDelivery implements DeliveryService {
public void deliver(String orderId) {
System.out.println("우편으로 배송: " + orderId);
}
}
public class PickupDelivery implements DeliveryService {
public void deliver(String orderId) {
System.out.println("고객이 매장에서 직접 픽업: " + orderId);
}
}
📁 팩토리 클래스: DeliveryFactory
public class DeliveryFactory {
public static DeliveryService getDeliveryService(String type) {
switch (type.toLowerCase()) {
case "courier":
return new CourierDelivery();
case "post":
return new PostDelivery();
case "pickup":
return new PickupDelivery();
default:
throw new IllegalArgumentException("Unknown delivery type: " + type);
}
}
}
📁 클라이언트 코드: OrderProcessor
public class OrderProcessor {
public static void main(String[] args) {
String deliveryType = "courier"; // 이 값은 예를 들어 DB나 사용자 입력으로부터 올 수 있음
DeliveryService service = DeliveryFactory.getDeliveryService(deliveryType);
service.deliver("ORDER1234");
}
}
✅ 실행 결과
택배로 배송: ORDER1234
🔁 5. 팩토리 패턴의 장점 요약
장점설명
유지보수성 | 객체 생성 방식이 바뀌어도 클라이언트 코드는 영향 받지 않음 |
확장성 | 새로운 배송 방식 추가 시 팩토리만 수정하면 됨 |
캡슐화 | 객체 생성 로직을 숨겨 코드 가독성 향상 |
✨ 마무리
팩토리 패턴은 단순하지만 강력한 설계 패턴입니다.
특히 실무에서 객체 생성이 조건에 따라 달라지는 경우, 코드 품질을 높이고 변화에 유연하게 대응할 수 있는 훌륭한 도구가 되어줍니다.
'IT > JAVA' 카테고리의 다른 글
🧱 자바 디자인 패턴 - 빌더 패턴 완전 정복 (0) | 2025.05.30 |
---|---|
🧱 추상 팩토리 패턴(Abstract Factory Pattern) – 제품군을 세트로 만들고 싶을 때! (0) | 2025.05.30 |
Java Stream 다양한 생성방법 (0) | 2024.03.08 |
Java Stream Operation 기능 #1 (0) | 2024.03.06 |
Java Stream 소개 #1 (0) | 2024.02.27 |
Comments