본문 바로가기
개발(Development)/Etc(기타)

[개발 용어] 라이브러리 vs. 프레임워크 개념과 차이

by 카레유 2021. 7. 10.

# 라이브러리(Library)란?

현실세계에서의 라이브러리(도서관)란 필요할 때마다 꺼내볼 수 있는 책(지식)들이 모여있는 곳이다.

프로그래밍에서의 라이브러리란 필요한 기능들이 모여있는 코드의 묶음이라고 생각할 수 있다.

자주 사용되는 기능들을 라이브러리(객체나 함수등의 형태)로 만들어두면, 필요할 때마다 직접 호출하여 사용할 수 있다.

 

물론 남들이 만들어둔 외부 라이브러리도 가져다 사용할 수 있다.

1) Browser환경에서 script src 로 불러들이는 js파일(JQuery, React 등)

2) node.js 환경에서 npm으로 설치한 모듈

3) Python 환경에서 pip로 설치한 패키지/모듈

4) Java 환경에서 설치한 jar


# 프레임워크(Framework)란?

프레임워크는 작업(work)의 구조(frame)가 정해져 있는 라이브러리라고 볼 수 있다.

단, '프레임워크가 원하는 방식'대로 다양한 기능을 제공한다.

 

앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 알아서 관리하며,

개발자는 서비스별로 다른 부분만 "프레임워크가 정해준 방식대로" 클래스, 메서드 등에 구현해두면 된다.

(자세한 내용은 아래의 라이브러리 vs.프레임워크 항목을 보면 알 수 있다.)

 

유명한 프레임워크로는 아래와 같은 것들이 있다.

1) Java 서버 개발에 사용되는 Spring

2) Python 서버 개발에 사용되는 Django, Flask

3) 안드로이드 앱 개발에 사용되는 Android

4) 아이폰 앱 개발에 사용되는 Cocoa Touch

5) 웹 개발에 사용되는 React, Angular, Vue.js 등

* React는 라이브러리긴 하지만, 프레임워크처럼 사용하는 듯한 느낌이 든다.


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

가장 큰 차이점은 "코드 흐름의 제어권"이 누구에게 있느냐이다.

 

1. 라이브러리

: 라이브러리의 객체나 함수를 개발자가 직접 호출하여 사용한다.

 

2. 프레임워크

: 개발자가 구현한 메서드가 프레임워크에 의해 호출된다.

: 이를 제어의 역전(IoC: Inversion of Control)이라고 한다.

 

 

예를 들어 모바일 앱 개발 시, 

버튼이 눌렸을 때 수행하고 싶은 작업이 있다면, 아래의 코드처럼 콜백함수만 정의해서 넣어주면 된다.

button.setOnClickListener( 콜백함수(){ ... 작업 내용 ... } );

 

개발자는 버튼이 눌렸을 때 수행할 작업만 콜백함수로 넣어주면 되며,

버튼이 클릭되는걸 감지하는 등의 복잡한 작업과 콜백함수의 호출은 프레임워크가 수행한다.

 

 

또한 안드로이드 앱은 아래 메서드를 정의하는 것으로 개발이 시작된다.

 

@Override
protected void onCreate(Bundle savedInstanceStore){
	// ... 코드 ...
}

 

개발자는 프레임워크가 정해준대로 onCreate라는 이름의 메서드에 필요한 내용을 구현하면 되며,

실제 실행주기에 따라 onCreate메서드를 호출하는건 안드로이드 프레임워크가 알아서 해준다.

(onCreate메서드 자체도 프레임워크가 미리 정해둔 메서드를 오버라이딩하는 개념이다)

 

즉, 프레임워크는 라이브러리처럼 다양한 기능을 제공하지만,

개발자가 직접 필요한 기능을 가져다가 호출하는 방식이 아니라 "프레임워크의 구조에 맞추어" 객체나 함수를 구현해두면

프레임워크에 의해 적절한 시점/상황에 자동으로 호출되고 실행되는 구조라고 볼 수 있다.


본 내용은 정확한 정의(Definition)이라기 보단,

개발을 하면서 느끼는 라이브러리와 프레임워크의 개념과 차이를 나름대로 정리한 것이다.

 

프레임워크는 "프레임워크가 요구하는 방식"을 처음에 학습하는데 시간이 소요되지만,

일단 익숙해지면 개발 시간을 획기적으로 단축해주고, 상대적으로 안전한 구조의 개발을 할 수 있는 장점이 있다.

하지만 내부적으로 돌아가는 원리에 대해 파악하지 못하고 시키는대로만 개발하게 된다는 단점(?)도 있을듯 하다.

그래도 수많은 다양한 기능을 쉽고 빠르고 안전하게 사용하면서 로직에만 집중할 수 있는 점은 큰 장점이라고 생각된다.

댓글