Framework/Spring

Spring 기초 용어 정리

DH_PARK 2024. 9. 19. 11:06

스프링 Bean 이란?

스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 Bean을 관리한다.

빈은 인스턴스화된 객체를 의미하며 , 스프링 컨테이너에 등록된 객체를 bean이라고 함. = new 키워드 대신 사용한다고 생각하면 된다 !

메서드에 붙여 반환되는 객체를 Bean으로 관리할 때 사용한다.

스프링 컨테이너란 ?

스프링 빈과 수명주기를 관리하며 , 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다.

원래라면 new 연산자로 객체를 생성하고 소멸시키지만 스프링 컨테이너를 사용하면 해당역할을 대신해준다.

IOC 컨테이너란 ? (제어 반전)

스프링 으로 객체를 생성하고 의존성을 관리해주는 컨테이너

인스턴스의 생성 - 소멸 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다. 그렇기에 개발자는 로직에 집중할 수 있게 된다.

제어 반전 : 제어권을 개발자에서 스프링 프레임워크로 이동시키는것

Spring Context 란?

Bean 의 확장 버전으로 스프링이 Bean 을 다루기 쉽게하기 위해 기능들이 추가된 공간이다. 단순히 Bean 을 다루는것 외에도 추가적인 기능을 수행한다.

=대충 컨테이너 안에 context , context 안에 bean 이라고 생각하셈 container > context > Bean

java bean vs spring bean 의 차이 ?

java bean은 필드 , 전달 인자가 없는 생성자 , getter 와 setter 로만 접근 , 관리하는 자바 객체

spring bean은 스프링 IOC 컨테이너에서 관리되는 자바 객체를 스프링 빈이라고 함.

Spring Annotation(어노테이션,@) 이란 ?

사전적 정의는 주석이라는 뜻이지만 Java 에서는 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술이다.

어노테이션을 사용하면 코드가 깔끔해지고 , 재사용이 가능해진다.

스프링에서 @Component 란 ?

import 비슷한 역할같긴한데,, 다른 패키지에 있는 class 파일이랑 연결시켜서 코드를 간결하게 만들어주는 역할인것 같음.

pacman class 에 컴포넌트하면 Gamerunner class에서 run 했을 때

pacman 의 기능이 실행되고 다른 게임 class에 하면 또 다르게 됨.

코드를 간단하게 해줌.

클래스에 붙여 해당 클래스 타입을 기반으로 빈을 관리

 

그럼 Component Scan 이란?

  • 빈으로 등록 될 준비를 마친 클래스들을 스캔하여, 빈으로 등록해주는 것이다.
  • 빈으로 등록 될 준비를 하는 것이 무엇일까?
  • 우리가 @Controller, @Service, @Component, @Repository 어노테이션을 붙인클래스들이 빈으로 등록 될 준비를 한 것이다.
  • 기본적으로 @Component 어노테이션을 빈 등록대상으로 포함함.
  • 패키지 주소를 따로 명시하지 않는다면 현재 패키지를 기준으로 스캔한다

 

스프링이 객체를 만들게 하려면 ?

 

스프링이 관리하는 bean 프레임워크를 모두 나열하려면 어떻게 해야하나 ?

 	Arrays.stream(context.getBeanDefinitionNames()).forEach(System.out::println); //메서드 참조

 

스프링 프레임워크가 우선순위를 부여하도록 하는 방법?

Primary 어노테이션을 지정해서 어떤 후보가 가장 중요한지 나타낼 수 있음.

@Qualifier 어노테이션(한정자) : 사용할 의존 객체를 선택할 수 있도록 해준다.

 

 

@Primary 와 @Qualifier 의 차이 ?

  • Primary : 같은 타입 빈 2개이상 생성할 때, 하나의 빈에게 더 높은 선호도 부여
  • Qualifier : 특정한 Bean을 사용해야 할때 지정 , 프라이머리보다 우선순위 높음
  •  

@Autowired 란 ?

필요한 의존 객체의 “타입”에 해당하는 빈을 찾아 주입한다

  • 생성자 (가장 권장되는 방법)
  • setter
  • 필드

위의 3가지의 경우에 사용가능.

기본값이 True 라서 의존성 주입 대상 못찾으면 Run에 실패한다.

 

의존성 주입이란 ?

객체가 사용(의존)할 파라미터를 외부에서 선언하고, 이를 주입받아서 사용하는 방법!

 

컴포넌트와 Bean의 차이

대부분의 경우에는 컴포넌트를 사용함

  • Bean 특징
    • 커스텀 로직을 만들어야 할 때 사용함
    • 코드를 일일히 다 작성해야함
    • 메소드 호출이나 메소드의 파라미터를 받아서 사용함
  • 컴포넌트
    • 사용이 매우 쉬움 클래스에 어노테이션만 붙여서 쓰면 됨
    • 생성자 , 필드 , setter 로 자동와이어링 함