

์๋ ๋์๊ฒ ์คํ์ค๋ฒํ๋ก์ฐ์๋ฌ๋ผ๋;; ๋๋ฌด ๋นํฉ์ค๋ฝ๊ณ ..
๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ํธ์ถ ์คํ์ ์ ์คํ ํ๋ ์์ด ์์ฑ๋๋ค.
์ด ์คํ ํ๋ ์์ ํธ์ถ๋ ๋ฉ์๋์ ๋งค๊ฐ ๋ณ์, ๋ก์ปฌ ๋ณ์ ๋ฐ ๋ฉ์๋์ ๋ฐํ ์ฃผ์, ์ฆ ํธ์ถ๋ ๋ฉ์๋๊ฐ ๋ฐํ๋ ํ ๋ฉ์๋ ์คํ์ด ๊ณ์๋์ด์ผ ํ๋ ์ง์ ์ ํฌํจํฉ๋๋ค.
์คํ ํ๋ ์ ์์ฑ์ ์ค์ฒฉ๋ ๋ฉ์๋ ๋ด์์ ๋ฐ๊ฒฌ๋ ๋ฉ์๋ ํธ์ถ์ ๋์ ๋๋ฌํ ๋๊น์ง ๊ณ์๋๋ค.
์ด ๊ณผ์ ์์ JVM์ด ์ ์คํ ํ๋ ์์ ์์ฑํ ๊ณต๊ฐ์ด ์๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด StackOverflowError ๊ฐ ๋ฐ์ํ๋ค..
JVM์ด ์ด ์ํฉ์ ์ง๋ฉดํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ธ์ ์ข ๋ฃ๋์ง ์์/๋ฌดํ ์ฌ๊ท
์์ฉ ํ๋ก๊ทธ๋จ์ด ์คํ์ด ์์ง๋ ๋๊น์ง ๋ฉ์๋ ๋ด์์ ๋ฉ์๋๋ฅผ ๊ณ์ ํธ์ถํ๋ ์ํฉ์์๋ ๋ฐ์ํ ์ ์๋ค
๋ฉ์๋ ๋ด๋ถ์ ๋ฐฉ๋ํ ์์ ์ง์ญ ๋ณ์๊ฐ ์์ ๊ฒฝ์ฐ.
์์ฉ ํ๋ก๊ทธ๋จ์ด ํด๋์ค ๊ฐ์ ์ํ ๊ด๊ณ๋ฅผ ๊ฐ๋๋ก ์ค๊ณ๋์์ ๋๋ ๋ฐ์ํ ์ ์๋ค. ์ด ์ํฉ์์ ์๋ก์ ์์ฑ์๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๋์ด ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๊ฒ์ ๋ํ ์ฌ๊ท์ ํ ํํ๋ก ๊ฐ์ฃผ๋ ์ ์๋ค.
์ด ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ๋ ๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ์๋๋ฆฌ์ค๋ ํด๋์ค๊ฐ ํด๋น ํด๋์ค์ ์ธ์คํด์ค ๋ณ์์ ๋์ผํ ํด๋์ค ๋ด์์ ์ธ์คํด์คํ๋๋ ๊ฒฝ์ฐ์ด๋ค. ์ด๋ก ์ธํด ๋์ผํ ํด๋์ค์ ์์ฑ์๊ฐ ๋ฐ๋ณตํด์(์ฌ๊ท์ ์ผ๋ก) ํธ์ถ๋์ด ๊ฒฐ๊ตญ StackOverflowError๊ฐ ๋ฐ์ํ๋ค.
์ฐธ๊ณ : https://recordsoflife.tistory.com/1220
package domain.Order;
import domain.Member.MemberRepository;
import domain.Member.MemberSerivice;
import domain.Member.MemberServiceimpl;
import domain.Member.MemoryMemberRepository;
import jakarta.inject.Provider;
import org.springframework.beans.factory.ObjectProvider;
public class AppConfig {
public MemberSerivice memberSerivice(){
return new MemberServiceimpl(memberRepository());
}
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
public OrderRepository orderRepository(){
return new MemoryOrderRepository();
}
// ์ฌ๊ธฐ๊ฐ ๋ฌธ์
public OrderService orderService(){
return new OrderServiceImpl(orderRepository(), discountPolicy());
}
// ์ฌ๊ธฐ๊ฐ ๋ฌธ์
public DiscountPolicy discountPolicy(){
// ์์ ์
// return new RateDiscountPolicy(orderService());
return new RateDiscountPolicy(); // ์์ ํ
}
}
discountPolicy()์orderService()๊ฐ ์๋ก ์ฌ๊ท์ ์ผ๋ก ํธ์ถ๋ผ์ ๋ฐ์ํ๋ ์๋ฌ์๋ค.
๋์ ๊ฒฝ์ฐ๋discountPolicy()์orderService()๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ด ์ค๋ฅ๋ฅผ ํด๊ฒฐํ์ง๋ง, ๋ง์ฝ์ ์ํ์ฐธ์กฐ๋ฅผ ํด์ผํ ์ํฉ์ด ์๊ธธ ๊ฒฝ์ฐ ๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ์์lazy๋ฅผ ์ด์ฉํ์ฌ ์์ฑ์ ๋ฏธ๋ฃฐ ์ ์๋ค. ํ์ง๋ง ๊ฐ์ฅ ์ข์ ์ค๊ณ ๋ฐฉ๋ฒ์ ์ํ์ฐธ์กฐ ์์ฒด๋ฅผ ์์ ๋ ๊ฒ!