본문 바로가기

강의/스프링 핵심 원리 - 기본편

(7)
Bean (싱글톤의 개념과 사용시 주의점) 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 요청을 할 때마다 Controller, Service, Repository를 생성하면 메모리 낭비가 심하기 때문에, 스프링에서는 싱글톤으로 객체를 가지고 있다. 싱글톤이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. @Configuration과 싱글톤 @Configuration은 @Bean에 추가 설정을 줘서 싱글톤으로 만들지 않는 이상 무조건 빈에 대해 싱글톤을 보장한다. 아래 코드를 살펴 보자. @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberReposi..
스프링 컨테이너 (BeanFactory, ApplicationContext) BeanFactory 스프링 컨테이너의 최상위 인터페이스다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 을 제공한다. 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론이고, 추가적으로 부가기능이 생겼습니다. BeanFactory를 직접 사용할 일은 거의 없으며, 실질적으로는 부가기능이 포함된 ApplicationContext를 사용할 것이다. BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다고 합니다.
빈 조회하기 빈 조회할 일은 거의 없을 것이다. 여기서 알아 둘 것은 상속 관계에서 부모 타입의 빈을 조회하면, 자식 타입도 함께 조회한다는 것만 알아두고 넘어가자 빈 조회 컨테이너에 등록된 모든 빈 조회 스프링 컨테이너에 실제 스프링 빈들이 잘 등록 되었는지 확인해보자. class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (St..
프레임 워크 vs 라이브러리 내가 작성한 코드를 제어하고, 대신 실행한다면 그것은 프레임워크이다. (JUnit) 내가 작성한 코드가 직접 제어를 한다면 그것은 라이브러리이다.
DI와 IoC를 활용하여 OCP, DIP를 지켜보자 개념 제어의 역전 (IoC) 제어의 역전이라는 개념은 프레임 워크같은 것이 대신 호출해주는 것입니다. 프로그램의 흐름을 직접 제어하는 것이 아니라 외부에서 관리해주는 것을 제어의 역전(IoC)라고 합니다. 의존관계 주입 (DI) 애플리케이션 '실행 시점(런타임)'에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것을 '의존관계 주입'이라 한다. 코드로 확인하는 개념 아래와 같은 할인정책을 구현한다고 생각해보겠습니다. 보통 할인 정책을 구현하면 아래와 같이 코드를 작성할 것입니다. public class OrderServiceImpl implements OrderService { private final MemberRepository memberRep..
객체 지향 설계의 5가지 원칙 좋은 객체 지향 설계의 5가지 원칙(SOLID) 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP: 단일 책임원칙 OCP: 개방 폐쇄 원칙 (가장 중요) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. - 클 수 있고 작을 수 있다. - 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 - 예) UI 변경, 객체의 생성과 사용을 분리 OCP: 개방 폐쇄 원칙 (가장 중요) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 활용해보자 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 지금까지 배운 역할과 구현의..
객체지향과 다형성 핵심 컨셉은? 로드 존슨의 3만 코드에서 시작 스프링은 자바 언어 기반의 프레임워크 자바 언어의 가장 큰 특징 - 객체 지향 언어 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 객체지향 프로그래밍을 잘 할 수 있도록 도와주는 도구 좋은 객체 지향 프로그래밍? 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 추상화, 캡슐화, 상속, 다형성의 특징을 가지고 있지만 그 중에서 가장 중요한 것을 고르자면 '다형성' 이라고 할 수 있다. 다형성에 대해서 알아보도록 하겠습니다. 다형성의 실세계 비유 객체지향 프로그래밍에서 다형성이 가장 중요하다. 이해를 쉽..