❯ Framework
Framework 란, 소프트웨어의 설계와 구현을 위해 재사용이 가능하게끔 협업화된 클래스를 제공하는 것을 말한다.
쉽게 표현하면 프레임(틀)을 만들기 위한 도구를 제공한다고 생각하면 된다.
이전에 사용했던 예시로는 Collection Framework 가 있다.
<Framework 사용 장점>
- 기본 구조가 만들어져있으므로 효율적으로 코드를 작성할 수 있다.
- 정해진 규약이 있어서 앱을 효율적으로 관리할 수 있다
<Framework 사용 단점>
- 해당 Framework 에 대한 학습이 필요하다.
- 정해진 규약이 있으므로 자유로운 개발이 어렵다.
여기에서, 비슷한 역할을 했던 Library 를 생각해볼 수 있다.
Framework 와 Library 는 명백히 다른 개념으로, 아래와 같은 차이점을 가진다.
- Framework : 뼈대를 구성하는 것. 주도권이 Framework에 있음
ex. 자동차 프레임. 사용자가 쉽게 변경할 수 없으며 제조사에 의해 규정되어있음 - Library : 기능을 구성하는 것. 애플리케이션 개발에 사용되는 데이터 및 프로그래밍 코드. 주도권이 개발자에게 있음.
ex. 자동차에 기능을 제공하는 바퀴, 라이트, 와이퍼 등의 부품. 사용자가 쉽게 교체할 수 있음
❯ Spring Framework
Framework에는 Django, Express, Flask, Laravel 등 다양한 종류가 있다.
그 중 부트캠프에서는 Spring Framework를 다루게 되었다.
Spring Framework는 아래와 같은 특징을 가진다.
- POJO(Plan Old Java Object) : Java로 생성한 순수한 객체를 의미한다.
- Java나 Java 스펙(사양)에 정의된 것 외에 다른 기술이나 규약에 얽매이지 않아야한다.
- 특정 환경에 종속적이지 않아야한다.
POJO를 통해 객체지향적인 설계가 가능해진다. 이를 실현하기 위한 기술이 IoC/DI, AOP, PSA이다. - IoC(Inversion of Control) / DI(Dependency Injection) : IoC란, 애플리케이션 흐름의 주도권이 뒤바뀐것을 말한다.
DI는 생성자를 통해서 어떤 클래스의 객체를 전달하는것으로, 의존성 주입이라고 한다.
자바에서 클래스간의 느슨한 의존성 주입은 인터페이스를 통해서 수행한다.(업캐스팅 활용)
Spring이 의존 객체들을 주입해주는 역할을 함으로써 IoC/DI 이 가능해진다. - AOP(Aspect Oriented Programming) : 관심 지향 프로그래밍으로, 애플리케이션에 공통적으로 적용되는 기능과 관련있다.
애플리케이션에 필요한 기능은 핵심 관심사항(Core concern)과 공통 관심사항(Cross-cutting concern)으로 나뉘는데,
앱의 핵심 업무는 실제 애플리케이션이 구현하고자하는 기능(ex. 메뉴 주문, 결제 등)을 의미하며
공통 관심사항은 해당 기능을 위해 필요한 공통적인 기능들(ex. 보안, 로깅, 트랜젝션)을 의미한다.
따라서 공통 관심사항을 분리해서 구현하게되면 해당 기능을 각 기능마다 구현할 필요 없이 공통적으로 사용할 수 있게 된다. - PSA(Portable Service Abstraction) : 일관된 서비스 추상화.
클라이언트가 추상화된 상위 클래스만 고려하여 하위 클래스 기능을 사용하게 하는것을 의미한다.
예를들어, 특정 추상클래스를 여러 클래스로 구현해놓으면 동일한 메서드로 클래스에 맞는 다른 기능을 할 수 있게 된다.
참고자료
스프링의 개념과 특징에 대해 학습하였다. 스프링을 왜 사용해야하는지, 어떠한 특징이 있는지 알 수 있었다.
아직 개념이 모호하기는 하지만 남은 기간동안 확실히 알 수 있도록 집중해서 학습해야겠다 :)
'부트캠프 개발일기 > Spring' 카테고리의 다른 글
39일차: Spring Framework(Advice, JoinPoint) (0) | 2023.04.07 |
---|---|
38일차: Spring Framework(AOP) (0) | 2023.04.07 |
37일차: Spring Container 실습 (0) | 2023.04.05 |
36일차: Spring Framework (DI, Spring Container, Bean) (0) | 2023.04.04 |
35일차: Architecture, Spring Boot (0) | 2023.04.03 |