μ€νλ§μ DI λ°©λ²
DI
- λ³κ²½μ μν΄ μν₯μ λ°λ κ΄κ³
1. μμ±μ μ£Όμ (Constructor Injection)
@Service
public class StationConstructorService {
private StationRepository stationRepository;
public StationConstructorService(StationRepository stationRepository) {
this.stationRepository = stationRepository;
}
public String sayHi() {
return stationRepository.sayHi();
}
}
μ€νλ§ 4.3 λΆν°λ λ¨μΌ μμ±μμΈ κ²½μ° μμ±μμ @Authowired
λ₯Ό λΆμ΄μ§ μμλ λλ€.
2. νλ μ£Όμ (Field Injection)
@Service
public class StationFieldService {
@Autowired
private StationRepository stationRepository;
public String sayHi() {
return stationRepository.sayHi();
}
}
νλμ @Autowired
μ΄λ
Έν
μ΄μ
μ λΆμ¬μ€λ€.
3. μμ μ μ£Όμ (Setter Injection)
@Service
public class StationSetterService {
private StationRepository stationRepository;
public String sayHi() {
return stationRepository.sayHi();
}
@Autowired
public void setStationRepository(StationRepository stationRepository) {
this.stationRepository = stationRepository;
}
}
setterλ₯Ό ν΅ν΄ μμ‘΄μ±μ μ£Όμ
νλ λ°©λ²μΌλ‘ setterμ @Autowired
μ΄λ
Έν
μ΄μ
μ λΆμ¬μ€λ€.
νλ μ£Όμ λμ μμ±μ μ£Όμ μ κΆκ³ νλ μ΄μ
μΈν
리μ μ΄μμ νλ μ£Όμ
μ μ¬μ©ν κ²½μ° μμ±μ μ£Όμ
μΌλ‘ λ³κ²½ν κ²μ κΆκ³ νλ€.
κ·Έ μ΄μ λ 무μμΌκΉ?
μν μ°Έμ‘°λ₯Ό λ°©μ§ν μ μλ€.
κ·Ήλ¨μ μΈ μλ‘ κ°μ²΄ Aκ° κ°μ²΄ Bλ₯Ό μ°Έμ‘°νκ³ , λ€μ κ°μ²΄ Bκ° κ°μ²΄ Aλ₯Ό μ°Έμ‘°νλ€κ³ νμ.
λ¨Όμ νλ μ£Όμ μ κ²½μ° μν μ°Έμ‘°μμ μ΄λ€ λ¬Έμ λ₯Ό μΌμΌν€λμ§ λ³΄κ² λ€.
@FunctionalInterface
public interface GameService {
void gameMethod();
}
@Service
public class GameServiceImpl implements GameService {
@Autowired
private PieceService pieceService;
@Override
public void gameMethod() {
pieceService.pieceMethod();
}
}
@FunctionalInterface
public interface PieceService {
void pieceMethod();
}
@Service
public class PieceServiceImpl implements PieceService {
@Autowired
private GameServiceImpl gameServiceImpl;
@Override
public void pieceMethod() {
gameServiceImpl.gameMethod();
}
}
ν μ€νΈ
μμ κ°μ΄ κ°λ¨ν ν
μ€λ₯Ό ν΄λ³΄μμ λ, μ ν리μΌμ΄μ
ꡬλμ μ λμ§λ§ μλ‘μ λ©μλλ₯Ό κ³μν΄μ νΈμΆνκ³ μκΈ° λλ¬Έμ StackOverflowError
κ° λ°μνλ€.
μ΄μ¨λ μν μ°Έμ‘°κ° μΌμ΄λ¬μμλ μ€νλ§ μ»¨ν
μ΄λκ° λμνλ μ ν리μΌμ΄μ
μ체λ λ¬Έμ μμ΄ κ΅¬λλλ€.
κ·Έλ λ€λ©΄ μμ±μ μ£Όμ μ κ²½μ°λ μ΄λ ν κΉ?
@Service
public class GameServiceImpl implements GameService {
private final PieceServiceImpl pieceService;
public GameServiceImpl(PieceServiceImpl pieceService) {
this.pieceService = pieceService;
}
@Override
public void gameMethod() {
pieceService.pieceMethod();
}
}
@Service
public class PieceServiceImpl implements PieceService {
private final GameServiceImpl gameServiceImpl;
public PieceServiceImpl(GameServiceImpl gameServiceImpl) {
this.gameServiceImpl = gameServiceImpl;
}
@Override
public void pieceMethod() {
gameServiceImpl.gameMethod();
}
}
λ‘κ·Έλ‘ μνμ°Έμ‘°κ° μΌμ΄λκ³ μμμ 보μ¬μ£Όλ©΄μ 컨ν μ΄λκ° λΉλ€μ λ±λ‘νμ§λ λͺ»νμ±, μ ν리μΌμ΄μ ꡬλ μ체λ μ€ν¨νμλ€.
μ¬κΈ°μ μ΄λ° μ°¨μ΄μ μ 보μ΄λ μ΄μ λ νλ μ£Όμ κ³Ό μμ±μ μ£Όμ μ λΉμ μ£Όμ νλ μμμ μ°¨μ΄κ° μκΈ° λλ¬Έμ΄λ€.
νλ μ£Όμ
μ λΉμ μμ± ν μ΄λ
Έν
μ΄μ
μ΄ λΆμ νλμ ν΄λΉνλ λΉμ μ°Ύμμ μ£Όμ
νλ€.
λΉ μμ±μ΄ λ¨Όμ μΌμ΄λκ³ , νλμ λν μ£Όμ
μ μννλ κ²μ΄λ€.
μμ±μ μ£Όμ
μ μμ±μλ‘ κ°μ²΄λ₯Ό μμ±νλ μμ μ νμν λΉμ μ£Όμ
νλ€.
λ¨Όμ λΉμ μμ±νμ§ μκ³ , μμ±μμ μΈμμ μ¬μ©λλ λΉμ μ°Ύκ±°λ λΉ ν©ν°λ¦¬μμ λ§λλ μμμ΄λ€.
λλ¬Έμ κ°μ²΄ μμ± μμ μ λΉμ μ£Όμ
νλ μμ±μ μ£Όμ
μ μν μ°Έμ‘°μ λν μ€λ₯λ₯Ό κ²ͺμ μ μλ€.
μνλ μ°Έμ‘° κ΄κ³λ₯Ό κ°μ§λ κ°μ²΄λ€μ΄ μμ±λμ§ μμ μμ μμ λΉμ μ°Έμ‘°νκΈ° λλ¬Έμ΄λ€.
μ΄λ κ² λ³΄λ©΄ μ΄μ°λλ μ ν리μΌμ΄μ
μ ꡬλ μν€λ νλ μ£Όμ
μ΄ λ μ’λ€κ³ μκ°ν μ μλ€.
νμ§λ§ κ°μ²΄μ μν μ°Έμ‘°κ° μΌμ΄λλ€λ κ²μ μ μ΄μ μλͺ»λ μ€κ³λΌκ³ ν μ μλ€.
λλ¬Έμ μ€νλ € μμ±μ μ£Όμ
μ μ¬μ©νμ¬ μν μ°Έμ‘°κ° λλ μ€κ³λ₯Ό λ§μ μ μλλ‘ νμ.
Immutable
νλ μ£Όμ
κ³Ό μμ μ μ£Όμ
μ ν΄λΉ νλλ₯Ό final
λ‘ μ μΈν μ μλ€.
μ¦ κ°λ³ κ°μ²΄λ‘λ§ μ¬μ©μ΄ κ°λ₯ν κ²μ΄λ€.
νμ§λ§ μμ±μ μ£Όμ
μ νλλ₯Ό final
λ‘ μ μΈν μ μλ€.
μ΄λ‘ μΈν΄ κ°λ³ κ°μ²΄λ‘ μΈν΄ λ°μν μ μλ μ€λ₯λ₯Ό μ¬μ μ λ§λλ€.
μ°Έκ³
μ€νλ§ - μμ±μ μ£Όμ μ μ¬μ©ν΄μΌ νλ μ΄μ , νλμΈμ μ μ΄ μ’μ§ μμ μ΄μ