Spring/Spring ๊ธฐ๋ณธ
์ปจํ
์ด๋์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์กฐํ ์คํ๋ง ์ปจํ
์ด๋์ ์ค์ ์คํ๋ง ๋น๋ค์ด ์ ๋ฑ๋ก ๋์๋์ง ํ์ธํด๋ณด์. ์ปจํ
์ด๋ ์์ฑ public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext ๋ฅผ ์คํ๋ง ์ปจํ
์ด๋๋ผ ํ๋ค. AppConfig.class ๋ฅผ ๊ตฌ์ฑ ์ ๋ณด๋ก ์ง์ ํ๋ค. ๋ชจ๋ ๋น ์ถ๋ ฅํ๊ธฐ @Test @DisplayName("๋ชจ๋ ๋น ์ถ๋ ฅํ๊ธฐ") void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (S..
Spring/Spring ๊ธฐ๋ณธ
์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ ์ง๊ธ๊น์ง ์์ํ ์๋ฐ ์ฝ๋๋ง์ผ๋ก DI๋ฅผ ์ ์ฉํ๋ค. ์ด์ ์คํ๋ง์ ์ฌ์ฉํด๋ณด์. @Configuration public class AppConfig { AppConfig์ ์ค์ ์ ๊ตฌ์ฑํ๋ค๋ ๋ป์ @Configuration ์ ๋ถ์ฌ์ค๋ค. ์คํ๋ง ์ปจํ
์ด๋๋ @Configuration ์ด ๋ถ์ AppConfig ๋ฅผ ์ค์ (๊ตฌ์ฑ) ์ ๋ณด๋ก ์ฌ์ฉํ๋ค. @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } ๊ฐ ๋ฉ์๋์ @Bean ์ ๋ถ์ฌ์ค๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์คํ๋ง ์ปจํ
์ด๋์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค. ์คํ๋ง ์ปจํ
์ด๋ ApplicationContext ๋ฅผ ์คํ๋ง ์ปจํ
์ด๋๋ผ ํ๋ค. ApplicationC..
Spring/Spring ๊ธฐ๋ณธ
IoC, DI, ๊ทธ๋ฆฌ๊ณ ์ปจํ
์ด๋ ์ ์ด์ ์ญ์ IoC(Inversion of Control) ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ์ง์ ์ ์ดํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ์ด์ ์ญ์ (IoC)์ด๋ผ ํ๋ค. public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ํด๋ผ์ด์ธํธ ๊ตฌํ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํ์ํ ์๋ฒ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ฒฐํ๊ณ , ์คํํ๋ค. ๋ฐ๋ฉด์ AppConfig๊ฐ ๋ฑ์ฅํ ์ดํ์ ๊ตฌํ ๊ฐ์ฒด๋ ์์ ์ ๋ก์ง์ ์คํํ๋ ์ญํ ๋ง ๋ด๋นํ๋ค. public class AppConfig { public MemberR..
Spring/Spring ๊ธฐ๋ณธ
๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ ์ ํ๋ฆฌ์ผ์ด์
์ ํ๋์ ๊ณต์ฐ์ด๋ผ ์๊ฐํด๋ณด์. ๊ฐ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋ฐฐ์ญ(๋ฐฐ์ฐ ์ญํ )์ด๋ผ ์๊ฐํ์. ๊ทธ๋ฐ๋ฐ! ์ค์ ๋ฐฐ์ญ ๋ง๋ ๋ฐฐ์ฐ๋ฅผ ์ ํํ๋ ๊ฒ์ ๋๊ฐ ํ๋๊ฐ? ๋ก๋ฏธ์ค์ ์ค๋ฆฌ์ฃ ๊ณต์ฐ์ ํ๋ฉด ๋ก๋ฏธ์ค ์ญํ ์ ๋๊ฐ ํ ์ง ์ค๋ฆฌ์ฃ ์ญํ ์ ๋๊ฐ ํ ์ง๋ ๋ฐฐ์ฐ๋ค์ด ์ ํ๋๊ฒ ์๋๋ค. public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository = new MemoryMemberRepository(); // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy di..
Spring/Spring ๊ธฐ๋ณธ
์๋ก์ด ํ ์ธ ์ ์ฑ
์ ํ์ฅํด๋ณด์. ๊ฐ์๋ฅผ ๋ณด๊ธฐ์ ์ ์ค์ค๋ก ์๋ก์ด ํ ์ธ ์ ์ฑ
( ์ ๋ฅ ํ ์ธ ) ์ผ๋ก ๋ณ๊ฒฝํ๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์๋ค. 1. RateDiscountPolicy ํด๋์ค๋ฅผ ์์ฑํ๊ณ (๊ตฌํ์ฒด ์์ฑ) ์ด๊ฒ์ DiscountPolicy Interface(์ญํ ) ๋ฅผ implements ํ๋ค 2. RateDiscountPolicy ๊ตฌํ์ฒด์ ๋ฉ์๋๋ฅผ ์์ฑํด๋ณด์ ( ์ค๋ฒ๋ผ์ด๋ฉ ) ์ฝ๋ ๋๋ณด๊ธฐ package hello2.demo.discount; import hello2.demo.member.Grade; import hello2.demo.member.Member; public class RateDiscountPolicy implements DiscountPolicy { private double DiscountRat..
Spring/Spring ๊ธฐ๋ณธ
์ฃผ๋ฌธ๊ณผ ํ ์ธ ๋๋ฉ์ธ ์ค๊ณ ์ฃผ๋ฌธ๊ณผ ํ ์ธ ์ ์ฑ
ํ์์ ์ํ์ ์ฃผ๋ฌธํ ์ ์๋ค. ํ์ ๋ฑ๊ธ์ ๋ฐ๋ผ ํ ์ธ ์ ์ฑ
์ ์ ์ฉํ ์ ์๋ค. ํ ์ธ ์ ์ฑ
์ ๋ชจ๋ VIP๋ 1000์์ ํ ์ธํด์ฃผ๋ ๊ณ ์ ๊ธ์ก ํ ์ธ์ ์ ์ฉํด๋ฌ๋ผ. (๋์ค์ ๋ณ๊ฒฝ ๋ ์ ์๋ค.) ํ ์ธ ์ ์ฑ
์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ํ์ฌ์ ๊ธฐ๋ณธ ํ ์ธ ์ ์ฑ
์ ์์ง ์ ํ์ง ๋ชปํ๊ณ , ์คํ ์ง์ ๊น์ง ๊ณ ๋ฏผ์ ๋ฏธ๋ฃจ๊ณ ์ถ๋ค. ์ต์
์ ๊ฒฝ์ฐ ํ ์ธ์ ์ ์ฉํ์ง ์์ ์ ๋ ์๋ค. (๋ฏธํ์ ) ์ฃผ๋ฌธ ๋๋ฉ์ธ ํ๋ ฅ, ์ญํ , ์ฑ
์ 1. ์ฃผ๋ฌธ ์์ฑ: ํด๋ผ์ด์ธํธ๋ ์ฃผ๋ฌธ ์๋น์ค์ ์ฃผ๋ฌธ ์์ฑ์ ์์ฒญํ๋ค. 2. ํ์ ์กฐํ: ํ ์ธ์ ์ํด์๋ ํ์ ๋ฑ๊ธ์ด ํ์ํ๋ค. ๊ทธ๋์ ์ฃผ๋ฌธ ์๋น์ค๋ ํ์ ์ ์ฅ์์์ ํ์์ ์กฐํํ๋ค. 3. ํ ์ธ ์ ์ฉ: ์ฃผ๋ฌธ ์๋น์ค๋ ํ์ ๋ฑ๊ธ์ ๋ฐ๋ฅธ ํ ์ธ ์ฌ๋ถ๋ฅผ ํ ์ธ ์ ์ฑ
์ ์์ํ๋ค. 4...
Spring/Spring ๊ธฐ๋ณธ
ํ์ ๋๋ฉ์ธ ์คํ๊ณผ ํ
์คํธ ํ์ ๋๋ฉ์ธ - ํ์ ๊ฐ์
main ๋๋ณด๊ธฐ package hello2.demo; import hello2.demo.member.Grade; import hello2.demo.member.Member; import hello2.demo.member.MemberService; import hello2.demo.member.MemberServiceImpl; public class MemberApp { public static void main(String[] args) { MemberService memberService = new MemberServiceImpl(); Member member = new Member(1L, "memberA", Grade.VIP); memberServ..
Spring/Spring ๊ธฐ๋ณธ
ํ์ ๋๋ฉ์ธ ๊ฐ๋ฐ ํ์ ๋ฑ๊ธ (Grade.class) ๋๋ณด๊ธฐ package hello2.demo.member; public enum Grade { BASIC, VIP } ํ์ ์ํฐํฐ, ๋ฉค๋ฒ (Member) ๋๋ณด๊ธฐ id, ์ด๋ฆ, ๋ฑ๊ธ package hello2.demo.member; public class Member { private Long id; private String name; private Grade grade; public Member(Long id, String name, Grade grade) { this.id = id; this.name = name; this.grade = grade; } public Long getId() { return id; } public void setId(L..