들어가면서
알기는 아는데
누군가 구술로 물어보면, 뭔가 시원하게 대답하기 힘든 질문.
"프레임워크와 라이브러리는 다른거야?"
오늘 답해본다..
🔁프레임워크
새로운 애플리케이션을 보다 효율적으로 개발할 수 있도록 하는 재사용 가능한 소프트웨어 구성 요소의 모음이다.
소프트웨어 프레임워크에는 특정 소프트웨어 표준 및 프로토콜을 기반으로 재사용 가능한 코드 모듈이 포함되어 있다. 따라서 새로운 애플리케이션을 표준화된 방식으로 개발할 수 있다.
📚라이브러리
미리 기능들(책)을 필요할 때마다 기록된 코드를 빼와서 재사용할 수 있도록 클래스나 함수가 모여있는 집합소(도서관)이다.
개발자가 모든 기능을 매번 직접 개발하기엔 생산성이 떨어지니 라이브러리를 사용한다.
프레임워크와 라이브러리는 모두 소프트웨어 개발에서 반복적인 작업을 없애 코드 중복을 줄여주는 도구이지만, "제어 흐름의 주체와 사용 방식"에 대한 차이가 있다.
🔁프레임워크
제어 흐름의 주체가 프레임워크 자체이다.
개발자는 프레임워크에서 제공하는 규칙과 구조에 맞춰 코드를 작성하고, 그 과정에서 프레임워크가 필요한 시점에 개발자의 코드를 호출한다.
즉, 프레임워크가 제어 흐름을 주도하고, 개발자는 그 흐름에 맞춰 코드를 삽입하는 형태이다.
📚라이브러리
라이브러리는 개발자가 호출하는 도구이다.
개발자가 필요할 때 라이브러리의 함수나 메서드를 호출하여 기능을 사용한다.
즉, 제어 흐름은 개발자에게 있습니다. 개발자가 라이브러리를 호출하면 그때 라이브러리가 수행하고, 다시 제어권이 개발자에게 돌아간다.
🔁프레임워크
프레임워크는 특정한 구조와 패턴을 요구한다. 프레임워크는 개발자가 코드를 작성할 때 이를 특정한 방식으로 구성하도록 유도한다.
예를 들어, Spring Framework는 MVC(Model-View-Controller) 패턴을 따르며, 개발자는 이 패턴에 맞는 구조로 애플리케이션을 작성해야 한다.
📚라이브러리
라이브러리는 보통 단독으로 사용되며, 개발자가 자신이 원하는 기능만 선택적으로 사용할 수 있다.
예를 들어, Java에서 다양한 유틸리티를 제공하는 라이브러리들이 있을 때, 그 중 필요한 부분만 사용하고 나머지는 무시할 수 있다.
Spring Framework
저번 글에서 스프링의 특징을 다루었고, 그 중 "제어의 역전"으로 스프링이 애플리케이션의 흐름을 관리한다는 것을 배웠다.
참고: Spring Framework의 등장 배경과 특징
객체의 생명 주기는 개발자가 아니라 스프링 프레임워크가 관리하며 제어의 주도권은 스프링 프레임워크가 가진다.
또한 MVC 패턴처럼 컨트롤러-서비스-레포지토리 아키텍처 등 프레임워크에 맞는 구조에 개발자가 따라야 한다.
Java Libirary
자바 코드에서 어떤 특정한 라이브러리를 쓰고 싶다면 아래처럼 import를 해야한다.
이러한 코드는 개발자가 직접 작성하는 것으로 제어의 주도권이 개발자에게 있다.
라이브러리란 개발자가 전체적인 규칙을 따르는 것이 아니라 개발자가 원하는 부분만 가져오는 것이다.
import java.util.ArrayList;
import java.util.List;
라이브러리는 제어 흐름이 개발자에게 있으며, 필요한 기능을 선택적으로 호출하여 사용한다.
프레임워크는 제어 흐름이 프레임워크에게 있으며, 개발자는 그 흐름에 맞춰 코드를 작성한다.