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. 프레임워크
•
제어의 주체가 누구인가!
•
라이브러리의 경우, 개발자가 작성한 어플리케이션 코드가 어플리케이션의 흐름을 제어하게 된다. 필요에 따라서 기능을 위해 능동적으로 라이브러리를 사용할 뿐이다.
•
반면 프레임워크는 다르다. 어플리케이션의 코드가 프레임워크에 의해서 “사용된다”. 프레임워크가 주도권을 가지고 전체적인 틀을 만들어두면, 사용자인 개발자는 그 내부에서 그 틀에 맞추어 수동적으로 동작하는 코드를 작성한다.
•
이처럼 프레임워크에는 분명하게 “제어의 역전” 개념이 적용되어있어야 한다.
참고
•
토비의 스프링