λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
λ””μžμΈ νŒ¨ν„΄

[λ””μžμΈ νŒ¨ν„΄] νΌμ‚¬λ“œ νŒ¨ν„΄

by young-ji 2023. 2. 18.

νΌμ‚¬λ“œ νŒ¨ν„΄ (Facade Pattern)

 

https://refactoring.guru/ko/design-patterns/facade

 

 

νΌμ‚¬λ“œ νŒ¨ν„΄μ€ λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ, ν”„λ ˆμž„μ›Œν¬μ— λŒ€ν•œ λ˜λŠ” λ‹€λ₯Έ ν΄λž˜μŠ€λ“€μ˜ λ³΅μž‘ν•œ 집합에 λŒ€ν•œ λ‹¨μˆœν™”λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” ꡬ쑰적 λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€.

 

FacadeλŠ” "건물의 μ •λ©΄"을 μ˜λ―Έν•˜λŠ” λ‹¨μ–΄λ‘œ μ–΄λ–€ μ†Œν”„νŠΈμ›¨μ–΄μ˜ λ‹€λ₯Έ μ»€λ‹€λž€ μ½”λ“œ 뢀뢄에 λŒ€ν•˜μ—¬ κ°„λž΅ν™”λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•΄μ£ΌλŠ” λ””μžμΈ νŒ¨ν„΄μ„ ν•œλ‹€. νΌμ‚¬λ“œ κ°μ²΄λŠ” λ³΅μž‘ν•œ μ†Œν”„νŠΈμ›¨μ–΄ λ°”κΉ₯μͺ½μ˜ μ½”λ“œκ°€ 라이브러리의 μ•ˆμͺ½ μ½”λ“œμ— μ˜μ‘΄ν•˜λŠ” 일을 κ°μ†Œμ‹œμΌœ μ£Όκ³ , λ³΅μž‘ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‚¬μš© ν•  수 있게 κ°„λ‹¨ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•΄μ€€λ‹€.

 

 

https://velog.io/@newtownboy/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-%ED%8D%BC%EC%82%AC%EB%93%9C%ED%8C%A8%ED%84%B4Pacade-Pattern

 

μž₯점

: λ³΅μž‘ν•œ ν•˜μœ„ μ‹œμŠ€ν…œμ—μ„œ μ½”λ“œλ₯Ό λ³„λ„λ‘œ λΆ„λ¦¬ν•˜μ—¬ νŠΉμ • κΈ°λŠ₯을 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

: ν•˜λ‚˜μ˜ νΌμ‚¬λ“œλ₯Ό κ΄€λ ¨ μ—†λŠ” κΈ°λŠ₯λ“€λ‘œ μ˜€μ—Όλ˜λŠ” 것을 방지할 수 μžˆμ–΄ ν•΄λ‹Ή μ‹œμŠ€ν…œμ— λŒ€ν•œ 응집도가 λ†’λ‹€. (μΊ‘μŠν™”)

 

단점

: ν•˜μœ„ μ‹œμŠ€ν…œκ³Ό 직접 μž‘μ—…ν•˜λŠ” 것과 λΉ„κ΅ν•˜λ©΄ νΌμ‚¬λ“œλŠ” μ œν•œλœ κΈ°λŠ₯성을 μ œκ³΅ν•œλ‹€.

 

 

β†’ λ³΅μž‘ν•œ ν•˜μœ„ μ‹œμŠ€ν…œμ— λŒ€ν•œ μ œν•œμ μ΄μ§€λ§Œ κ°„λ‹¨ν•œ μΈν„°νŽ˜μ΄μŠ€κ°€ ν•„μš”ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

β†’ ν•˜μœ„ μ‹œμŠ€ν…œμ„ κ³„μΈ΅λ“€λ‘œ κ΅¬μ„±ν•˜λ €λŠ” 경우 μ‚¬μš©ν•œλ‹€.

 

 

 

ν”„λ‘œμ νŠΈμ— μ μš©ν•˜κΈ°

service 객체가 μ—¬λŸ¬ domain의 repositoryλ₯Ό μ˜μ‘΄ν•΄μ•Όν•˜λŠ” κ²½μš°λ“€μ΄ μžˆλ‹€. μ΄λ•Œ λ„ˆλ¬΄ λ§Žμ€ μ˜μ‘΄μ„ κ°€μ Έκ°„λ‹€λ©΄ ν•΄λ‹Ή λ„λ©”μΈμ˜ service κ°μ²΄λŠ” 응집성이 λ–¨μ–΄μ§ˆ 뿐 μ•„λ‹ˆλΌ μŠ€ν”„λ§ 빈의 μˆœν™˜ μ°Έμ‘° μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆλ‹€.

μ΄λ•Œ νΌμ‚¬λ“œ νŒ¨ν„΄μ„ μ μš©ν•˜μ—¬, 각각의 도메인 serviceλŠ” ν•΄λ‹Ή 도메인 repository에 λŒ€ν•œ μ˜μ‘΄μ„± ν•˜λ‚˜λ§Œ κ°–κ³  κ·ΈλŸ¬ν•œ service듀을 μ‘°ν•©ν•΄μ£ΌλŠ” νΌμ‚¬λ“œ λ ˆμ΄μ–΄λ₯Ό 생성할 수 μžˆλ‹€. 이 경우 λ ˆμ΄μ–΄λŠ” κΉŠμ–΄μ§€κ² μ§€λ§Œ ν•΄λ‹Ή κΈ°λŠ₯에 λŒ€ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ„ κΉ”λ”ν•˜κ²Œ 진행할 수 μžˆμ„ 것이닀.

 

 

@Service
@RequiredArgsConstructor
public class OrderFacadeService {

	private final OrderService orderService;

	private final StoreService storeService;

	private final UserService userService;

	private final ItemService itemService;

	private final OrderMapper orderMapper;

	private final PaymentService paymentService;
    
    
    .. // μƒλž΅
}

μ£Όλ¬Έ λ‘œμ§μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” λ§Žμ€ 도메인듀..  OrderFacadeServiceλ₯Ό κ΅¬μ„±ν•œ 덕뢄에 OrderService의 응집도λ₯Ό 높이고 μˆœν™˜ 참자λ₯Ό ν•΄κ²°ν•˜μ˜€λ‹€. 

 

 

 

 

reference.

https://refactoring.guru/ko/design-patterns/facade

https://leeheefull.tistory.com/13

 

 

 

잘λͺ»λœ 정보가 μžˆλ‹€λ©΄ λŒ“κΈ€μ„ 톡해 μ•Œλ €μ£Όμ„Έμš”. κ°μ‚¬ν•©λ‹ˆλ‹€. 

 

'λ””μžμΈ νŒ¨ν„΄' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ””μžμΈ νŒ¨ν„΄] μ‹±κΈ€ν„΄  (0) 2022.10.31

λŒ“κΈ€