바닥코딩
코드로 익혀보는 Spring 기초1(의존성 주입과 Bean 객체) 본문
Bean
간단하게 한줄로 요약하자면 자바의 객체입니다. spring container에 의해 자바 객체가 만들어 지게 되면서 이 객체를 스프링 빈이라고 부르게 된것이지만 스프링 빈과 일반 객체와의 차이점은 별다르게 없습니다 그렇지만 Spring container 에서 만들어지는 객체를 스프링 빈이라고 부를 뿐입니다
Spring Bean을 사용하는 이유
그렇다면 자바의 객체를 굳이 bean을 통해 쓰는 이유가 뭐일까 결론부터 이야기 하자면 자주 사용하는 객체를 singleton으로 만들어 놓고 어디서든 불러쓸 수 있도록 한다는 것의 의미가 있습니다 이전 포스팅을 보면 DI(의존성 주입)에 대한 포스팅 내용이 있습니다 의존성 주입은 간단히 말해 모듈간의 결합도를 낮추어 클래스를 수정해야하는 상황을 줄여줍니다 바로 이 과정에서 Spring bean의 활용도가 높아집니다 예를 들어 의존성 주입이 되지 않은 모델은 클래스를 변경해야 하는 상황일떄 직접 다른 연관 클래스를 수정해야 합니다 하지만 di를 사용한다면 개발자는
1.Bean class를 작성한다
2.주입을 위한 xml 설정(spring container 에서는 @어노테이션 기술 사용)
이 두가지 과정을 통해 코드를 수정할 수 있습니다. 해당 포스트 에서는 이 Sprign Bean을 사용해 의존성을 주입하는 방법을 간단한 예제를 통해 만들어 볼겁니다
Code review(의존성 주입 과 Bean)
먼저 spring project를 생성해 줍니다

spring Legacy Project 에서 simple spring maven 을 선택해 프로젝트를 만듭니다

그 다음 src/main/java 폴더에 패키지를 추가해 줍니다

방금 만든 패키지 내부에 Gender라는 인터페이스 하나를 구현해봅니다
package kr.dkkim.spring.di;
public interface Gender {
public void print_gender();
}

그 다음 Man 이라는 클래스를 만들어 봅니다 해당 클래스는 인터페이스를 사용할 거기 때문에 인터페이스를 추가해 줍니다 (직접 implements 해서 오버라이딩 해도 상관없음)
package kr.dkkim.spring.di;
public class Man implements Gender {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public void print_gender() {
// TODO Auto-generated method stub
System.out.println(name+"은 남자입니다");
}
}
Man 클래스에서는 name변수를 만들고 setter를 설정한다음 오버라이딩
package kr.dkkim.spring.di;
public class Woman implements Gender {
private String name;
@Override
public void print_gender() {
// TODO Auto-generated method stub
System.out.println(name+"는 여자 입니다");
}
public void setName(String name) {
this.name = name;
}
}
동일한 방식으로 woman 클래스를 하나 생성해 줍니다

그다음 빈을 설정할 패키지를 하나 더 생성해 보겠습니다

new -> orther 에 들어가 spring Bean Configuration File을 하나 생성해줍니다
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 여기에다 코드 삽입 하면 되여 ~~ -->
</beans>
저는 Bean.xml 이라는 이름으로 파일을 하나 추가 했습니다 그 다음 bean을 통해 아까 만들었던 객체와 연결을 해보겠습니다
<bean id="man" class="kr.dkkim.spring.di.Man">
<property name="name" value="철수"></property>
</bean>
코드 내에 이렇게 작성을 해줍니다 이렇게 한다면 이전에 생성했던 Man 클래스의 name이라는 변수에 철수라는 이름을 주입하게 됩니다 물론 저 코드를 직접 써도 되지만 Woman 클래스에 주입은 더 간결하게 만들어 보겠습니다

xml 파일에서 아래 보이는 beans를 클릭한후 새로은 빈을 생성해줍니다

위와 같이 id를 입력하고 Woman클래슬르 매핑해 줍니다

next를 눈르면 프로퍼티의 이름과 value를 지정할 수 있는데 지정 후 완료를 해주면
<bean id="woman" class="kr.dkkim.spring.di.Woman">
<property name="name" value="영희"></property>
</bean>
해당 내용이 추가가 된 것을 확인할 수 있습니다.
이제 bean을 만들었으니 bean을 활용해 보겠습니다 bean 을 활용해 보기 위해 클래스들과 인터페이스를 정의했던 패키지내에 mainApp 클래스를 하나 추가한 다음 아래 코드를 추가해 보겠습니다
package kr.dkkim.spring.di;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("kr.dkkim.spring.di.bean.bean.xml");
Man man = (Man)context.getBean("man");
man.print_gender();
context.close();
}
}
해당코드를 실행하면 bean 의 원리를 이해할 수 있습니다
'Spring Framework > 스프링 기초' 카테고리의 다른 글
코드로 익혀보는 spring 기초3( AOP) (0) | 2020.02.18 |
---|---|
코드로 익혀보는 spring 기초2(Annotation통해 의존성 주입) (0) | 2020.02.14 |
Spring mybatis (0) | 2020.02.06 |
스프링 프로젝트 오라클 연동 (0) | 2020.02.05 |
스프링 프로젝트의 기본 구조 및 의존성 (0) | 2020.02.04 |