프레임워크(Framework)
소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합
•
원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 기능을 갖추고 있는 골격, 뼈대
•
애플리케이션 개발 시 필수적인 코드, 알고리즘, DB연동과 같은 기능을 위해 어느정도 구조(뼈대)를 제공
•
해당 구조 위에서 사용자가 코드를 작성해서 애플리케이션을 개발
프레임워크의 기능
1.
코드 재사용성 : 공통 기능을 제공하여 코드의 재사용성 향상
2.
일정한 구조 제공 : 애플리케이션의 구조를 형성하여 제공
3.
규칙 설정 : 애플리케이션에서 특정 방식으로 작업을 수행할 수 있도록 규칙을 정의(흐름제어)
4.
모듈화 : 프레임워크는 기능을 모듈화하여 독립적인 컴포넌트로 분리가 가능
5.
생산성 향상 : 반복적인 작업을 자동화하여 개발 생산성 향상
6.
유지보수성 : 일관된 코드 구조를 유지하여 유지보수성을 향상
예시
•
Python - Django, Flask
•
JavaScript - Next.js, Vue.js
•
JAVA - Spring Framework
라이브러리(Library)
단순 활용가능한 도구들의 집합
•
소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임
•
미리 작성된 코드, 변수, 함수, 클래스가 포함
라이브러리의 기능
1.
코드 재사용성: 특정 작업을 처리하는 코드의 재사용을 촉진
2.
추상화: 복잡한 작업을 간단한 함수 호출로 추상화
3.
모듈화: 기능별로 모듈화되어 필요에 따라 사용 여부 선택 가능
4.
유연성: 개발자가 필요에 따라 라이브러리를 선택하여 사용 가능
예시
•
Python - TensorFlow, Numpy, Requests
•
JavaScript - JQuery, Lodash, HTML2PDF
프레임워크와 라이브러리의 차이
제어의 역전 (Inversion of Control)
•
프레임워크의 경우
◦
프로그램의 전체적인 흐름을 프레임워크가 쥐는 구조
◦
해당 흐름(틀) 안에서 프레임워크가 제어 흐름에 대한 주도성을 지니고 있음.
•
라이브러리의 경우
◦
프로그램을 만드는 사용자가 전체적인 흐름을 직접 만들고 필요에 따라 라이브러리를 사용
◦
사용자가 전적으로 제어 흐름에 대한 주도성을 지님.
구조 제공 유무
•
프레임 워크
◦
전체 어플리케이션의 구조를 정의하여 일정한 개발 패턴을 따르게 함(흐름 제어O)
•
라이브러리
◦
특정 기능만을 제공하여 전체 구조에는 관여하지 않음(흐름 제어X)