일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Runtime Area
- Java 22
- ATDD
- Be
- pair programming
- docker
- KPT
- 완벽이해
- java
- 스프링으로하는마이크로서비스구축
- Solid
- testdrivendevelopment
- 자식객체
- Self Descript Message
- 미니미프로젝트
- 클린코드
- G1GC
- 부모객체
- 도커
- ComponentScan
- TDD
- hateoas
- M:N
- 마이크로서비스디자인패턴
- DB
- 트랜잭션 격리 수준
- Execution Engine
- GC
- Spring/JAVA 서적
- RESAPI
- Today
- Total
Programming Summary
Spring) 스프링은 프레임워크가 맞을까? 본문
스프링은 프레임워크가 맞을까?
아무도 스프링이 프레임워크가 아니다라고 한 적이 없는데 왠 쌩뚱 맞은 질문인가 할 수 있다. 하지만 프레임워크의 정의에 대해 한번 더 살펴보고 스프링은 이에 해당하는가를 고민하는 것에 의의가 있다고 생각한다.
프레임워크란?
프레임워크란 무엇인가? 제어의 흐름을 스스로 주도하는 구현체들의 집합을 의미한다. 즉, IOC(Inversion Of Control)를 제공하면 프레임워크라고 할 수 있겠다.
스프링에서 IOC를 제공해주는 것은?
@Component
다음 내용은 Spring Wiki에서 @Component에 관해 정의된 내용이다.
@Component is a generic stereotype for any Spring-managed component. Any component annotated with @Component is a candidate for component scanning. Similarly, any component annotated with an annotation that is itself meta-annotated with @Component is also a candidate for component scanning.
@Component는 Spring에서 관리하는 모든 구성 요소에 대한 일반적인 스테레오타입입니다. @Component로 주석이 달린 모든 구성 요소는 컴포넌트 스캔의 후보가 됩니다. 마찬가지로 @Component로 메타 주석이 달린 주석으로 주석이 달린 모든 구성 요소도 컴포넌트 스캔의 후보가 됩니다.
즉, Component는 해당 객체를 빈 객체에 등록 시켜 스프링이 관리를 하겠다는 뜻이다. 여기서 관리를 하겠다는 의미는 그 객체의 라이프사이클과 호출 등에 관여를 하겠다는 의미로 해당 부분이 IOC에 해당한다.
@ComponentScan
이 애노테이션은 위의 설명에서 나오는 컴포넌트 스캔 애노테이션이다. 해당 애노테이션을 달면, 최상위 패키지부터 @Component
가 포함된 클래스들을 찾아서 빈 객체를 생성하여 빈 컨테이너에 등록시킨다.
@Autowired와 DI
스프링에서는 DI를 다음과 같이 정의했다.
Dependency injection (DI), a specialized form of IoC is a process whereby objects define their dependencies (that is, the other objects with which they work) only through constructor arguments, arguments to a factory method, or properties that are set on the object instance after it is constructed or returned from a factory method.
의존성 주입(DI)은 IoC(제어의 역전)의 특수한 형태로, 객체가 자신이 필요로 하는 다른 객체(즉, 함께 작동하는 다른 객체)를 생성자 인수, 팩토리 메서드의 인수, 또는 객체 인스턴스가 생성되거나 팩토리 메서드에서 반환된 후에 설정된 속성을 통해서만 정의하는 과정을 말합니다.
스프링에서는 이를 @Autowired라는 정해진 형식을 통해 의존성을 주입할 수 있다.
위 내용들을 통해 스프링에서는 IOC와 DI를 제공해주므로 제어의 주도권이 스프링에 있다. 그러므로 스프링은 프레임워크다
라고 할 수 있겠다.
생각해볼 만한 것
React에서 변수를 생성할 때,
const [data, setData] = useState("");
와 같은 형식으로 생성한다. 이것은 React에서 객체의 라이프사이클을 관리해준다고 봐야하는걸까? 아니면 사용자가 제어의 흐름을 쥐고 있다고 봐야할까?
참고
'CS 공부' 카테고리의 다른 글
Build) build.gradle이란? (1) | 2024.07.19 |
---|---|
협업) 클린 코드를 꼭 해야 할까? (0) | 2024.07.09 |
Network) Rest API란? (0) | 2024.07.05 |
디자인 패턴) MVC는 왜 사용할까? (1) | 2024.07.02 |
Java) G1 GC를 어떻게 뜯어볼까? (6) | 2024.04.16 |