객체지향 설계의 꽃인 추상화를 스프링 컨텍스트에서 어떻게 활용하고, 의존성 주입과 결합하여 유연한 코드를 만드는지 정리했습니다.
추상화로 구현을 분리하는 것은 클래스 설계의 핵심입니다.
스프링은 인터페이스를 타입으로 하여 의존성을 주입받는 방식을 권장합니다.
@Service, @Repository 등)을 붙여 빈으로 등록합니다.하나의 인터페이스에 두 개의 구현 클래스가 빈으로 등록되어 있다면, 스프링은 어떤 것을 주입할지 몰라 예외를 발생시킵니다.
@Primary 사용: 여러 후보 중 기본적으로 사용할 구현체에 우선순위를 부여합니다.@Qualifier 사용: 주입받는 시점(생성자나 필드)에 명시적으로 빈의 이름을 지정합니다.단순히 @Component를 쓰는 것보다 객체의 역할(책임)에 맞는 애너테이션을 사용하는 것이 좋습니다.
@Service: 비즈니스 로직을 담당하는 서비스 레이어 컴포넌트에 사용합니다.@Repository: 데이터베이스와의 상호작용(영속성 계층)을 담당하는 컴포넌트에 사용합니다.@Component: 그 외에 특정한 책임이 명확하지 않은 일반적인 컴포넌트에 사용합니다.#Spring #Abstraction #Interface #Service #Repository #백엔드공부