-SKplanet Tacademy의 스프링 프레임워크 강의를 듣고 정리한 내용입니다-
S/W 재활용
1. copy & paste
- 사용한 코드의 변경이 생기면 그 코드를 사용한 클래스 모두 변경해야 한다.
2. method(function) 재사용
- 사용한 메서드의 signature 변경시 그 메서드를 사용한 클래스에 영향을 준다.(결합도 문제)
- signature: 메서드 명, 리턴 타입, 아규먼트 개수∙타입
3. class(inheritance) 재사용
- 메서드를 상속받은 클래스에 맞게 자동적으로 변경된 메서드를 사용한다.
4. AOP(Aspect Oriented Programming)
- OOP를 더욱 OOP 답게 만들어 줄 수 있고, 기존의 절차적 프로그래밍에도 적용될 수 있다.
- 관심의 분리 (핵심관리모듈/횡단관심모듈)
- 핵심관리모듈(비즈니스 로직)
- 횡단관심모듈(기능적 기능 제공, 핵심관심모듈 서포트)
- 핵심관심모듈 + 횡단관심모듈 => 위빙
- 위빙은 프레임워크에서 해줌
- AOP가 핵심관심모듈의 코드를 직접 건드리지 않고 필요한 기능이 동작하도록 하는 데는 위빙 작업이 필요하다.
디자인 패턴
- 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법.
- 소프트웨어 개발과정에서 발견된 Know-How를 축적해서 재사용하기 좋은 형태로 특정 규약을 묶어서 정리한 것.
- GoF : 23가지 디자인 패턴
디자인 패턴을 사용하는 이유
- 요구사항은 수시로 변경되므로 요구사항 변경에 대한 Source Code 변경을 최소화하기 위해
- 팀 프로젝트 진행시 범용적인 코딩 스타일을 적용하기 위해
- 인수 인계하는 경우 직관적인 코드를 사용하기 위해
프레임워크
- 비기능적인 요구사항(성능, 보안, 확장성, 안정성 등)을 만족하는 구조와 구현된 기능을 안정적으로 실행하도록 제어해주는 구조의 라이브러리 덩어리
- 애플리케이션들의 최소한의 공통점을 찾아 하부 구조를 제공함으로써 개발자들로 하여금 시스템의 하부 구조를 구현하는데 들어가는 노력을 절감하게 해준다.
프레임워크를 사용하는 이유
- 비기능적인 요소들을 초기 단계마다 구현해야 하는 불합리함 극복
- 기능적인 요구사항에 집중할 수 있도록 해준다.
- 반복적으로 발견되는 문제를 해결하는데 솔루션을 제공
프레임워크는 디자인 패턴을 내부적으로 사용함
“개발자는 프레임워크의 기반 코드를 확장하여 사용하면서 자연스럽게 그 프레임워크에서 사용된 패턴을 적용할 수 있게 된다.”
프레임워크의 구성요소와 종류
1. IoC
2. class Library
3. design pattern
IoC(Inversion of Control) : 제어의 역전
- 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다.
- 컨테이너 역할을 해주는 프레임워크에게 제어하는 권한을 넘겨서 개발자의 코드가 신경 써야 할 것 을 줄인다.
<IoC에서 프레임워크와 라이브러리의 차이점>
-일반적인 프로그램 흐름과 반대로 동작하므로 IoC라고 함
- Spring 컨테이너는 IoC를 지원하며, 메타데이터(XML 설정)를 통해 beans를 관리하고 어플리케이션의 중요부분을 형성함
-Spring 컨테이너는 관리되는 bean들의 의존성주업(Dependency Injection)을 통해 IoC를 지원함
디자인 패턴 + 라이브러리 = 프레임워크
프레임워크 종류
아키텍처 결정 = 사용하는 프레임워크의 종류 + 사용전략
'웹 > Spring' 카테고리의 다른 글
[Spring]Spring Framework Basic Framework 개념_어노테이션 | T아카데미 (0) | 2021.05.25 |
---|---|
[Spring]JUnit_java.lang.Exception: No runnable methods (0) | 2021.05.18 |
[Spring]Spring Framework Basic Framework 개념_IoC, DI | T아카데미 (0) | 2021.05.18 |
[Spring]Spring Framework Basic Framework 개념 | T아카데미 (0) | 2021.05.18 |
[Spring]_Whitelabel Error Page (0) | 2021.04.30 |