inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Lớp học thành thạo Kotlin thông qua thực hành dự án thực tế

DI trong Ktor của Kotlin

DI시 eager과 lazy

Đã giải quyết

32

IwantKtor

3 câu hỏi đã được viết

0

authService를 주입받을때 get을 사용해서 eager로 가져오는 것으로 보이는데 by inject<>으로 lazy로 가져오는 것이랑 어떤 차이가 있는지 알고 싶습니다. 또 실무에서는 보통 어느 상황에서 eager혹은 lazy를 사용하는지 알고 싶습니다.

kotlin mysql ktor paseto s3

Câu trả lời 2

0

Hong

안녕하세요 IwantKtor님 질문 남겨주셔서 감사합니다!!

  • 제가 깜빡하고 답변을 못드렸네요 죄송합니다 ㅠ.ㅠ

 

늦게라도 답변을 드리자면, 우선 get 은 선언 즉시 가져오는 행위고 lazy 는 접근 할 떄 값을 가져오는 행위죠. 우리가 이걸 JPA 관점에서도 실제로 적용이 가능한 형태고요

 

get은 보통 그래서 함수 내부나 초기화 블록에서 사용이 되소 lazy 는 클래스 프로퍼티 관점에서 사용이 됩니다.

 

그래서 좀 더 딱 정리를 해보자면 get 는 routing 블록 내부에서 이미 DI 컨텍스트가 준비된 시점에 호출 할 떄사용이 되거나, lazy 는 클래스 프로퍼트 즉 순환 의존이 생길꺼 같을 떄 사용한다고 봐주시면 될꺼같습니다.

 

감사합니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. IwantKtor님.

의존성 주입에서의 eager와 lazy는 객체를 언제 인스턴스화하는지를 결정하는 중요한 개념입니다. 이것은 특히 Kotlin과 같은 언어 환경에서 DI(Dependency Injection) 패턴을 사용할 때 중요한 차이를 가져옵니다.

Eager와 Lazy 주입의 차이

  1. Eager 주입: 객체가 필요하기 전에 이미 인스턴스화되어 준비된 상태로 존재합니다. 즉, 애플리케이션이 시작될 때 모든 객체를 초기화하여 준비해 두는 방식입니다. 이는 성능 면에서 부하를 줄일 수 있지만, 메모리를 많이 사용할 가능성이 있습니다.

    • 장점: 더 빠른 응답시간(필요할 때 이미 인스턴스화되어 있음).
    • 단점: 메모리 사용량이 높을 수 있음, 초기 스타트업 시간이 길어질 수 있음.
  2. Lazy 주입: 실제로 객체가 필요하게 되었을 때 그때 인스턴스화하여 사용하는 방식입니다. 이 접근법은 메모리를 효율적으로 사용할 수 있습니다.

    • 장점: 메모리를 절약할 수 있음, 불필요한 객체 생성을 방지.
    • 단점: 객체가 필요할 때마다 인스턴스화되기 때문에 초기 접근시 지연 발생 가능.

실무에서의 활용

  • Eager 주입은 종종 애플리케이션 초기화 단계에서 대부분의 객체가 필요한 경우에 사용됩니다. 또한, 애플리케이션 스타트업 시간이 크게 중요하지 않은 경우에 적합합니다.
  • Lazy 주입은 특히 메모리 민감도가 높은 모바일 애플리케이션이나 대규모 객체가 많은 환경에서 주로 사용됩니다. 즉, 필요한 시점까지 초기화를 미루는 것이 유리할 때 활용됩니다.

다음 유사한 답변들을 참고하시면 더 많은 맥락과 예를 확인할 수 있습니다:
- DI의 eager와 lazy 주입 비교
- 실무에서의 DI 패턴 적용 방법

올바른 주입 방식을 선택하는 것은 장기적인 시스템 성능과 리소스 사용 효율성을 보장하기 위한 중요한 결정입니다. 각 프로젝트의 상황에 맞게 eager와 lazy를 적절히 사용하시길 권장합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항

0

20

2

JPA Repository 질문이 있습니다!

1

28

2

페이지네이션 처리를 쿼리에서 하는 방식 질문

1

30

1

비동기 스레드풀 분리 이유와 Virtual Thread 전환 시 고려사항

0

26

1

수강기간 연장

0

18

1

Build 관련 문제 (테스트 관련 문제)

0

30

1

다양한 관점의 코드 경험을 위해 개선하지 않은 코드

1

41

1

BCNF 질문

0

40

2

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

34

2

게시글 테스트 데이터 삽입

0

41

2

Orchestration SAGA 패턴 보상에 대한 질문입니다.

0

46

2

연관 엔티티 네이밍 규칙

0

35

1

히스토리 관련 질문

0

48

2

강의가 검은 화면으로 나옵니다.

0

42

1

자료가 남지않은 프로젝트는 어떻게 적어야 할까요?

0

33

2

진짜 강의 듣는거 너무 고문

0

102

1

진짜중복/가짜중복을 나누는데 있어서

0

33

2

histories() 응답에 PointHistory.id를 포함한 이유가 궁금합니다/

1

36

2

타입스크립트

0

39

1

인덱스 관련 질문 있습니다.

0

52

1

EC2 실습 중 docker-compose / docker ps 실행 시 권한 오류 문의

2

66

1

actuator에서 health 외의 다른 URL은 404 Notfound 에러가 발생합니다.

0

44

2

SettlementTargetRepository Jquery 질문

1

40

2

부가 기능을 이벤트 핸들러로 분리하는 기준이 있을까요?

1

53

2