본문 바로가기
back/spring

[스프링] 빈 팩토리를 사용하는 이유

by juniKang 2022. 11. 2.

스프링에서는 @Autowired와 같은 애노테이션을 사용해서 클래스를 빈으로 등록하면, 생성하지 않고도 다른 클래스에서 사용할 수 있습니다. 왜 그렇게 만들었는지에 대해 제가 생각하는 이유를 적어봅니다.

 

1. 클래스의 독립적인 테스트를 위해

 저는 서비스 클래스를 만들고, 동료가 리포지토리 클래스를 만든다고 생각해봅시다. 서비스 클래스에서는 리포지토리를 사용해야만 디비에서 데이터를 가져와서 실행할 수 있습니다. 그래서 저의 서비스 클래스 내에서 리포지토리 클래스를 생성해서 사용한다면, 리포지토리 클래스가 미완성이거나 오류가 있으면, 저의 서비스 클래스는 무조건 실패할 수 밖에 없습니다. 하지만 리포지토리 클래스를 외부에서 넣어준다면, 리포지토리 호출은 무조건 성공하도록 가짜 데이터를 리턴해줄 수 있습니다. 그러면, 리포지토리 클래스의 개발이 완료되길 기다릴 필요없이, 독립적으로 서비스 클래스를 코딩할 수 있습니다.

 

2. 싱글턴을 쉽게 사용하기 위해

 인스턴스가 여러개일 필요가 없는 경우가 있습니다. 항상 같은 인풋에 같은 아웃풋을 리턴해야만 하는 함수적 프로그래밍 구현체나, 상태값을 가지지 않는 객체, 전체 프로그램에서 동일한 상태값을 가져야 하는 객체 등이 그렇습니다. 이런경우 스프링의 빈팩토리를 통해서 손쉽게 싱글턴 객체를 만들 수 있습니다.

 

3. 성능 최적화

  이미 빈으로 등록된 객체를 받아서 사용하기 때문에 메모리면에서 효율적이고, 런타임시에도 성능 최적화에도 유리합니다. 데이터베이스와 어떤 일을 하는 객체들은 비용이 비싼데, 이런것들을 싱글톤으로 쉽게 사용할 수 있어서 성능 최적화에 좋습니다.

 

4. 라이프 사이클 인터페이스를 사용하기 위해

 빈의 라이플 사이클에 관련된 API들을 사용할 수 있습니다. 객체가 생성 됐을 때 무언가 하고 싶다면 @PostCOnstruct등의 애노테이션을 붙여서 실행시킬 수 있습니다.

댓글