1.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
1) 의존성 (Dependency), 의존 관계
예시)
갤럭시폰 음량 조절을 하려면 갤럭시워치를 통해 해야 한다고 가정 해보자.
그렇게 되면, 갤럭시폰 클래스 내부에 갤럭시워치가 멤버로 존재 하게 된다.
또한, 갤럭시폰은 갤럭시워치 객체 없이는 메서드 수행이 불가능 하다.
즉, 의존 관계가 되었다 !
2) 의존주입 (DI, Dependency Injection)
== 의존성주입
갤럭시폰은 갤럭시워치를 주입 받아야 한다.
즉, new 키워드를 통해 초기화를 해야 한다.
(생성자 호출을 해야 한다 ~)
>> 생성자를 주입 시키던가 ! (자바 때 이렇게 했다)
>> setter을 주입 시키던가 ! (JSP 때 이렇게 했다)
Spring은 무슨 방법으로 ?
>> 그때 그때 유리한 방법으로 둘다 사용 한다 ~
>> Contructor Injection
>> Setter Injection
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
2.
NoSuchBeanDefinitionException
>> NBD
해당하는 이름의 객체가 없다는 에러 이다.
3.
https://hwanii96.tistory.com/298
Spring 프레임워크 기본 개념 (개요)
[ Spring 프레임워크 개요 ] (만든사람 왈 : 개발자에게 봄이 왔어,, 해서 Spring 이라고,,) 1. SpringBoot >> Spring을 기반으로한 자체 프레임워크. (구식이라 사용을 안하긴 하지만, Spring을 기반으로 하기
hwanii96.tistory.com
에서, 9번째 내용의 글을 보면,
객체를 생성할 때, 자바에서 직접 new 하지 않고,
.xml 파일에서, <bean> 태그를 사용해서, new를 표현 할 수 있다고 했다.
예시)
<bean class = "패키지명.GalaxyPhone" id = "galaxy"/>
위의 .xml 파일 내부의 코드는 아래의 코드와 동일한 코드 이다.
GalaxyPhone galaxy = new GalaxyPhone();
------------------------------------------------------------------------------------
<bean class = "패키지명.IPhone" id = "apple"/>
위의 .xml 파일 내부의 코드는 아래의 코드와 동일한 코드 이다.
IPhone apple = new IPhone();
------------------------------------------------------------------------------------
즉, <bean> 태그를 사용해서, new를 표현 할 수 있다.
(개발자 대신에 new를 해준다)
4.
.xml 파일에서 <bean> 태그를 사용하는 방법도 있지만,
자바에서 @어노테이션을 통해 객체를 생성 할 수 있는 방법이 있다.
두가지 방법 모두를 자유자재로 쓸 줄 알아야 한다.
@어노테이션을 추가 하는 방법은 다음과 같다.

.xml 파일 내부를 들어가보자.
아래의 이미지를 보면, 여러가지의 스키마가 보이고,
이미 스프링 플러그인을 설치했으므로,
여러가지의 라이브러리 사용이 가능 하다.

Namespaces 를 클릭 하고,
context 를 클릭 하고 저장 하기.
그러면, Source에 context를 클릭하고 나서 필요한 코드가 자동으로 추가 되어 있다.


<context:component-scan base-package="패키지명" />
그리고, 위의 코드는, 어노테이션이 읽을 수 있는 범위를 지정 해주는 것이다.
패키지명 입력을 해줘야지, 어노테이션이 해당 패키지를 읽을 수 있게 된다.
[ 참고 ]
component-scan 이라는 기능의 엘리먼트 (태그) 를 꺼내서 사용 한다.
component ? == Bean == 모듈 == 위젯
(독자적인 기능을 가진 애들을 위와 같이 말할 수 있다)
(사실, 조금씩 의미가 다르긴 한데, 일단 이렇게 정리하고 넘어가기)
5.
.xml ( <bean> )
하고,
@ (어노테이션)
의 특징은 다음과 같다.
.xml ( <bean> )
1) 코드가 길어질 경우, .xml 파일의 설정이 과도해진다.
2) 코드가 길어질 경우, 가독성이 떨어진다.
3) 코드가 길어질 경우, 구조 파악이 어려워진다.
4) .xml 파일을 수정하는것이기에, 파일 내부를 수정 하더 라도,
재컴파일을 하지 않아도 되는 장점을 가진다.
@ (어노테이션)
설정을 .java에서 할 수는 없을까 ? 해서 탄생한 개념 이다.
1) JAVA의 구조파악이 쉬워 진다.
2) .xml 파일의 코드가 줄어 즌다.
3) .xml 파일의 코드가 줄어듬에 따라, 가독성이 좋아 진다.
4) .java 파일을 수정하는것이기에, 파일 내부를 수정 하게 되면,
재컴파일을 해야 하는 단점을 가진다.
[ 결론 ]
객체를 생성할 때, .xml ( <bean> )
방법과,
@ (어노테이션)
을 번갈아가며 자유자재로, 적재적소에 잘 사용 할 줄 알아야 한다.
6.
@Component("참조변수명") || @Component
>> 사실, 괄호는 필요없긴 하다.
>> 하지만, 객체화 될 때, 참조변수가 필요하면, 명시해 주면 된다.
@Autowired
// 나에게 해당하는 자료형이 메모리에 있어 ?
// 그러면 나에게 DI (의존주입) 해줘 ~
// 멤버변수 의 참조변수에 해당 자료형의 객체를 set 하는 느낌으로 생각 하기.
정리 :
@Autowired 어노테이션을 사용하면,
스프링 컨테이너가 해당 어노테이션이 붙은 멤버, 메서드, 또는 생성자의
파라미터 타입에 맞는 객체를 찾아서 자동으로 객체를 주입 한다.

위와 같이, 멤버변수로 사용된 RemoteControl 인터페이스가 있을 때,
이 멤버변수의 자료형에 맞는 객체를 찾아서 자동으로 객체를 주입 한다.
<bean class = "패키지명.클래스명 (자료형)" id = "참조변수명" />
<bean> 태그 내부의 클래스명. 즉, 자료형이 interface를 구현한 클래스 라면,
자료형이 부합되기 때문에, 그 클래스를 객체화 해서 자동으로 객체를 주입 해준다.
참조변수명은 id 속성값에 붙은 값에 명시해줄 수 있다.
7.
컨테이너 (Container)
== 객체를 생성하는 주체.
== 개발자가 (.xml) 설정만 해주면, new를 스스로 관리 한다.
== "객체 생성 및 관리를 스스로 처리" 한다.
applicationContext.xml
아주 매우 엄청 큰 프로젝트 라도,
프로젝트 1개당 특정 기능 설정을 하는,
.xml 파일은 1개만 생성 해서 사용 해야 한다.
'Spring 프레임워크 > 이론' 카테고리의 다른 글
Spring MVC 패턴의 구조 파악 (Model 파트) (0) | 2023.08.02 |
---|---|
Spring MVC 패턴의 구조 파악 (Controller 파트) (0) | 2023.08.02 |
IoC 로 객체를 호출 하기 (어노테이션 & .xml) (0) | 2023.08.01 |
Spring 프레임워크 기본 개념 (개요) (0) | 2023.07.31 |
Spring 프레임워크 설치 및 기본 세팅 (0) | 2023.07.31 |