디자인 패턴, 라이브러리와 프레임워크의 차이

1. 디자인 패턴

  • 디자인패턴은 프로그램을 설계할 때, 발생했던 문제점들을 객체 간의 상호 관계 등을 이용해서 해결할 수 있도록 미리 정해준 일종의 규약을 말합니다.

  • 대표적인 디자인 패턴에는 다음과 같은 것들이 있습니다.

    • 싱글톤 패턴

    • 팩토리 패턴

    • 전략 패턴

    • 이터레이션 패턴

    • 의존성 주입과 의존관계역전

    • 전략 패턴

    • 프록시 패턴

    • MVC, MVP, MVVM 패턴

      • Spring MVC

2. 라이브러리 vs. 프레임워크

2-1. 라이브러리

  • 소프트웨어를 개발할 때, 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임.

  • 특정 기능들을 모아둔 코드 및 함수들의 집합이고 코드 작성시 활용 가능한 도구들을 의미한다.

  • 예로 들면, 아래와 같은 것들이 라이브러리에 해당한다.

    • python pip 로 설치한 패키지나 모듈 - tensorflow, pandas, beautifulsoup 등

    • C++ 표준 템플릿 라이브러리 STL

    • Node.js 에서 npm 으로 설치한 모듈들

    • HTML 의 클라이언트 사이드 조작을 단순화 해주는 Jquery

    • 웹에서 사용자 인터페이스 개발에 사용되는 react.js

      • 리엑트는 프레임워크로 많이 오해하지만 사실은 라이브러리다.

      • 참고로 Express.js 는 Node.js 에서 가장 인기가 많은 웹 프레임워크이다.

2-2. 프레임워크

  • 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대를 의미한다.

  • 어플리케이션 개발시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 쉽게 구현할 수 있게 돕기 위하여 미리 어느정도 골격(뼈대)를 제공하고 이 뼈대 위에 코드를 작성하면서 개발자는 어플리케이션을 개발하게 된다.

  • 앱/서버 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하고, 사용자는 프레임워크가 정해준 방식대로 클래스나 매서드를 구현한다.

  • 예시

    • java 서버 개발에 사용되는 spring

    • python 서버 개발에 사용되는 django, flask

    • 안드로이드 앱 개발에 사용되는 android

    • 웹 개발에 사용되는 angular, vue.js

    • 루비 MVC 를 이용하는 ruby on rails 등

라이브러리 vs. 프레임워크

  • 제어의 주체가 누구인가!

  • 라이브러리의 경우, 개발자가 작성한 어플리케이션 코드가 어플리케이션의 흐름을 제어하게 된다. 필요에 따라서 기능을 위해 능동적으로 라이브러리를 사용할 뿐이다.

  • 반면 프레임워크는 다르다. 어플리케이션의 코드가 프레임워크에 의해서 "사용된다". 프레임워크가 주도권을 가지고 전체적인 틀을 만들어두면, 사용자인 개발자는 그 내부에서 그 틀에 맞추어 수동적으로 동작하는 코드를 작성한다.

  • 이처럼 프레임워크에는 분명하게 "제어의 역전" 개념이 적용되어있어야 한다.

참고

Last updated