인프런 커뮤니티 질문&답변

here님의 프로필 이미지
here

작성한 질문수

CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조

팩토리패턴 ★★★

팩토리 패턴의 의존성 주입과 관련해서 질문이 있습니다!

작성

·

602

0

강의 교재에서 "CoffeeFactory라는 상위 클래스가 중요한 뼈대를 결정하고 하위 클래스인 LatteFactory가 구체적인 내용을 결정하고 있습니다. 참고로 이는 의존성 주입이라고도 볼 수 있습니다. CoffeeFactory에서 LatteFactory의 인스턴스를 생성하는 것이 아닌 LatteFactory에서 생성한 인스턴스를 CoffeeFactory에 주입하고 있기 때문이죠."

위 문장에 대해 두 가지 의문점이 있습니다.

  1. CoffeeFactory 클래스와 LatteFactory가 상속 관계를 가진 상위/하위 클래스인가?

    CoffeeFactory는 그저 LatteFactory, EspressoFactory를 호출하는 역할의 클래스이고 extends를 통해 상속을 하고 있지 않다고 생각하는데 이 부분이 왜 상속 관계에 있는 것인지 이해가 안갔습니다.

  2. LatteFactory에서 생성한 인스턴스를 CoffeeFactory에 주입하고 있다?

    해당 예시에서 의존성 주입은 의존성 주입자의 역할을 하고있는 CoffeeFactory 클래스가 main 함수와 하위 클래스(LatteFactory, EspressoFactory)와의 의존성을 느슨하게 만들고, 하위 클래스가 CoffeeFactory 클래스에 의존하게 만들면서 달성된다고 생각했습니다. 그런데 LatteFactory에서 생성한 인스턴스를 CoffeeFactory에 주입하기 때문에 의존성 주입이 달성된다는 문장이 이해가 안 갔습니다.

    +static 메서드를 사용하고 있기 때문에 인스턴스를 생성하지 않는 것으로 보이는데 '인스턴스'를 주입하고 있다는 문장도 잘 이해가 가지 않습니다.

긴 질문 읽어주셔서 감사합니다! 답변 기다리겠습니다 :)

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 here님 ㅎㅎ

  1. CoffeeFactory 클래스와 LatteFactory가 상속 관계를 가진 상위/하위 클래스인가?

    CoffeeFactory는 그저 LatteFactory, EspressoFactory를 호출하는 역할의 클래스이고 extends를 통해 상속을 하고 있지 않다고 생각하는데 이 부분이 왜 상속 관계에 있는 것인지 이해가 안갔습니다.

>> 음 혹시 자바스크립트 코드를 보고 질문하시는 건가요? 저 자바스크립트 코드 같은 경우 ES6에서 처음으로 extends가 나왔지만 저 코드를 만들 당시 ES6 - extends 키워드를 쓰지 않고 간단히 상속관계를 만들고자 한 코드입니다. 자바코드를 참고해주세요. 자바 코드를 보면 extends를 쓰며 상속을 하고 있습니다.

https://github.com/wnghdcjfe/csnote/blob/main/ch1/6.java

다만 자바스크립트 코드 같은 경우 extends를 해야 정확히 상속관계다 라고 볼 수 있기 때문에 이는 수정했습니다. 감사합니다.

LatteFactory에서 생성한 인스턴스를 CoffeeFactory에 주입하기 때문에 의존성 주입이 달성된다는 문장이 이해가 안 갔습니다.

>> 이부분 말씀하시는 것 맞나요?

const coffee = CoffeeFactory.createCoffee("LatteFactory") 

원래는 LatteFactory에 관한 인스턴스를 만들어서 createCoffee 메서드 매겨변수로 넣어야 한다는 말씀이시죠. 아마 제 생각에는 클래스를 기반으로 객체를 만들어 매개변수를 넣는 것이 옳다. 라고 말씀하시는 것 같은데요.

문자열을 매개변수로 넣는 것 또한 인스턴스 삽입이라고 볼 수 있습니다. 문자열은 다음과 같이 string이라는 클래스에서 나오는 인스턴스입니다. new String하고도 선언할 수 있지만 그냥 문자열로 선언도 가능하죠. (다만 좀 간단히 만든 거에요.. ㅎㅎ )

const string4 = new String("A String object");

here님께서 생각하신 코드는 아마 다음과 같을 거 같은데요. 다음 코드는 다음 강의 의존성 주입에 나오는 코드이며 다음과 같이 클래스를 기반 > 인스턴스를 주입해서 의존성주입을 만들고 있습니다.

        Project a = new Project(new BackendDeveloper(), new FrontEndDeveloper());

또 질문 있으시면 언제든지 질문 부탁드립니다.

감사합니다.

강사 큰돌 올림.

here님의 프로필 이미지
here

작성한 질문수

질문하기