Spring Boot(Test, ApplicationContext, Builder패턴(디자인패턴))

Lee Yong Seok·2022년 8월 2일
0
post-thumbnail

Test

  1. https://mvnrepository.com/ 으로 이동한다.

  1. 검색창에 boot start test라고 입력한다.

  1. 버전상관없이 Gradle(Short) 를 복사해온다.

  1. build.gradle 의 dependencies에 추가해준다.(버전은 지우면 알아서 맞춰준다.)

  1. dependency를 추가했다면 반드시 Gradle을 Refresh 해줘야한다.

  1. 테스트를 하기 위한 패키지 com.simple.basic.test 를 생성한다.

  1. 패키지 아래에 테스트 클래스를 생성한다.

  1. SpringBoot 는 이 클래스가 테스트를 위한 클래스라는것을 알려주기위해 @SpringBootTest 라는 어노테이션을 입력해주어야한다.

  1. 테스트를 위한 간단한 test 메서드를 만든 후 출력해보자.

  1. 테스트를 재실행하고 싶다면 아래 해당 버튼을 클릭한다.

ApplicationContext 란?

ApplicationContext를 스프링 컨테이너라고 한다. ApplicationContext는 BeanFactory 인터페이스의 하위 인터페이스이다. 즉, ApplicationContext는 BeanFactory에 부가기능을 추가한 것이다.
BeanFactory는 스프링 컨테이너의 최상위 인터페이스이다. 스프링 빈을 관리하고 조회하는 역할을 한다. ApplicationContext는 BeanFactory + 부가 기능(국제화 기능, 환경 변수 관련 처리, 애플리케이션 이벤트, 리소스 조회)을 가진다.
정확히는 스프링 컨테이너를 부를 때, BeanFactory, ApplicationContext를 구분해서 말하지만, BeanFactory를 직접적으로 사용하는 경우는 거의 없다. 왜냐하면 ApplicationContext가 BeanFactory의 모든 기능을 가지고 있기 때문이다.
ApplicationContext의 구현체가 여러가지 있는데, 구현체에 따라 스프링 컨테이너를 XML을 기반으로 만들 수도 있고, 자바 클래스로 만들 수도 있다. 이게 가능한 이유는 빈 등록을 BeanDefinition으로 추상화해서 생성 하기 때문이다. XML로 하든, 자바로 하든 BeanDefinition이 생성된다.
스프링 컨테이너 내부에는 빈 저장소가 존재한다. 빈 저장소는 key로 빈 이름을 가지고 있으며, value로 실제 빈 객체를 가지고 있다.
스프링 컨테이너는 기본적으로 빈을 싱글톤으로 관리해준다. 따라서 싱글톤 컨테이너라고 불리기도 한다. 스프링 컨테이너가 빈을 싱글톤으로 관리해주면서 기존 싱글턴 패턴의 문제점(싱글톤 패턴 구현을 위한 코드가 추가되어야함, 구체 클래스에 의존, 유연성이 떨어짐 등등..)은 없어지고, 싱글톤의 장점(매번 인스턴스를 생성할 필요없이 단 하나만 생성해서 비용을 줄일 수 있다.)만 가져갈 수 있다.

  1. ApplicationContext는 springframework의 interface이다.

  1. ApplicationContext를 사용하고 싶을 때는 아래와 같이 빈을 생성해야하는데 @Autowired 어노테이션을 사용해주면 = 을 기준으로 우측의 코드는 굳이 써줄 필요가 없어진다.(springframework가 알아서 바인딩해주기 때문이다.)
  • GenericXmlApplicationContext : XML로부터 객체 설정 정보를 가져온다.
  • AnnotationconfigApplicationContext : 자바 어노테이션을 이용한 클래스로부터 객체 설정 정보를 가져온다.

  1. ApplicationContext 인터페이스에 있는 DataSource 인터페이스의 구현클래스를 불러와서 데이터베이스에 연결해보자.

  1. JUnit Test 로 연결이 되었는지 확인한다.

** DataSource 를 이용하여 데이터베이스에 연결하려면 당연히 application.properties 에 driver, url, username, password를 입력해주어야한다.

Builder패턴(디자인패턴)

  1. Builder패턴을 사용하기 위해 Vo 패키지 command를 생성한다.

  1. BuilderVo 를 생성한다.

  1. BuilderVo 클래스에 멤버변수와 내부 클래스를 만들고 내부 클래스에 변수와 생성자를 만든다.(기본 생성자를 만들어서 밖에서 호출이 불가능하도록 해준다.)

  1. BuilderVo 메서드를 생성해서 Builder 클래스에 있는 name, age 메서드를 가져와서 BuilderVo 클래스의 멤버변수에 저장한다.

  1. 내부클래스인 Builder 클래스에 접근하기위해 builder 메서드를 만들어준다.

  1. 테스트를 하기위해 TestCode1 클래스를 생성하고 BuilderVo의 builder 메서드를 사용하기위해 BuilderVo를 import 한다.

  1. 내부클래스인 Builder 클래스에 변수 name과 age에 값을 저장할 수 있는지 확인한다.

  1. 내부클래스 안에 저장되어있는 값을 BuilderVo에 있는 멤버변수로 옮겨주기위해 build 메서드의 this를 BuilderVo의 파라미터로 전달하기위해 입력한다.

  1. BuilderVo 클래스의 멤버변수를 출력하기 위해 toString을 Override 해준다.

  1. 내부클래스인 Builder 클래스에 name, age 변수에 저장된 값을 build() 메서드를 통해 BuilderVo 클래스의 멤버 변수에 저장하고 출력테스트를 한다.

  1. 테스트 코드를 한줄로 줄여보자.

lombok.jar 다운로드

  1. https://projectlombok.org/download 로 이동한다.
  2. Download 1.18.24 를 클릭해서 lombok.jar 를 다운로드 받는다.

  1. 아래와 같은 화면이 바로 뜰 수도 있지만, 그렇지 않다면 아래와 같은 방법으로 jar 를 실행시켜보자.

** 바로 뜬 화면

** 따로 실행시켜야하는 화면

  1. lombok.jar 를 실행하기위해 STS4 실행파일의 경로를 잡아준다.

  1. 방금 추가한 STS4 실행파일만 체크한 상태로 Install/Update 버튼을 클릭한다.

  1. Quit Installer 버튼을 클릭한다.

  1. lombok이 STS4에 잘 다운로드 되었는지 확인을 위해 BuilderVo2 클래스를 생성한다

  1. BuilderVo2 클래스의 멤버변수 name과 age만 만들고 lombok 어노테이션을 이용하여 Builder 패턴을 import하고 ToString까지 import 한다.

  1. TestCode에 BuilderVo2 클래스를 이용하여 이전과 똑같이 테스트를 해보자.
  2. @Builder 어노테이션을 썼음에도 builder() 메서드가 컴파일 에러라면 STS4 를 껏다가 다시켜보자.

  1. 그래도 컴파일 에러라면 다시 @Builder 를 import 해준다.

  1. 아래와 같이 컴파일 에러가 사라진것을 확인할 수 있다.(이클립스의 에러라 이런식으로 해결할 수 밖에 없다.)

  1. JUnit Test 를 해보자.

profile
Today I Learned 🌙

0개의 댓글