5. 생성자 주입

홍준성·2022년 7월 21일
0

생성자를 주입하면 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;
//	}
}
profile
준성이의 개발자 공부 velog

0개의 댓글