• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

Angular Injector 관련 질문있습니다.

20.01.28 15:56 작성 조회수 181

1

좋은 강의, 친절한 답변 너무 감사드립니다! 

다름이 아니라, Angular의 서비스는 싱글톤으로 알고있는데,

부모 컴포넌트와 하위 컴포넌트가 각각 자신의 Injector로 서비스를 주입받으면, 별개의 서비스 객체를 참조하게 되는 것 같은데, 그러면 완전한 싱글톤이라기보다 injector별로 서비스 객체가 생성된다고 이해해도 괜찮은걸까요?

답변 3

·

답변을 작성해보세요.

1

주입시점을 잘 이해하시면 명료하실 겁니다. 먼저 답변은 '그럴수도 있고 그렇지 않을 수도 있다'입니다.

강의에서는 설명하지 않았는데도 잘 알고 계시는군요! 
네 맞습니다. Angular 시스템에서는 사실 각각의 컴포넌트에 'Injector'라는 것이 존재하죠.
만약 인젝터들에 어떤 서비스가 주입받을지 명시되어 있으면, 인젝터는 해당 서비스의 인스턴스를 생성하여 주입합니다.
예를들어 A 컴포넌트의 인젝터에는 example 이라는 서비스를 명시했다고 하죠. 그럼 A 컴포넌트에는 example(A)라는 인스턴스가 주입이 됩니다. B 컴포넌트의 인젝터에도 example이라는 서비스를 명시한다면 해당 컴포넌트의 인젝터가 example(B)라는 인스턴스를 생성해서 넣겠죠. 
이런 경우 장춘님이 말씀하신 상황입니다.  인젝터별로 인스턴스가 생성되었기 때문에 데이터를 공유할 수 없습니다. 

하지만 장춘님께서 의미하시는 '완전한 싱글톤'으로 작동하는 경우도 있습니다. 

인젝터는 상속 비슷한 개념을 가지고 있습니다. 어떤 컴포넌트가 부모 컴포넌트를 지니고 있고, 해당 컴포넌트에서 주입을 받아야할 객체가 있다고 가정해보죠. 

컴포넌트는 주입을 받아야 객체가 있으면 먼저 자신의 인젝터를 확인해봅니다. 그런데 자신의 인젝터에는 아무것도 명시되어 있지 않다면 어떻게 할까요?
그러면 컴포넌트는 자신의 부모 컴포넌트의 인젝터를 확인해봅니다. 이런식으로 쭈욱 올라가다보면 결국 root 인젝터를 확인하게되고, 만약 root 인젝터에도 없다면 Null injector 에러를 보시게 될겁니다. 

모든 컴포넌트들이 root 인젝터에 있는 서비스를 사용하게 되면 어떨까요? 
이 경우 root 인젝터에 하나의 인스턴스로 존재하게되며 싱글톤인 서비스로 동작하게 됩니다. 모든 컴포넌트들이 하나의 인스터스에 접근하여 데이터를 조작할수도 있고, 공유할 수 도 있는 것이죠. 완전한 싱글톤인 상태인 것입니다. 
(이런 개념을 통해 Angular에서는 redux와 같은 패턴도 쉽게 구현해낼 수 있습니다. )


0

헛 그런가요 ㅋㅋㅋㅋ 지금 제가 강의를 못듣다보니, 혹시 빠진 내용인가 싶었는데... 
부족한 설명이지만 잘 이해해주시니 다행입니다. 취업(혹은 이직) 성공하시길 진심으로 기원합니닷!

0

이장춘님의 프로필

이장춘

질문자

2020.01.28

아닙니다 전부 강의에서 설명해주신내용이라.. ㅎㅎ

설명을 워낙 깔끔하게 해주셔서 이해가 쏙쏙 됩니다.

입사 전 Angular 기초를 잡고싶어서 수강했는데 지금 막 완강 했습니다!  너무 감사드립니다!!