inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

객체 지향 프로그래밍 입문

DIP

연습에 대한 구체적인 코드가 맞는지 리뷰 부탁드려도 될까요 :)?

284

유아밍 (탈퇴)

작성한 질문수 0

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() {

// ...

}

}

oop

답변 3

0

유아밍 (탈퇴)

답변 감사합니다. 과제가 있었군요!! 한번 확인해보겠습니다 :)

0

최범균

아래 링크에 있는 새소식에 등록한 연습 과제도 풀어보시면 더 도움이 되실거에요.

https://www.inflearn.com/course/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9E%85%EB%AC%B8/course-news/

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