생성자를 주입하면 final 키워드를 사용할 수 있어 안정성을 부여할 수 있다.
package com.example.ex00.dependency;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import lombok.Data;
import lombok.Getter;
@Component
@Getter
public class Coding {
// 생성자 주입
// 순환 참조 시 컴파일러가 인지 가능, 오류 발생
// 메모리에 할당하면서 초기값으로 주입되므로 final 키워드 사용가능, 다른 곳에서 변형 불가능(안정성)
// 의존성 주입이 되지 않으면 객체가 생성되지 않으므로
@Autowired
private final Computer computer;
public Coding(Computer computer) {
super();
this.computer = computer;
}
}
그런데 이렇게 진행하면 매번 초기화를 해줘야하는 불편함이 있음
이를 해결하기 위해 모든 생성자를 초기화하는 AllArgsConstructor를 사용
package com.example.ex00.dependency;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Component
@Getter
@AllArgsConstructor //생성자 주입 시 초기화 과정을 매번 하지 않도록 도와줌. 모든 생성자를 초기화함
public class Coding {
// 생성자 주입
// 순환 참조 시 컴파일러가 인지 가능, 오류 발생
// 메모리에 할당하면서 초기값으로 주입되므로 final 키워드 사용가능, 다른 곳에서 변형 불가능(안정성)
// 의존성 주입이 되지 않으면 객체가 생성되지 않으므로
// @Autowired
private final Computer computer;
//
// public Coding(Computer computer) {
// super();
// this.computer = computer;
// }
}
AllArgsConstructor는 모든 생성자를 초기화해서 주입하기 때문에, 필요한 생성자만 초기화하고 싶다면 RequiredArgsConstructor를 사용
package com.example.ex00.dependency;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Component
@Getter
//@AllArgsConstructor //생성자 주입 시 초기화 과정을 매번 하지 않도록 도와줌. 모든 생성자를 초기화함
@RequiredArgsConstructor //필요한 생성자만 초기화해줌
public class Coding {
// 생성자 주입
// 순환 참조 시 컴파일러가 인지 가능, 오류 발생
// 메모리에 할당하면서 초기값으로 주입되므로 final 키워드 사용가능, 다른 곳에서 변형 불가능(안정성)
// 의존성 주입이 되지 않으면 객체가 생성되지 않으므로
// @Autowired
private final Computer computer;
//
// public Coding(Computer computer) {
// super();
// this.computer = computer;
// }
}