본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 68일차 (2)(의존성 주입 테스트, 스프링이 동작하면서 생기는 일)

생각보다 환경구성이 길었습니다.. 프레임워크를 가져다 쓰는건 어렵군요.

[의존성 주입 테스트]

1. 의존성 주입 테스트를 위해서는 pom.xml 을 변경하여야 하는데, 해당 내용은 전 게시글에 첨부파일에 포함되어 있습니다.

추가해야 하는 pom

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${org.springframework-version}</version>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.18.0</version>

<scope>provided</scope>

</dependency>

수정해야 하는 pom

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version><!-- 기존에 있던 4.7에서 변경 -->

<scope>test</scope>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.17</version><!-- 기존에 있던 1.2.15는 comment 처리 -->

</dependency

2. Chef.java 클래스를 생성합니다.

org.zerock.sample.Chef.java

3. Restaurant.java 클래스를 생성합니다.

org.zerock.sample.Restaurant.java

1) 어노테이션의 기능들은 해당 주석을 참고하세요. 이 어노테이션들을 사용하기 위해

환경설정 고생한 거 같습니다..

4. XML 을 이용하는 의존성 주입 설정을 합니다.

1) 스프링에서 관리되는 객체 : 빈(Bean)

2) 설정 : XML 과 자바를 이용하는 방법

3) default : XML 을 이용해서 의존성 주입

4) root-context.xml : 빈을 설정하는 설정 파일

root-context.xml 에 해당 밑줄내용을 입력하세요.

<context:component-scan base-package="org.zerock.sample"></context:component-scan>

5. root-context.xml 밑을 보시면 Namespaces 에서 context 를 체크하시고 Beans Graph에서 해당 그림처럼 나오는지 확인하십시오.

root-context.xml Namespaces, Beans Graph

이제 테스트 코드를 통해서 의존성 주입을 확인하는 시간입니다.

[스프링이 동작하면서 생기는 일]

1. src/test/java 밑에 org.zerock.sample.SampleTests.java 클래스를 생성한 뒤 아래 내용을 입력하세요

org.zerock.sample.SampleTests.java

1) 각 문구에 대한 해석은 주석에 있습니다.

2) 콘솔을 보시면 정상적으로 테스트가 실행되어 Chef 객체가 restaurant 객체에 주입되었음을

확인할 수 있습니다.)

3) 즉, 객체를 생성한 적이 없는데 객체가 만들어졌다는 점을 보아 Restaurant 클래스의 @Data 어노테이션이

Lombok을 이용해서 여러 메소드를 만들어, Restaurant 객체의 Chef 인스턴스 변수에 Chef 객체가

주입되었음을 확인할 수 있는겁니다.

JDK8부터 onMethod_ 이렇게 쓴다는 얘기입니다.

2. Lombok 관련

1) 컴파일 시 흔하게 코드를 작성하는 기능들을 완성해주는 라이브러리

2) @Setter : setter 메소드를 만들어주는 역할

3) @Data

(1) @ToStrign, @EqualsAndHashCode, @Getter/@Setter,@RequiredArgsConstructor를 모두

결합한 상태

4) @Log4j : 로그 객체를 생성

3. Spring 관련

1) @Component : 해당 클래스가 스프링에서 객체로 만들어서 관리하는 대상임을 명시하는 어노테이션

2) @Autowired : 스프링 내부에서 자신이 특정한 객체에 의존적이므로 자신에게 해당 타입의 빈을

주입해주라는 표시

4. 테스트 관련

1) @ComponentConfiguration

(1) 스프링이 실행되면서 어떤 설정 정보를 읽어들여야 하는지를 명시

(2) 속성

ㄱ ) locations : 문자열의 배열로 XML 설정 파일을 명시

ㄴ) classes : @Configuration 이 적용된 클래스를 지정

2) @RunWith : 테스트 시 필요한 클래스를 지정

3) @Test : JUnit 에서 해당 메서드가 JUnit 상에서 단위 테스트의 대상인지를 알려줌

[스프링 4.3이후 단일 생성자의 묵시적 자동 주입]

1. 생성자 주입

1) 생성자를 통해서 처리

2) 기존에는 @Inject 나 @Autowired, @Resource 등을 이용해서 주입에 대한 정보를 어노테이션으로 설정

3) 스프링 4.3이후에는 단일 파라미터를 이용하는 생성자에 한해서 특정 타입의 객체를 자동으로 주입 가능

단일 파라미터이므로 @Autowired가 없습니다.

4) @AllArgsConstructor 어노테이션으로 클래스에 존재하는 모든 필드에 대한 생성자를 자동으로 생성가능합니다.

https://dingue.tistory.com/14

 

lombok 기능정리 (2) - @Getter/@Setter , @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

@Getter/@Setter 필드에 @Getter나 @Setter를 붙인다면, lombok이 해당 필드에 대한 기본 getter/setter를 생성해줍니다. 기본적인 getter란 단순히 필드를 리턴하는 것을 말하며, 필드 이름이 foo라면 메소드 이..

dingue.tistory.com