연습에 대한 구체적인 코드가 맞는지 리뷰 부탁드려도 될까요 :)?
284
작성한 질문수 0
안녕하세요.
DIP까지 다 듣게 되었습니다. 좋은 강의를 이렇게 올려주셔서 너무 감사합니다. 다만, 마지막 연습에 대한 구체적인 코드가 없어서 작성하게 되었습니다:)
제가 작성한 코드가 제대로 이해한게 맞는지 확인 부탁드려도 될까요?
// 고수준 모듈class ProductDataService {
private var productRepository: ProductRepository?
private var productRecommander: ProductRecommander?
private var popularProductService: PopularProductService?
// 직접 생성x
// init() {
// self.productRepository = DBProductRepository()
// self.productRecommander = DaaraRecommnder()
// self.popularProductService = ErpPopularProductService()
// }
init(_ productRepository: ProductRepository, _ productRecommander: ProductRecommander, _ popularProductService: PopularProductService) {
self.productRepository = productRepository
self.productRecommander = productRecommander
self.popularProductService = popularProductService
}
func getDetailInfo() {
productRepository?.fetchDetailInfo()
}
func recommandItem() {
productRecommander?.fetchItems()
}
func getTopItem() {
popularProductService?.fetchTopItem()
}
}
// 하위 기능을 추상화한 타입 1
protocol ProductRepository {
func fetchDetailInfo()
}
// 하위 기능을 추상화한 타입 2
protocol ProductRecommander {
func fetchItems()
}
// 하위 기능을 추상화한 타입 3
protocol PopularProductService {
func fetchTopItem()
}
// 저수준 모듈
class DBProductRepository: ProductRepository {
func fetchDetailInfo() {
// ...
}
}
class DaaraRecommnder: ProductRecommander {
func fetchItems() {
// ...
}
}
class ErpPopularProductService: PopularProductService {
func fetchTopItem() {
// ...
}
}
답변 3
0
아래 링크에 있는 새소식에 등록한 연습 과제도 풀어보시면 더 도움이 되실거에요.
0
전체적으로 느낌은 맞는데 ProductDataService 의 "상품 정보 조회" 기능은 아래와 같으므로
- 개별 상품 정보 조회
- 해당 상품과 관련된 추천 상품 구함
- 추천 상품 개수에 따라 인기 상품 구함
ProductDataService 에 getDetailInfo(), recommandItem(), getTopItem() 메서드가 따로 존재한다기 보다는 아래와 같이 getDetailInfo() 메서드를 구현하게 됩니다.(자바 코드로 표시해봅니다.)
public class ProductDataService { private ProductRepository productRepository;
private ProductRecommender productRecommender;
private PopularProductService popularProductService;
public ProductInfo getDetailInfo(String prodId) {
Product prod = productRepository.findOne(prodId);
List<RecommendProd> recProds = productRecommender.getRecommandProds(prodId);
List<SuggestProd> suggProds = toSuggestProds(recProds);
if (suggProds .length() < 5) {
List<TopProd> topProds = popularProductService.getTopProds(
prod.getCategory(), 5 - suggProds.length());
suggProds.addAll( toSuggestProds(topProds) );
}
return ProductInfo(prod, suggProds);
}
private List<SuggestProd> toSuggestProds(List<RecommendProd> recProds) { ... }
private List<SuggestProd> toSuggestProds(List<TopProd> topProds) { ... }
...
그리고 용어를 Product로 사용하기로 했다면 (ProductDataService 등), 추천 기능을 정의한 인터페이스나 인기 상품을 가져오는 인터페이스의 메서드도 Item이 아니라 Product라는 용어를 사용하는 게 좋을 듯 합니다.
추상화 예제의 추상화하지 않은 구현 부분에서 질문있습니다.
0
446
1
캡슐화 하는 이유에 대해서
2
758
1
캡슐화 연습 2번
0
370
1
추상화 예제에서 추상 클래스를 사용하지 않고 인터페이스를 사용하신 이유가 궁금합니다.
0
269
2
캡슐화 예제 4 질문입니다.
0
272
1
범균님 안녕하세요 강의 수강중 궁금한점이 있어 질문 남겨 봅니다.
0
366
1
캡슐화 질문
0
322
1
DIP 관련해서 궁금한게 있습니다.
0
260
1
기능 분리 기준에 대한 질문이 있습니다.
1
361
2
서로 다른 구현 추상화에 대해서 질문이 있습니다.
2
370
2
의존 주입 예제 관련 질문입니다.
1
257
1
상속 재활용 단점 중 상위 클래스 변경 어려움에 대해서 질문이 있습니다.
1
316
2
캡슐화 연습4 질문 있습니다.
0
295
2
의존하는 대상이 많을 때 질문 드립니다.
0
265
1
추상화를 따라서 코딩해볼 수 있는 예제가 있을까요?
0
452
1
콘크리트 클래스를 직접 사용하는 경우 & NotifierFactory 관련 질문드립니다
1
279
1
Demeter's Law 설명이 잘 이해가 안갔습니다 ㅠㅠ
1
289
1
혹시 강의를 듣고 필기한 내용을 정리해서 블로그에 올려도 될까요?
0
361
2
캡슐화 예제 질문드립니다
0
547
4
DIP
1
377
3
예제코드는 따로 없나요?
1
233
0
NotifierFactory 를 또 추상화 한 이유가 궁금합니다
0
200
1
특정 클라우드에서 예외적으로 특정기능을 제공하지 않는 경우
6
217
1
상속과 조합 문의드립니다
1
269
1





