Spring이란?
1. Spring은 Framework이다.
2. Spring은 Open Source다.
3. Spring은 IoC 컨테이너를 가진다.
- IoC란 Inversion of Control의 약어로, 주도권이 Spring에게 있다는 의미이다.
- class : 설계도
- object : 실체화가 가능한 것
- instance : 실체화가 된 것
<Spring 이전>
변수 song은 실체화되어 heap 메모리에 올라간다.
이때 처음에 올라간 song은 다음에 올라간 song과는 아예 다른 변수이므로 heap 메모리에 새로 올라간다.
=> 이름은 같아도 각각 다른 변수이므로 나중에 관리하기가 힘들어진다.
<Spring>
Spring이 class를 관리한다. Spring은 class 전체를 쫙 스캔하여 heap 메모리에 전부 올려놓는다. class가 추가될 경우에도 Spring이 바로 heap 메모리에 올려놓는다.
=> heap 메모리에 올라간 instance를 여기저기서 가져다 쓰더라도 전부 같은 instance임을 인식한다.
=> Spring IoC 컨테이너를 사용하는 이유는 인터페이스를 활용하여 결합도를 낮추고, 의존도를 낮춰 비즈니스 로직에 영향없이 개발하기 위함이다.
4. Spring은 DI를 지원한다.
- DI란 Dependency Injection의 약어로, 의존성 주입을 뜻한다.
- 다른 곳에서 가져다 쓸 수 있도록 한다. => Spring에서 Singleton Pattern으로 접근하기 쉽다.
5. Spring은 여러 Filter를 가지고 있다.
- Complie Checking
- Annotation(주석+힌트) - 컴파일러가 무시하지 않음
- // (주석) - 컴파일러가 무시한다.
6. Spring은 여러 Annotaion을 가지고 있다. - Reflection, Compile Checking
Spring은 Annotation을 생성한다.
- @Component : 클래스를 메모리에 로딩해라
- @Autowired : 로딩된 객체를 해당 변수에 넣어라
7. Spring은 MessageConverter를 가지고 있다. - 기본값: JSON(현재)
- 예를 들어, Java를 Python으로 전달하려면 중간 언어가 필요하다. 이때 중간 언어는 현재 JSON이다.(예전에는 xml을 주로 사용)
- JSON(Javascript Object Notation) : 사람이 읽을 수 있는 텍스트를 사용하여 데이터를 저장하고 전송하는 데이터 공유를 위한 개방형 표준 파일 형식
- JSON의 형태 : {"K":"V"}
{
"apple":"사과",
"banana":"바나나",
"cranberry":"크랜베리"
}
8. Spring은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.
- @RequestBody => BufferedReader가 동작
@ResponseBody => BufferedWriter가 동작
- BufferedWriter는 요즘 PrintWriter로도 많이 쓰인다.
- PrintWriter는 print(), println() 등을 제공한다.
출처: 인프런 - 최주호, 스프링부트 개념정리(이론)