[Spring] 스프링 프레임워크 의존관계

2022. 2. 5. 12:40·Spring/Spring

1. 의존 관계에 대한 용어 정리


  • 빈

   IoC 컨테이너가 관리하는 자바 객체

 

 

  • 와이어링 

   애플리케이션 객체 간의 연관관계를 형성해주는 것을 의미

 

 

  • 의존 관계 주입

   빈 식별, 생성 및 와이어링 의존 관계 프로세스를 의존 관계 주입이라고 한다.

 

 

  • IoC(Inversion of Control)

   의존 관계를 만드는 책임을 사용자 본인이 가지는 것이 아니라 프레임워크로 옮기는 것을 뜻한다.

 

 

 

 

 

2. 스프링 IoC 컨테이너가 빈을 식별하는 방법


스프링 IoC 컨테이너는 클래스에서 어노테이션을 보고 클래스의 인스턴스를 생성한다.

어노테이션의 종류는 아래와 같다.

@Component와 그것을 상속한 어노테이션들

 

어노테이션 설명
@Component 스프링 빈을 정의하는 가장 일반적인 방법
스프링에서 관리되는 객체임을 표시하기 위해 사용
@Controller Spring MVC에서 URL 매핑할 때 사용
MVC 중 Controller의 역할을 하기위해 사용되는 어노테이션
@Service 비즈니스 서비스 구성요소로 사용 (비즈니스 로직)
@Repository 데이터베이스에서 데이터에 접근하는 객체의 역할을 수행

 

@Component를 사용하면 전체를 포괄하여 클래스를 생성할 수 있지만, 구체적이지 못하다.

그렇기 때문에 @Component를 사용하기보다는!

용도에 따라 @Controller, @Service, @Repository를 사용하는 것이 관점(Aspect)에 연관성을 부여할 수 있다.

 

 

 

 

 

3. 애플리케이션 컨텍스트 구성 및 컴포넌트 스캔


스프링 프레임워크 초기에는 컨텍스트의 모든 구성이 XML파일로만 가능했지만

현재는 @Configuration 어노테이션을 통해 자바 컨텍스트를 구성한다.

@Configuration어노테이션을 사용한 자바 클래스에

@ComponentScan을 사용, 컴포넌트 스캔을 통해 스프링 IoC 컨테이너가 빈의 위치를 인식할 수 있다.

 

@Configuration으로 생성된 클래스에는 @Bean 어노테이션을 통해 빈을 생성할 수도 있다.

 

코드 예시는 아래와 같다.

import com.bigbell.spring.config;

@Configuration
@ComponentScan(basePackages="com.bigbell.spring")
class SpringContext {
    
    @Bean
    ...
    ...
}

 

 

 

 

4. 의존성 주입 어노테이션


어노테이션 설명
@Autowired 애플리케이션 콘텍스트에서 일치하는 의존관계를 검색
일치 항목이 1개 있다면 와이어링에 성공
일치 항목이 없거나 2개 이상이라면 와이어링에 실패
@Primary를 활용하면 2개 이상일 때도 와이어링 가능
@Qualifier @Qualifier("클래스명") 형태로 사용
@Autowired와 기능은 똑같으나 일치 항목이 2개 이상일 때 사용

 

 

 

이 외에도 @Resource라는 어노테이션도 존재하는데

위의 2개의 어노테이션이 타입을 이용해서 주입할 객체를 검색한다면

@Resource는 빈 이름을 이용해서 주입할 객체를 검색하기때문에 좀 더 세밀한 편이다.

@Resource 어노테이션은 생성자에 적용할 수 없고 필드나 메서드에만 적용할 수 있기때문에 난잡해질 수 있다.

 

대부분의 프로젝트에서는 @Autowired를 사용한 코드가 많다고 한다.

코드 예시는 아래와 같다.

 

 

- 인터페이스와 인터페이스를 상속한 클래스

interface TV {
    public void show();
}


@Component
class WideTV implements TV {
    public void show(){
        ....
    }
}

 

- @Autowired를 사용해 의존성 주입

@Service
public class TVService {
    
    @Autowired
    private TV myTV;
    
    public void show() {
        myTV.show();
    }
}

위와 같이 @Autowired 밑에 TV인터페이스의 myTV를 선언하면

TV인터페이스를 상속한 단 1개의 일치 항목인 WideTV를 연결해준다.

myTV는 WideTV로 와이어링되었으므로 WideTV클래스의 메소드를 사용할 수도 있다.

 

'Spring/Spring' 카테고리의 다른 글
  • [Spring] Controller와 어노테이션
  • [Spring] 스프링 MVC 사용을 위한 의존관계 추가
  • [Spring] 스프링 프레임워크란?
  • [Spring] Spring JAR 파일 다운로드 받기
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    부스트캠프 멤버십
    os
    자바스크립트
    오류해결
    자바
    파이썬
    Git
    MySQL
    java
    부스트캠프
    jsp
    웹개발
    Spring
    운영체제
    알고리즘
    스프링
    부스트캠프 7기
    GitHub
    스프링부트
    Python
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[Spring] 스프링 프레임워크 의존관계
상단으로

티스토리툴바