Spring Framework 개념

왈왈왈 (Yoon tae uk)·2021년 7월 5일
0
post-thumbnail

목표

  • SW 재사용성 높일 수 있는 방법에 대한 이해
  • 디자인패턴과 프레임워크의 관련성에 대한 이해
  • 프레임워크 구성요소와 종류에 대해 이해

SW재사용 방안들

1. Copy & Paste

가장 간단한 초보적인 재사용 방법으로 다른 Source를 복사해서 사용한다.

GregorianCalendar date = (GregorianCalendar) Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String date = df.format(date);

A라는 클래스에서 사용하고 B라는 클래스에서 동일한 로직이 필요하여 복사하여 사용한 경우에 만약 JDK의 버전이 바뀌어 동일한 기능을 제공하는 항샹된 인터페이스가 제공 된다면 모든 클래스를 변경 해주어야 한다.

2. 메서드 호출

자주 사용되고 호출되는 유사한 기능들을 모아 메서드로 정의해서 재사용한다.

public class DateUtility {
	public static String toStringToday(String format) {
	    GregorianCalendar date = (GregorianCalendar) Calendar.getInstance();
	    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
	    String date = df.format(date);
	}
}
String sdate = DateUtility.toStringToday("yyyMMMdd");

Jdk 버전이 바뀌거나 메서드의 내용이 수정되어도 클래스를 모두 수정할 필요 없이, 해당 메서드 toStringToday()의 내용만 수정하면 된다.

toStringToday()메서드의 Signature을 변경하면 이 메서드를 사용하는 모든 클래스에게 영향을 준다.

복사 붙이기 보다는 진보된 방식이지만, 여전히 영역간의 결합도 문제는 존재한다.

3. class 재사용 (상속)

public class person {
    public static String printBirthDate(String format) {
        DateUtility.toStringToday(birthDate, format);
    }
}
  • Person을 상속받은 모든 클래스는 변경된 PrintBirthDate를 사용한다.
  • DateUtility 클래스의 메서드가 변경되어도 printBirthDate() 메서드의 인터페이스가 변하지 않으면 나머지 클래스에는 영향을 주지 않는다.

4. AOP (Aspect Oriented Programming)

관심의 분리 (Seperation of Concerns)

AOP가 핵심관심모듈의 코드를 직접 건드리지 않고 필요한 기능이 동작하도록 하는 데는 위빙(Weaving)이라고 하는 특수한 작업이 필요하다, 위빙 작업을 통하여 핵심모듈 사이에 필요한 횡단관심모듈이 동작하도록 만든다.

  • AOP는 OOP를 더욱 OOP답게 만들어 준다.

디자인 패턴과 프레임워크의 관련성

디자인 패턴의 정의

프로그램 개발에서 반복적으로 나타나는 과제를 해결하기 위한 방법중 하나로, 소프트웨어 개발과정에서 발견된 Know-How를 축척하여 이름을 붙여 이후에 재사용하기 좋은 형태로 특정 규악을 묶어서 정리한 것.

  • 디자인 패턴의 교과서로 불리는 GoF(Gang of Four)라 불리는 네 명의 컴퓨터 과학 연구자들이 쓴 서적 'Design Patterns: Elements of Reusable Object-Oriented Software' 이다.

디자인 패턴을 사용하는 이유

  • 요구사항이 수시로 변경 → 요구사항에 대한 Source Code 변경을 최소화
  • 팀 프로젝트를 진행 → 팀원들이 공통된 디자인 패턴 스타일을 코딩에 적용
  • 상황에 따라 인수인계를 하는 경우일 때 → 직관적인 코드사용

프레임워크의 정의

비기능적(Non-Funtional) 요구사항(성능, 보안, 기능, 확장성, 안정성등)을 만족하는 구조와 구현된 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 라이브러리의 덩어리

  • 프레임워크는 애플리케이션의 공통점들을 찾아서 하부 구조를 제공함으로써 개발자가 하부 구조를 구현하는데 들어가는 노력을 절감하게 해준다.

프레임워크를 사용하는 이유

  • 비기능적인 요소를 초기 개발 단계에서 계속해서 구현해야 하는 불합리함을 줄여준다.
  • 기능적인 요구사항에 개발자들이 집중할 수 있도록 만들어준다.
  • 반복적으로 발견되는 문제를 해결하기 위한 특화된 Solution을 제공한다.

디자인패턴과 프레임워크의 관련성

디자인 패턴은 프레임워크의 핵심적인 특징이고, 프레임워크를 사용하는 애플리케이션에 그 패턴이 적용된다는 특징을 가지고 있다. 하지만 프레임워크는 디자인 패턴이 아니다.

  • 프레임워크는 디자인 패턴 + 기반 클래스 라이브러리를 제공하여 구조적인 틀과 구현코드를 함께 제공한다.

프레임워크의 구성요소와 종류

프레임워크의 구성요소

  • IoC
  • Class Library
  • Design Pattern

IoC(Inversion of Control)

Ioc란 "제어의 역전" 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다는 뜻이다. 즉, 컨테이너 역할을 해주는 프레임워크에게 제어 권한을 넘겨 개발자의 코드가 신경 써야 할 것을 줄이는 전략이다.

  • 프레임워크의 제어흐름이 일반적인 프로그램 흐름과 반대로 동작해서 IoC 라고 설명한다.
  • Spring 컨테이너는 IoC를 지원하며, XML설정을 통해 beans를 관리하고 어플리케이션의 중요부분을 형성한다.
  • Spring 컨테이너는 bean을 의존성주입(DI)을 통해 IoC를 지원한다.

클래스 라이브러리(Class Library)

프레임워크는 특정 부분의 기술적인 구현을 라이브러리 형태로 제공한다.

프레임워크와 라이브러리의 가장큰 차이는 프레임워크는 프레임워크코드가 유저코드를 호출하는 것이고, 라이브러리는 유저코드가 라이브러리를 호출하여 제어한다는 것이다.

  • 라이브러리는 개발자가 만든 클래스에서 호출하여 사용하므로 실행 흐름에 대한 제어를 개발자의 코드가 가지고있다.
  • 프레임워크는 프레임워크에서 개발자가 만든 클래스를 호출하여 실행의 흐름에 대한 제어(IoC)를 담당한다.

디자인 패턴

디자인 패턴 + 라이브러리 = 프레임워크

프레임워크의 라이브러리를 살펴볼 때도 적용된 패턴을 주목해서 살펴 보면 그 구성을 이해하기 쉽다.

특히 프레임워크를 확장하거나 커스터마이징 할 때는 프레임워크에 적용된 패턴에 대한 이해가 필요하다.

프레임워크 종류

아키텍처 결정 = 사용하는 프레임워크 종류 + 사용전략

Reference

T아카데미 Spring Framework Basic

0개의 댓글

관련 채용 정보