객체화
객체화는 인스턴스화 라고도 부르며 객체 지향 프로그래밍에서 클래스를 기반으로 실제로 동작하는 인스턴스(객체)를 생성하는 과정을 말합니다. new 연산자를 사용하여 메모리(Heap)에 데이터를 저장할 공간을 할당받고 그 공간의 참조값을 객체에게 반환하여 주고 이어서 생성자를 호출합니다.
스프링 프레임워크에서는 IoC를 사용하여 new 연산자를 사용하지 않고 프레임워크를 활용하여 객체화 합니다.
Bean설정 방법
- xml 설정 방식
- 어노테이션(@) 설정 방식
XML 설정 방식
스프링 프레임워크는 applicationContext.xml 파일을 읽어들여 빈을 생성하고 관리합니다. 이를 통해 빈의 생성, 의존성 주입, 스코프 설정, 빈의 생명주기 관리 등을 수행할 수 있습니다. 스프링의 XML 설정 방식은 빈의 구성을 외부에서 관리하고 수정할 수 있어 유지보수가 편리하지만, 설정이 과다하고 가독성이 떨어지며 Java의 구조를 예상하기 여럽습니다.
어노테이션(@) 설정 방식
어노테이션 설정 방식은 Java 클래스 내에서 어노테이션을 활용하여 빈을 정의하고 관리하는 방식입니다. 이 방법은 XML 설정 대신 자바 코드를 이용하여 빈을 설정하므로 가독성이 높고 프로그램 구조를 더욱 유연하게 제어할 수 있습니다.
어노테이션 실습
applicationContext.xml
applicationContext.xml에 <context:componet-scan>을 추가합니다. 이 태그는 컴포넌트 스캐닝(component scanning)을 설정하기 위해 사용하며 base-package 속성을 이용하여 스캐닝할 패키지를 지정합니다. 스캐닝된 패키지와 하위 패키지 내에서 컴포넌트 스캐이을 수행합니다. 이때 @Component, @Service, @Repository, @Controller 등과 같은 어노테이션을 사용하여 표시된 클래스들이 빈으로 등록됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="test" />
<bean class="test.GalaxyPhone" id="gp" />
</beans>
applicationContext.xml
Java 클래스 어노테이션
@Component를 사용하여 GalaxyPhone 클래스를 빈으로 등록하며 빈의 ID를 gp로 설정합니다. 또한 @Autowired를 사용하여 Watch 타입의 빈 의존성을 주입 받습니다.
package test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component("gp")
public class GalaxyPhone implements Phone {
@Autowired
// 나에게 해당하는 자료형이 메모리에 있다면 나에게 DI 해줘!
private Watch watch;
public GalaxyPhone() {
System.out.println("갤럭시폰 기본 생성자 호출됨");
}
public GalaxyPhone(Watch watch) {
this.watch=watch;
System.out.println("갤럭시폰 생성자 호출됨");
}
public void initMethod() {
System.out.println("객체를 처음 생성할때 함께 호출할 메서드");
System.out.println("보통 일반적으로 멤버변수 초기화와 관련된 코드들이 포함되어있음");
}
@Override
public void powerOn() {
System.out.println("전원ON");
}
@Override
public void powerOff() {
System.out.println("전원OFF");
}
@Override
public void volumeUp() {
watch.volumeUp();
}
@Override
public void volumeDown() {
watch.volumeDown();
}
}
GalaxyPhone.java
GitHub
https://github.com/Qkrwnsgus0522/Spring