프로그래밍

[Spring] day59 : new 객체화(인스턴스화) 본문

자바/Spring

[Spring] day59 : new 객체화(인스턴스화)

시케 2023. 8. 10. 13:34
728x90
반응형

2023.08.01.화

new 객체화

프로그램의 수행 순서를 제어하거나, 문장들의 수행 횟수를 조정하는 문장

new 한다는 것은 객체화 한다는 것이고

우리는 스프링 프레임워크를 이용하여 IoC(제어의 역행)이 되었기 때문에

직접 new 하지 않고 프레임워크를 활용하여 객체화할 것이다

 

new 하는 법 2가지

1) .xml <bean>
xml의 단점
객체를 생성하는 양에 비해 코드량이 지나치게 많아짐
: 설정 과다
: 가독성이 떨어짐
: 구조 파악(JAVA)이 어려움(자바 구조 예상하기 어려움)

2) @
"설정을 .java에 할 수는 없을까?" 라는 의문과 함께 생긴 방식이다

자바 파일에 설정을 할 수 있다

.xml(설정)이 줄어들어 가독성이 향상된다
JAVA의 구조파악에 도움이 되지만 코드 변경시 재컴파일을 해야한다는 단점이 있다

 

@ 어노테이션 방식으로 객체화

네임스페이스
context 네임스페이스를 추가해야 @을 사용할 수 있다

<context:component-scan base-package="test"></context:component-scan>

context라는 네임스페이스에서
conponent-scan이라는 기능의 엘리먼트(태그)를 꺼내어 사용한다
("test"라는 이름의 패키지를 스캔해줘!~~)

이때 component와 Bean과 모듈과 위젯 모두 같은 의미이다

다음의 세가지 문법 모두 같은 뜻

GalaxyPhone gp = new GalaxyPhone();
<bean class="test.GalaxyPhone" id="gp" />
@Component("gp")


setter 인젝션과 같지만 내부 로직이 조금은 다르지만 거의 같다고 보아도 무관하다

@Autowired

해당 자료형이 메모리에 존재하면 의존성 주입이 된다

즉, 메모리에 존재해야 하며 이는 객체화 했었어야 함을 의미한다

 


[실행 흐름 순서]
@Component
→ 널포인트 예외
: 의존관계를 가진 watch가 DI되지 않았기 때문에 오류발생

@Autowired
 빈 생성 예외
: 메모리에 watch와 "같은 자료형"을 가진 객체가 없어서 오류발생

메모리에 watch와 같은 자료형을 가진 객체를 생성하면?
1) <bean>으로 생성
정상 작동
2) 메모리에 watch와 같은 자료형을 가진 객체가 2개 이상이면?
 bean 생성 예외 발생
: 자료형을 보고 스프링 컨테이너가 작업처리를 하기 때문에

하나의 컴포넌트에 여러번의 변경이 되는 경우에는
xml로 관리한다

※ 그러므로 어노테이션과 xml 방식 모두 혼합하여 사용할 수 있어야 함l

 

https://github.com/jihyean/Spring/tree/main/day59

 

728x90
반응형
Comments