inflearn logo
강의

講義

知識共有

オブジェクト指向プログラミング入門

多型と抽象化

콘크리트 클래스를 직접 사용하는 경우 & NotifierFactory 관련 질문드립니다

277

rweteam

投稿した質問数 16

1

안녕하세요 강의 듣던중 궁금한게 생겨서 질문드립니다.

 

1. 9분 9초 경 요구사항이 변경되면서

if(pushable){
 kakao.send();
}else{
 sms.send();
}

mail.send()

이렇게 pushable 하면 카카오알림, 불가능하면 문자알림 을 한 후에

무조건 메일을 통해 push를 한번 더 하고있는데요..

 

이를 추상화해서 notify 라는 인터페이스를 만들고, 3개(카카오,문자,메일)의 콘크리트 클래스를 구현하면

Notify notify = getNotify(...) // 여기서 카카오 or 문자 or 이메일 결정
notify.send()

이렇게 구현이 될거라고 생각이 들었습니다.

근데 만약 notify가 카카오알림이였다면.. 이메일을 통한 send는 못하게 되지 않나요? 아니면 다른 구현 방법이 있을까요

 

 

2. 강의 11분 50초 쯤 추상화를 한번 더 진행해주셨는데요..

이전 질문글을 읽어봐도 NotifierFactory 의 역할이 사실 잘 와닿지가 않습니다

그냥 DefaultNotifierFactory 만 구현하면 될 것 같다는 생각이 사라지지가 않는 것 같은데 혹시 더 설명해주실 수 있으신가요?

 

감사합니다.

 

 

 

oop

回答 1

3

madvirus0123

1번 답변.

여러 푸시 메시지를 발송할 수 있는 CompositeNotify를 만들어서 해결해 볼 수 있을 것 같습니다.

public class CompositeNotify implements Notify {
    private List<Notify> notifiers;

    // 생성자
    ...

    public void send() {
        notifiers.forEach(n -> n.notify());
    }
}

getNotify() 메서드는 파라미터로 받은 값에 따라 여러 Notify를 가진 CompositeNotify를 생성하구요.

private Notify getNotify(...) {
    List<Notify> list = new ArrayList<>();
    if (조건) {
        list.add(kakaoNotify);
    } else {
        list.add(smsNotify);
    }
    list.add(emailNotify);
    return new CompositeNotify(list);
}

 

2번 답변.

가입 코드가 아래와 같다고 할 때,

public class PlaceOrderService {

  public void order(OrderRequest orderReq) {
    ... 주문 처리
    Notify notify = getNotify(...);
    notify.send();
  }

  private Notify getNotify(...) {
    ... 실제 구현을 사용하는 Notify를 리턴
  }
}

우선 발송 방식은 주문 프로세스 자체와 상관이 없는데 발송 방식이 바뀌면 주문 서비스의 코드가 바뀌게 되는데 이는 책임이 섞여 있음을 의미합니다.

Notify를 제공하는 역할을 별도 팩토리로 분리하면 주문 프로세스 처리와 발송 방식 선택 로직이 명확하게 구분되어 책임이 잘 나눠지게 됩니다.

또한 주문 서비스에 대한 단위 테스트도 수월해지는 이점이 있습니다.

 

0

rweteam

자세한 답변 감사합니다.

직접 코딩해보면서 더 이해해보도록 하겠습니다~

추상화 예제의 추상화하지 않은 구현 부분에서 질문있습니다.

0

446

1

캡슐화 하는 이유에 대해서

2

755

1

캡슐화 연습 2번

0

369

1

추상화 예제에서 추상 클래스를 사용하지 않고 인터페이스를 사용하신 이유가 궁금합니다.

0

267

2

캡슐화 예제 4 질문입니다.

0

272

1

범균님 안녕하세요 강의 수강중 궁금한점이 있어 질문 남겨 봅니다.

0

366

1

캡슐화 질문

0

322

1

DIP 관련해서 궁금한게 있습니다.

0

260

1

기능 분리 기준에 대한 질문이 있습니다.

1

361

2

서로 다른 구현 추상화에 대해서 질문이 있습니다.

2

369

2

의존 주입 예제 관련 질문입니다.

1

256

1

상속 재활용 단점 중 상위 클래스 변경 어려움에 대해서 질문이 있습니다.

1

316

2

캡슐화 연습4 질문 있습니다.

0

294

2

의존하는 대상이 많을 때 질문 드립니다.

0

265

1

추상화를 따라서 코딩해볼 수 있는 예제가 있을까요?

0

451

1

Demeter's Law 설명이 잘 이해가 안갔습니다 ㅠㅠ

1

287

1

혹시 강의를 듣고 필기한 내용을 정리해서 블로그에 올려도 될까요?

0

358

2

캡슐화 예제 질문드립니다

0

546

4

DIP

1

375

3

예제코드는 따로 없나요?

1

231

0

NotifierFactory 를 또 추상화 한 이유가 궁금합니다

0

198

1

특정 클라우드에서 예외적으로 특정기능을 제공하지 않는 경우

6

214

1

상속과 조합 문의드립니다

1

267

1

강의자료를 받아볼수 있나요?

1

282

2