java-version 을 1.6 ⇒ 1.8로 변경, 3.1.1.RELEASE ⇒ 5.0.7.RELEASE로 변경
의존성 주입을 위해서 필요한 라이브러리
1. 의존성 주입(Dependency Injection)이란?
객체 간의 의존성을 관리하는 방법 중 하나로, 코드의 유연성과 재사용성을 높일 수 있다.
객체가 필요한 다른 객체를 스스로 생성하거나 관리하지 않고, 외부에서 주입 받는 것.
1-1. 의존성 주입의 이점
유연성 : 코드 변경 없이 다른 구현체로 쉽게 변경 가능.
테스트 용이성 : 테스트시 더 간단하게 모의 객체를 주입할 수 있다.
결합도 감소 : 종속 객체를 생성하지 않았기 때문에, 서로의 변화에 덜 영향을 받는다.
1-2. 의존성 주입의 방법
자동 주입 (Spring에서 @Autowired 사용)
생성자 주입(권장)
세터 주입
필드 주입
수동 주입 (Spring 에서는 주로 사용X, 다른 프레임워크에서 사용)
인터페이스 주입 등
2. 추가 및 변경 할 라이브러리
2-1. spring-test : Spring의 의존성 주입 기능을 테스트 하기 위해 필요
2-2. lombok : 의존성 주입 시 자주 사용되는 생성자 주입 코드 등을 간단하게 작성하기 위해 필요
@Autowired 가 아닌 다른 방법으로 의존성 주입하는 법(lombok 사용시 가능)
@NoArgsConstructor : 파라미터가 없는 기본 생성자를 생성
항상 초기화가 필요한 final이 붙은 field에 @NoArgsConstructor를 사용한다면 compile error가 발생. 대신, @NoArgsConstructor(force = true)처럼 force라는 옵션에 true 값을 주면, 모든 final fields는 0 / false / null로 초기화된다.
@NonNull 같은 제약이 있는 어노테이션이 붙어있다면, force = true 옵션을 주어도 생성자에 들어가지 않기 때문에 나중에 프로그래머가 필드에 null이 아닌 값을 가지도록 프로그래머가 적절한 시점에 값을 할당해주어야 한다.
@AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 만듦
@RequiredArgsConstructor : final이나 @NunNull인 필드 값만 파라미터로 받는 생성자를 만듦
*프로그래머가 class 내부에 선언된 filed의 순서를 마음대로 바꾸게 되면 에러 없이 작동하지만 실제 입력 값이 달라지는 비즈니스 로직 에러가 생긴다.
그럴 때 @builder 어노테이션을 붙이는 것도 가능하다.
2-3. log4j, JUnit : 버전이 안맞는 다면 교체
*dependencies에 lombok 추가
lombok을 라이브러리에 추가하면 getter/setter/toString 을 번거롭게 따로 만들어 줄 필요가 없다. 간단한 경우에는 필요성을 느낄 수 없을 수도 있지만, 자동 완성을 한다면 유지,보수 측면에서도 좋다.