[스프링 핵심 원리] 객체 지향 원칙(SOILD) 적용 - 설정 클래스(AppConfig) 사용
·
Back-end/Spring
김영한 강사의 스프링 핵심 원리 기본편 1~3강 핵심 내용만 정리한 글 입니다.💡 객체 지향 설계의 5가지 원칙 (SOLID)SRP: 단일 책임 원칙(single responsibility principle)한 클래스는 하나의 책임만 가져야 한다. 즉, 변경이 있을 때 파급 효과가 가장 적을 수 있게 클래스를 쪼개는 것이다.OCP: 개방-폐쇄 원칙 (Open/closed principle)확장에는 열려 있고 변경에는 닫혀 있어야 한다.코드를 추가하는 것은 가능하지만, 코드를 변경하는 것은 불가능하다는 뜻이다.기존의 MemoryMemberRepository 객체를 JdbcMemberRepository 객체로 변경하려면 클라이언트 코드를 변경해야 한다. 하지만 이렇게 변경하면 OCP를 위반하게 된다.LSP..
[Spring] 컴포넌트 스캔과 의존 관계 자동 주입 (@ComponentScan, @Autowired)
·
Back-end/Spring
컴포넌트 스캔과 의존 관계 자동 주입이전 글 - 싱글톤 패턴과 싱글톤 컨테이너이전 글에서는 AppConfig 클래스에 @Bean을 작성해서 스프링 빈으로 등록했다.등록해야 할 빈이 몇 개 안된다면 상관없지만 빈을 수십, 수백개를 등록해야 한다면 설정 정보가 너무 커지고 누락 가능성이 있어서 비효율적이다.따라서 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan이란 기능이 있고 의존관계 주입도 @Autowired라는 기능이 있다.@ComponentScan, @Component, @Autowired@ComponentScan을 설정 정보(AppConfig.java)에 붙이면 @Component가 붙은 클래스를 스캔해서 자동으로 스프링 빈으로 등록한다.@ComponentScan@Comp..
[Spring] 싱글톤 패턴과 싱글톤 컨테이너
·
Back-end/Spring
싱글톤 패턴이란?싱글톤 패턴이란 객체를 하나만 생성하도록 제한하는 방식이다.이는 시스템 전체에서 동일한 객체를 공유하고 싶을 때 사용하는 방식이다.싱글톤 패턴을 사용하는 이유웹 어플리케이션은 보통 여러 명의 클라이언트가 동시에 요청을 한다. 여러 요청이 동시에 들어올 경우 아래 그림과 같이 요청이 들어 오는 만큼 객체를 생성하고 요청이 끝나면 소멸한다. 이러한 방식은 사용하면 메모리 낭비가 너무 심해져서 성능에 문제가 생긴다.이러한 문제를 해결하기 위한 방식이 싱글톤 패턴이다.싱글톤 패턴을 적용한 어플리케이션은 아래 그림과 같이 여러 요청이 들어와도 하나의 객체만을 사용하게 된다.싱글톤 패턴의 문제점싱글톤 패턴은 여러가지 문제가 있다.싱글톤 패턴을 적용하여 예제 코드를 만들어보자.static 영역에 인스..
[Spring] 스프링 컨테이너와 스프링 빈(BeanFactory, ApplicationContext)
·
Back-end/Spring
스프링 컨테이너와 스프링 빈ApplicationContext는 스프링 컨테이너고 인터페이스이다.new AnnotationConfigApplicationContext(AppConfig.class);는 ApplicationContext 인터페이스 구현체이다.AppConfig는 스프링 컨테이너의 구성 정보를 설정하는 설정 파일이다.스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 스프링 컨테이너를 생성한다.AnnotationConfigApplicationContext는 스프링 컨테이너 구현체이다.AppConfig.class는 스프링 컨테이너 구성 정보 설정 파일이다.구..
[Spring] 객체 지향 원칙(SOILD) 적용 - 설정 클래스(AppConfig) 사용
·
Back-end/Spring
OCP, DIP 원칙을 지키기 위한 방법SOLID 원칙 설명그림과 같이 SRP(단일 책임), LSP(리스코프), ISP(인터페이스 분리)를 준수하는 코드가 있다고 가정하자.OrderServiceImpl은 DiscountPolicy 인터페이스에 의존하는 것처럼 보이지만 동시에 구현 클래스인 FixDiscountPolicy와 RateDiscountPolicy에도 의존하고 있으므로 DIP를 위반하고 있다.FixDiscountPolicy를 RateDiscountPolicy로 변경하려고 하면 OrderServiceImpl 클라이언트 코드를 직접 변경해야 하므로 OCP를 위반하고 있다.OCP와 DIP 객체 지향 설계 원칙을 준수하도록 만들기 위해서는 인터페이스에만 의존하도록 변경하면 된다.설정 클래스(AppConf..
객체 지향 설계의 5가지 원칙(SOLID)
·
Back-end
SRP: 단일 책임 원칙(single responsibility principle)한 클래스는 하나의 책임만 가져야 한다. 즉, 변경이 있을 때 파급 효과가 가장 적을 수 있게 클래스를 쪼개는 것이다.OCP: 개방-폐쇄 원칙 (Open/closed principle)확장에는 열려 있고 변경에는 닫혀 있어야 한다.코드를 추가하는 것은 가능하지만, 코드를 변경하는 것은 불가능하다는 뜻이다.기존의 MemoryMemberRepository 객체를 JdbcMemberRepository 객체로 변경하려면 클라이언트 코드를 변경해야 한다. 하지만 이렇게 변경하면 OCP를 위반하게 된다.LSP: 리스코프 치환 원칙 (Liskov substitution principle)다형성을 지키기 위한 원칙으로써 프로그램의 객체는..