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

이영훈님의 프로필 이미지

작성한 질문수

토비의 스프링 6 - 이해와 원리

관계설정 책임의 분리

paymentService를 호출 할때 new로 생성한다면

작성

·

94

0

paymentService를 호출 할때 new로 생성한다면, 매번 new로 생성해야 해서 리소스가 많이 투여 되지 않을까요?

기존에는 @Autowired를 통해 service를 호출해왔는데, autowired를 사용할 때에도 new PaymentService(new WebApiExRateProvider) 이렇게 사용해야 할까요?

답변 2

0

토비님의 프로필 이미지
토비
지식공유자

@Autowired 같은 것은 스프링 컨테이너가 new Paymentservice() 등을 호출해서 의존관계를 맺을 때 참고하도록 넣어주는 정보입니다. 스프링이 하는 일을 직접 코드로 만들어 본 것이 강의의 Client 클래스의 main() 메소드 코드입니다. 이건 내부에서 어떻게 오브젝트가 만들어지고 의존관계가 맺어지는지를 이해하도록 코드를 직접 넣은 것일 뿐입니다. 실제로 스프링 애플리케이션을 띄우면 이런 작업을 스프링 컨테이너가 직접 합니다. 그리고 많은 요청을 처리할 때 매번 PaymentService를 새로 만들 필요가 없기 때문에 한번 만들어진 PaymentService 오브젝트를 계속 재사용합니다. 그래서 불필요하게 오브젝트를 많이 만드는 일은 일어나지 않습니다.

 

일단 스프링 내부의 동작 방식을 이해하셨다면 개발자가 직접 new PaymentService() 등을 호출해서 사용할 일은 없습니다. 이런 작업을 대신 해주고, 한번 만든 오브젝트를 재사용하도록 관리해주는 등의 책임을 맞기기 위해서 스프링과 같은 프레임워크를 사용하는 것이죠.

0

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

이영훈님께서 질문하신 내용에 대해 유사한 상황을 다루는 기존 답변을 아래에 첨부해 드립니다. 함께 참고하시면 도움이 될 것 같습니다.

  1. 클래스 필드 레벨에서의 객체 생성에 대해 질문있습니다.

    • 이 질문은 클래스 필드 레벨의 객체 생성과 메서드 레벨의 객체 생성에 대한 차이와 적절한 사용법에 대해 설명하고 있습니다. 토비님의 답변을 통해 @Autowired와 객체 생성을 어떻게 관리하는 것이 효율적인지 배울 수 있습니다.
  2. 의존성 주입과 NullPointerException

    • 이 질문에서는 의존성 주입 방식에 따른 빈 생성 시점과 의존성 주입의 효과에 대해 설명하고 있습니다. 의존성 주입을 통해 객체 생성을 관리하는 방식이 명확하게 설명되어 있습니다.
  3. BeanFactory 의존관계

    • 이 질문에서는 @Bean을 사용한 객체 생성 및 의존 관계 설정에 대한 내용을 다루고 있으며 , 토비님의 코멘트를 통해 빈 관리와 의존성에 관한 이해를 얻을 수 있습니다.

풍부한 설명 추가:
@Autowired 어노테이션을 사용하여 스프링 컨테이너가 자동으로 빈을 주입하도록 설정하면, 직접 new 키워드를 사용해서 객체를 생성하는 일이 사라집니다. 이렇게 하면 스프링 컨테이너가 객체 생성을 관리해 주므로 메모리와 리소스를 효율적으로 사용할 수 있습니다. PaymentService와 같이 의존성(ExRateProvider)이 있는 객체도 컨테이너가 관리하게 되어, 의존성 주입이 자동으로 이루어집니다. 따라서, new PaymentService(new WebApiExRateProvider)와 같이 객체를 직접 생성할 필요가 없습니다.

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