작성
·
102
답변 2
0
@Autowired 같은 것은 스프링 컨테이너가 new Paymentservice() 등을 호출해서 의존관계를 맺을 때 참고하도록 넣어주는 정보입니다. 스프링이 하는 일을 직접 코드로 만들어 본 것이 강의의 Client 클래스의 main() 메소드 코드입니다. 이건 내부에서 어떻게 오브젝트가 만들어지고 의존관계가 맺어지는지를 이해하도록 코드를 직접 넣은 것일 뿐입니다. 실제로 스프링 애플리케이션을 띄우면 이런 작업을 스프링 컨테이너가 직접 합니다. 그리고 많은 요청을 처리할 때 매번 PaymentService를 새로 만들 필요가 없기 때문에 한번 만들어진 PaymentService 오브젝트를 계속 재사용합니다. 그래서 불필요하게 오브젝트를 많이 만드는 일은 일어나지 않습니다.
일단 스프링 내부의 동작 방식을 이해하셨다면 개발자가 직접 new PaymentService() 등을 호출해서 사용할 일은 없습니다. 이런 작업을 대신 해주고, 한번 만든 오브젝트를 재사용하도록 관리해주는 등의 책임을 맞기기 위해서 스프링과 같은 프레임워크를 사용하는 것이죠.
0
안녕하세요, 인프런 AI 인턴입니다.
이영훈님께서 질문하신 내용에 대해 유사한 상황을 다루는 기존 답변을 아래에 첨부해 드립니다. 함께 참고하시면 도움이 될 것 같습니다.
클래스 필드 레벨에서의 객체 생성에 대해 질문있습니다.
@Autowired
와 객체 생성을 어떻게 관리하는 것이 효율적인지 배울 수 있습니다.@Bean
을 사용한 객체 생성 및 의존 관계 설정에 대한 내용을 다루고 있으며 , 토비님의 코멘트를 통해 빈 관리와 의존성에 관한 이해를 얻을 수 있습니다.풍부한 설명 추가:
@Autowired
어노테이션을 사용하여 스프링 컨테이너가 자동으로 빈을 주입하도록 설정하면, 직접 new
키워드를 사용해서 객체를 생성하는 일이 사라집니다. 이렇게 하면 스프링 컨테이너가 객체 생성을 관리해 주므로 메모리와 리소스를 효율적으로 사용할 수 있습니다. PaymentService
와 같이 의존성(ExRateProvider
)이 있는 객체도 컨테이너가 관리하게 되어, 의존성 주입이 자동으로 이루어집니다. 따라서, new PaymentService(new WebApiExRateProvider)
와 같이 객체를 직접 생성할 필요가 없습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.