👩🏻‍💻 Programming/SpringBoot

스프링 기본 정리 - 객체지향 원리 적용

한국의 메타몽 2022. 2. 8. 01:41

 

프레임워크 vs 라이브러리

 

  • 프레임워크 : 내가 작성한 코드를 제어하고 대신 실행해주면 프레임워크에 해당 (ex : JUnit)
  • 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 라이브러리에 해당 (ex : Java 객체 -> Json으로 바꾸는 라이브러리)

 

 

 

스프링으로 관리되는 예제 코드

 

@Configuration // 설정정보 (ex : 이게 설정파일임을 알리며, Bean을 등록한다는것을 의미함)
public class AppConfig {
    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy());}

    @Bean
    public DiscountPolicy discountPolicy(){
        return new FixDiscountPolicy();
    }
}

* @Configuration : 설정정보 (ex : 해당 파일이 설정 파일임을 알리며, Bean을 등록한다는 것을 의미)

 

public class MemberApp {
    public static void main(String[] args) {
        /*
       	(구코드) appConfig 객체를 직접 생성해서 memberService를 가져왔다.
        AppConfig appConfig = new AppConfig();
        MemberService memberService = appConfig.memberService();*/

        // applicationContext가 @Bean을 모두 관리함
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        MemberService memberService =  applicationContext.getBean("memberService", MemberService.class);

        Member member = new Member(1L,"memberA", Grade.VIP);
        memberService.join(member);

        Member findMember = memberService.findMember(1L);
        System.out.println("New Member = " + member.getName());
        System.out.println("findMember = " + findMember.getName());
    }
}
public class OrderApp {

    public static void main(String[] args) {
        /*
        (구코드) appConfig객체를 직접 생성해서 Member,OrderService를 각각 가져왔다.
        AppConfig appConfig = new AppConfig();
        MemberService memberService = appConfig.memberService();
        OrderService orderService = appConfig.orderService();*/

        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
        OrderService orderService = applicationContext.getBean("orderService", OrderService.class);

        Long memberId = 1L;
        Member member = new Member(memberId, "memberA", Grade.VIP);
        memberService.join(member);

        Order order = orderService.createOrder(memberId, "itemA", 10000);
        System.out.println("order = " + order);
    }
}

* ApplicationContext : 모든 @Bean을 관리하는 일종의 Spring Container