본문 바로가기
Java&Spring

[Spring] spring?

by JINJINC 2023. 4. 4.
728x90
반응형

Spring 핵심 기능

1. The IoC Container

2. Resources

3. Validation, Data Binding, and Type Conversion

4. Spring Expression Language (SpEL)

5. Aspect Oriented Programming with Spring

6. Null-safety

7. Logging

 

The IoC Container

IoC (Inversion of Control)

"전통적인 제어 흐름에 비추어볼 때, 제어 흐름을 반대로 뒤집은 것" - Wikipedia

제어 반전, 제어의 반전, 역제어는 프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름 제어를 받게 되는 소프트웨어 디자인 패턴을 말한다.

라이브러리를 사용할 때는 내 코드가 라이브러리 코드를 호출하지만 프레임워크를 사용할 때는 프레임워크가 내 코드를 호출합니다

 

wikipidia  예제 -  Inversion of control - Wikipedia

public class ServerFacade {
    public <K, V> V respondToRequest(K request) {
        if (businessLayer.validateRequest(request)) {
            Data data = DAO.getData(request);
            return Aspect.convertData(data);
        }
        return null;
    }
}

위의 예제는 모든 것이 결합되어있다.  하나가 바뀌면 영향을 받게 됩니다.

public class ServerFacade {
    public <K, V> V respondToRequest(K request, DAO dao) {
        return dao.getData(request);
    }
}

결합도를 떨어트려주어  serverFaacade 는 분리되어 독립성을 갖게됩니다. 

==> 이런것을 제어의 흐름을 역전하는것 

 

Resource

low-level resource 에 접근할 수 있는 보다 폭넓은 기능을 제공

• UrlResource

• ClassPathResource

• FileSystemResource

• PathResource

• ServletContextResource

• InputStreamResource

• ByteArrayResource

 

 

Validation, Data Binding, Type Conversion

• 데이터의 검증

• 데이터를 인식하고 자료형에 할당

• 데이터 자료형의 변환

 

SpEL

• 스프링 애플리케이션의 런타임에 다양한 데이터에 접근하기 위한 언어

• JSP Unified EL 과 유사하지만 스프링에 특화되어 더 다양한 기능을 제공

 

Aspect Oriented Programming(AOP) with Spring 

• AOP: 관점 지향 프로그래밍 - 공통 기능을 개발자의 코드 밖에서 필요한 시점에 적용 가능, 반복 사용되는 로직들을 모듈화하여 필요할 때 호출해서 사용하는 방법

• AOP 를 적극적으로 사용하고 지원하는 프레임워크

• Proxy, Aspect, Join Point, Advice, Pointcut, Weaving

• CGLib, AspectJ

• AOP 를 사용하지 않아도, 심지어 몰라도 여전히 프레임워크를 사용 가능

 

 

 

Null-safety

null-safe 한 코드를 작성할 수 있는 다양한 방법을 지원

• @Nullable

• @NonNull

• @NonNullApi

• @NonNullFields

 

 Logging

별도의 외부 설정 없이 로깅 구현체 사용 가능

• SLF4J + Logback

• Log4j 2

• JUL (java.util.logging)

 

728x90
반응형

'Java&Spring' 카테고리의 다른 글

[Spring] AOP 관점지향 프로그래밍  (0) 2023.04.04
[Java&Spring] opp 정렬체 구현  (0) 2023.03.27
[JAVA기초] JAVA란?  (0) 2023.03.13

댓글