📚 객체지향의 특징 - 추상화 , 캡슐화, 상속, 다형성 📚 SOLID 로버트 마틴(클린코드 저자)의 객체 지향 설계의 5가지 원칙 SRP : 단일 책임 원칙(single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙(Dependency inversion principle) 1.SRP : 단일 책임 원칙 (single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 ..
Filter 테스트 includedFilters : 컴포넌트 스캔 대상을 추가로 지정 excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyExcludeComponent { } @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyIncludeComponent { } @MyIncludeComponent public class BeanA { } @MyExcludeComponent public class BeanB ..
AOP 애노테이션을 사용하기 위해서는 pom.xml에 먼저 의조성을 설정해줘야 한다. org.springframework.boot spring-boot-starter-aop | 애노테이션 개반의 스프링AOP 적용 방법 package com.kyhslam.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @Component public class AppRunner..
AOP 특징 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @Component public class AppRunner implements ApplicationRunner { @Autowired EventService eventService; @Override public void run(ApplicationArguments args) throws Exception {..
| 스프링 EL 이란 ? JSP의 EL 과 비슷하다 객체 그래프를 조회하고 조작하는 기능을 제공 Unified EL과 비슷하지만, 메소드 호출을 지원하며 문자열 템플릿 기능도 제공한다 OGNL, JBOSS EL 등 자바에서 사용할 수 있는 EL이 있지만 SpEL은 모든 스프링 프로젝트 전반에 걸쳐 상요할 EL로 만들었다. 스프링 3.0부터 지원 Spel 구성 ExpressionParser parser = new SpelExpressionParser() StandardEvaluationContext context = new StandardEvaluationContext(bean) Expression expression = parser.parseExpression("SpEL 표현식") String value..
| Converter S타입을 T타입으로 변환할 수 있는 매우 일반적인 변환기 상태정볻없음 == Stateless == 쓰레드세이프 ConverterRegistry에 등록해서 사용 package org.kyhslam; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; public class EventConverter { @Component public static class StringToEventConverter implements Converter { @Override public Event convert(String source ) { return new..
Data binding 추상화 데이터 바인딩은 데이터 동적 변환이다. 입력한 값을 도메인 모델에 맞춰 자동으로 변환 후 할당하는 것을 말한다. 예시로 사용자가 문자열 "2020-01-16"을 넘겼는데 날짜 타입인 Date 로 변환하고 User 클래스를 생성하여 registerDate 라는 이름을 가진 필드에 넣어주는 것이다. 사용자 관점 : 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어주는 기능 해석하면 : 입력값은 대부분 문자열인데, 그 값을 객체가 가지고 있는 int, long Date 등 심지어 Event, Book 같은 도메인 타입으로 변환해서 넣어주는 기능 | PropertyEditor propertyEditor 는 Spring이 데이터 바인딩을 위해 지원하는 인터페이스 중 하..
특징 java.net.URL 을 추상화 한 것 스프링 내부에서 많이 사용하는 인터페이스 추상화 한 이유 클래스패스 기준으로 리소스 읽어오는 기능 부재 ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재 주요 메서드 exists() getFile() getURI() getURL() 추가 정보는 Resource (Spring Framework 5.2.3 API) 참조 docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/io/Resource.html Resource 주요 구현체 Resource의 타입은 ApplicationContext 의 구현체 타입에 따라 달라진다. ClassPathResourc..
| ResourceLoader Applicationcontext가 상속받고 있다. 리소스를 읽어오는 기능을 담당하는 인터페이스 이다. 예제 resources폴더에 test.txt 파일을 생성한다. @Component public class AppRunner implements ApplicationRunner { @Autowired ResourceLoader resourceLoader; // ApplicationContext 해도 동일하다. why? applicationContext가 ResourLoader를 상속받고 있으니까 @Override public void run(ApplicationArguments args) throws Exception { Resource resource = resourceL..
| IoC Container - ApplicationEventPublisher 옵저버 패턴의 구현체로, 이벤트 기반 프로그래밍에 유용한 인터페이스를 제공한다 Observer Patten 옵저버 패턴엔 행위자, 관찰자가 존재한다 행위자의 어떤 행동으로 변경 사항이 발생하면 즉시 관찰자에게 알려주는 것이 요점이다. 가장 대표적인 응용 사례는 데이터 바인딩 이라고 할 수 있다. 웹 프론트엔드 에서 많이 사용되고 있는 프레임워크 중 Angular, React 등은 데이터 바인딩을 지원하고 있다 View가 어떤 데이터를 바라보고 있고, 그 데이터가 변하는 즉시 view도 그 변화를 반영한다 물론 View가 바뀐 데이터를 반영하는 과정엔 개발자의 개입이 필요하지 않다. Event Publisher / Subscri..
| MessageSource Application 을 다국화 하는 방법을 제공하는 인터페이스이다. ApplicationContext는 MessageSource 인터페이스를 상속하고 있다. SpringBoot 에서는 기본적으로 message.properties 를 활용한다 파일 네이밍 규칙에 따라 자동으로 언어를 교환한다. 한국어 : message_ko.properties 영어 : message_en.properties 예제 먼저 Default를 살펴보자. @Component public class AppRunner implements ApplicationRunner { @Autowired MessageSource messageSource; @Override public void run(Applicatio..
ApplicaionContext가 상속받고 있는 것 중 EnvironmentCapable 을 알아보자. package org.springframework.context; import org.springframework.beans.factory.HierarchicalBeanFactory; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.core.env.EnvironmentCapable; import org.springframework.core.io.support...