개발을 시작한 지 얼마 안 된 초보 개발자들은 "프레임워크", "라이브러리" 라는 개념을 혼동하기 쉽다고 한다.
머릿 속에 정확히 개념이 자리 잡히지 않은 상태에서 사용하는 코린이들도 많다.
그 중 하나가 나다. 눈물 쓰-윽
부끄럽지만 어렴풋이 각 용어에 대한 이해만 있을 뿐 정확한 개념이나 차이점을 잘 모르기 때문에 이번 기회에 확실히 잡고 가려한다.
컴퓨터 프로그래밍에서, 소프트웨어 프레임워크(software framework)는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이다. 간단히 뼈대, 골조(骨組), 프레임워크(framework)라고도 한다.
쉽게 말해 개발자가 구현해야 하는 애플리케이션의 구조와 규칙을 제공하는 도구이다.
예를 들어보자.
프레임워크는 모델하우스를 짓는것에 비유할 수 있다.
모델하우스의 소파의 위치, 의자와 책상의 위치, 방의 용도 등.
우리가 수정할 수 있는 범위는 제한적이다. 주방의 위치, 기둥의 개수, 방의 개수 등 집을 이루고있는 굵직한 뼈대는 수정할 수 없다.
사용자는 모델하우스가 제공하는 청사진 안에서"만" 움직일 수 있다.
프레임워크가 제공하는 틀에 따라 코드를 작성해야 하는것이다.
즉, 통제권은 사용자가 아닌 프레임워크가 쥐고 있다.
라이브러리는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴, 클래스, 값, 자료형 사양을 포함할 수 있다
쉽게 말해 라이브러리는 개발자가 필요한 기능을 사용할 수 있는 도구라고 생각하면 된다.
예를 들어보자.
라이브러리는 이케아에서 산 재료로 가구를 조립하는것에 비유할 수 있다.
집에서 사용할 가구를 조립하거나 만들기 위해 벌목부터 시작해서 목공을 하거나, 가죽을 얻기위해 사냥을 하고싶은 사람은 거의 없을것이다.
그래서 이케아 혹은 가구점에 가서 기본적인 재료를 사서 입맛대로 조립하고 배치할 수 있다.
즉, 재료의 선택권과 같이 통제권은 사용자에게 있는 것이다.
제어역전은 개발자가 작성한 코드가 다른 시스템에 의해 제어되는 것을 의미하는데,프레임워크와 라이브러리의 차이는 제어 역전의 여부에서 비롯된다.
제어역전(IoC : Inversion of Control)은 소프트웨어 개발에서 중요한 개념 중 하나로 프레임워크와 라이브러리의 가장 큰 차이점은 앞서 말했듯 "제어 흐름"이 어디에 있는가이다.
프레임워크는 제어의 역전을 기본 원칙으로 적용하며, 애플리케이션의 실행 흐름을 제어한다.
즉, 프레임워크에게 제어의 흐름을 넘겨 개발자가 작성하는 코드에서 신경 써야 할 부분을 줄인다는 뜻이다.
개발자는 프레임워크가 제공하는 규칙과 구조에 따라 코드를 작성하며, 프레임워크는 개발자가 작성한 코드를 실행하는 동안 필요한 작업을 수행한다.
반면에 라이브러리는 제어의 역전을 적용하지 않고, 개발자가 직접 라이브러리를 호출하여 사용한다.
즉, 개발자가 작성한 코드가 라이브러리에 의해 제어되는 것이 아니라 개발자가 라이브러리를 호출하는 방식으로 사용된다.
정리해보면 프레임워크는 제어역전을 기본 원칙으로 적용하여 개발자가 작성한 코드를 제어한다.
반면에 라이브러리는 개발자가 직접 호출하여 사용하며, 개발자가 작성한 코드가 라이브러리에 의해 제어되지 않는다.
1. 프레임워크는 내 코드를 사용하고
2. 내 코드가 라이브러리를 사용한다