SW 재사용 방안
1. copy & paste
- A, B클래스에서 동일 로직을 사용하였을 경우
- JDK 버전이 바뀌어 동일한 기능을 제공하는 향상된 인터페이스가 나오면, A,B 클래스를 모두 변경해야 한다.
2. Method (function)
- 자주 사용되고 유사한 기능들을 모아 메서드로 정의하여 재사용
- 해당 메서드의 signature (메서드명, 리턴타입, 아규먼트 갯수/타입) 가 변경될 경우 사용하는 모든 클래스에 영향을 준다.
3. Class (inheritance)
- Person을 상속받은 모든 클래스들은 자동적으로 변경된 메서드를 사용하게 된다.
4. AOP
- Aspect Oriented Programming
- OOP를 support 해주는 개념
- 기존의 절차적 프로그래밍에서도 적용될 수 있다.
- 비즈니스 로직과 / 기능적 요소들의 연결 (Weaving) - 프레임워크에서 동작
디자인패턴과 프레임워크의 관련성
디자인 패턴의 정의
- 프로그램에서 자주 나타나는 과제를 해결하기 위한 방법
- 소프트웨어에서 개발과정에 발견된 know-how 를 축적하여 이름을 붙여 추후 재사용하기 좋은 형태로 특정 규약을 묶어서 정리
- 대표적 디자인 패턴 - GoF (Gang of Four) 23가지 디자인 패턴
디자인 패턴의 사용 이유
- 요구사항은 수시로 변경 -> 요구사항 변경에 대한 소스코드 변경 최소화
- 여러 사람이 같이 하는 팀프로젝트 진행 -> 범용적인 코딩 스타일 적용
- 상황에 따라 인수인계 발생 -> 직관적인 코드를 사용
프레임워크의 정의
- 비기능적 요구사항 (성능,보안,확장성,안정성 등)을 만족하는 구조와 구현된 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 구조의 라이브러리 덩어리
- 어플리케이션들의 최소한의 공통점을 찾아 하부구조를 제공함으로써, 시스템의 하부구조를 구현하는데 들어가는 노력을 절감시켜줌
프레임워크 사용 이유
- 비기능적인 요소들을 초기 개발 단계마다 구현해야하는 불합리함 극복
- 기능적인 요구사항에 집중할 수 있도록 해준다.
- 디자인 패턴과 마찬가지로 반복적으로 발견되는 문제를 해결하기 위한 특화된 솔루션 제공
디자인패턴과 프레임워크의 관련성
- 디자인패턴은 프레임워크의 핵심적인 특징
- 프레임워크를 사용하는 애플리케이션에 그 패턴이 적용된다.
- 프레임워크는 디자인패턴이 아니다.
- 디자인패턴은, 애플리케이션을 설계할 때 필요한 구조적인 가이드라인이 되어줄 순 있지만 구체적으로 구현된 기반코드를 제공하지는 않는다.
- 프레임워크는 디자인 패턴과 함께 패턴이 적용된 기반 클래스 라이브러리를 제공해서 프레임워크를 사용하는 구조적인 틀과 구현코드를 함께 제공한다.
- 개발자는 프레임워크의 기반코드를 확장하여 사용하면서 자연스럽게 그 프레임워크에서 사용된 패턴을 적용할 수 있게 된다.
프레임워크의 구성요소와 종류
IoC (Inversion of Control)
- "제어의 역전"
- 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다.
- 컨테이너 역할을 해주는 프레임워크에게 제어하는 권한을 넘겨 개발자의 코드가 신경써야할 것을 줄임
- 프레임워크의 동작원리를 제어흐름이 일번적인 프로그램 흐름과 반대로 동작
- Spring 컨테이너는 IoC를 지원하며, 메타데이터 (xml) 을 통해 beans들을 관리
- Spring 컨테이너는 관리되는 Bean들을 의존성 주입을 통해 IoC를 지원
클래스 라이브러리
- 특정 부분의 기술적 구현을 라이브러리형태로 제공
- Semi complete 반제품
라이브러리와 프레임워크의 차이점
- 실행제어가 어디서 일어나는가에 따라 달라진다.
- 라이브러리는 개발자가 만든 클래스에서 직접 호출하여 사용하므로 실행 흐름에 대한 제어를 개발자 코드가 관장한다.
- 프레임워크는 반대로 프레임워크에서 개발자가 만든 클래스를 호출하여 실행의 흐름에 대한 제어를 담당한다.
디자인 패턴
- 디자인패턴 + 라이브러리 = 프레임워크
- 프레임워크를 확장하거나 커스터마이징 할 때는 프레임워크에 적용된 패턴에 대한 이해가 필요
프레임워크 종류
'Back-end > Spring' 카테고리의 다른 글
DI 애플리케이션 작성(2) (0) | 2021.06.10 |
---|---|
DI 애플리케이션 작성(1) (0) | 2021.06.10 |
IoC와 DI (0) | 2021.06.09 |
Spring Project 시작하기 (0) | 2021.06.09 |
Spring Framework 개요 (0) | 2021.06.09 |