inflearn logo
강의

講義

知識共有

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

依存とDI

의존 대상 객체를 직접 생성했을 때 문제에 대해 질문드립니다.

解決済みの質問

429

ksh79533954

投稿した質問数 62

0

안녕하세요. 강사님.

영상 4:40초쯤 생성 클래스가 바뀌면 의존하는 코드도 바뀐다고 하셨는데 이게 어떤 경우인지 예시가 잘 안 그려집니다.

추상화 파트를 다시 봐도 이해가 잘 안 가서 그러는데 예시나 추상화 강의에서 나왔던 부분 좀 언급하셨던 곳 좀 알려주실 수 있을까요?

객체지향

回答 2

0

ksh79533954

감사합니다.

그런데 의존하는 대상이 바뀌어도 기존 코드에 영향이 없으려면 추상클래스를 의존하고 있어야 의미가 있을 것 같은데 맞을까요?

아래의 코드처럼 MessageSender라는 추상클래스에 의존하도록 하고 생성자나 메소드로 SmsSender나 AlimtalkSender를 인자를 받도록 해야 의존하는 대상이 변경되어도 코드 수정이 없을 것 같아서요.

처음 예시에서 SomeService가 SmsSender를 가지고 있고 의존 주입으로 생성자나 메소드로 SmsSender를 초기화한다 하면 요구사항이 변경되어 AlimtalkSender로 변경됬을 때 결국 코드가 수정되어야 하니까요..

제가 이해하고 있는게 맞나요?

class SomeService {
    //private AlimtalkSender sender = new AlimtalkSender(); // <-- 코드 바뀜
private:
    MessageSender *sender;
public: 
    void setMessageSender(MessageSender *sender) {
        this->sender = sender;
    }
    void doSome() {
        ... // DB 연동 등 작업
        sender.send(to, msg);
    }
} 

0

madvirus0123

말씀하신 것처럼 추상 타입에 의존해야 내가 의존하는 구현체가 변경되어도 나는 변경할 필요가 없게 되죠.

0

madvirus0123

안녕하세요. 아래 코드를 보죠.

public class SomeService {
    private SmsSender sender = new SmsSender();

    public void doSome() {
        ... // DB 연동 등 작업
        sender.send(to, msg);
    }
}

이 코드에서 SomeService는 SmsSender를 new로 생성해서 사용하고 있습니다. 즉 SomeService가 SmsSender를 의존하고 있죠.

SMS가 아니라 알림톡으로 메시지를 보내라고 요구사항이 변경되고 알림톡 발송 기능은 AlimtalkSender에 구현되어 있다고 가정하면, SmsSender 대신에 AlimtalkSender를 사용하도록 기존 코드를 변경해야 할 겁니다.

public class SomeService {
    private AlimtalkSender sender = new AlimtalkSender(); // <-- 코드 바뀜

    public void doSome() {
        ... // DB 연동 등 작업
        sender.send(to, msg);
    }
}

즉 위 코드처럼 SmsSender를 new로 생성해서 사용(의존)하는 SomeService 코드가 AlimtalkSender를 생성하도록 바뀌는 거죠.

싱글턴패턴

0

7

1

Singleton 관련 질문입니다.

1

31

2

코드 자료

0

26

2

질문있습니다

0

25

1

1번 문제 질문입니다.

0

31

1

음악플레이어 문제 중 코드질문

0

26

1

문제와 풀이4 문제점

0

41

2

문제와 풀이

0

23

1

문제풀이 시간마다 방향성

0

39

2

레이어드 아키텍처에서 도메인 중심 패키지 구조를 적용하거나 변화하는 시점이 있을까요?

1

40

2

LobbyUIController의 백키가 사라졌는데 왜그런건가요?

0

42

2

무조건 타이틀 씬부터 시작해야하나요?

0

41

1

9장 상속 문제와 풀이 질문

0

38

1

BaseUI, UIManager

0

51

3

프로젝트 완성본 문의

0

41

2

섹션 2 퀴즈 9번

0

33

2

질문 디스코드 관련

0

42

1

강의 자료에 사소한 오타가 있습니다.

0

48

2

다형성 개념 문의

1

61

3

강의 수준 질문드려요

0

423

1

6분 26초에 말하는 객체의 안에 있는 프로시저란 객체의 메서드를 말하는건가요?

0

385

1

객체의 기능보다 속성을 먼저 추출하는 것에 대해 의견을 여쭤보고 싶습니다.

0

420

1

책임 분리 및 할당 관련 질문이 있습니다.

0

507

2

객체지향 프로그래밍과 캡슐화의 차이가 궁금합니다.

0

673

1