Framework 와 Library의 차이

이용만·2023년 3월 31일
0

Framework : 프로그래밍을 하기 위한 어떠한 틀
Library : 애플리케이션을 개발할 때 필요한 기능을 미리 구현해놓은 집합체

ex)

차체를 구성하는 Frame, 그리고 바퀴 혹은 핸들 엔진과 같은 다양한 부품들이 모여서 하나의 자동차를 이루고 있습니다.
이 자동차를 구성하고 있는 요소에서 Framework는 자동차의 뼈대, 즉 Frame을 의미합니다.
그리고, Library는 자동차에서 다양한 기능을 제공하는 부품을 의미합니다.
자동차가 나아가기 위한 바퀴, 엔진 또는 밤에 운전하기 위한 라이트, 비가 올때 필요한 와이퍼등의 부품이 되겠네요!

실제로 자동차를 구매후, 부품을 교체할때 Frame은 쉽게 교체할 수 없습니다.
자동차를 새로 사지 않는이상 Frame을 교체하는건 너무 크고 어려운 일이 되겠죠.
하지만 바퀴나 와이퍼, 라이트는 언제든지 쉽게 교체가 가능합니다.
이 말은 곧 소프트웨어 관점에서도 한번 정해진 Framework를 교체하는일은 어렵지만, Library는 쉽게 교체가 가능하며 필요한 Library들을 선택적으로 사용할 수 있다는 의미입니다.


프로그래밍 예시

@SpringBootApplication
@RestController
@RequestMapping(path = "/v1/message")
public class SampleApplication {
    @GetMapping
    public String getMessage() {  // (2)
        String message = "hello world";
        return StringUtils.upperCase(message); // (1)
    }

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);

<StringUtils.upperCase(message)> 이 라이브러리입니다.

StringUtils 클래스는 Apache Commons Lang3 라이브러리의 유틸리티 클래스 중 하나인데 애플리케이션이 동작하는 중에 이 StringUtils 클래스의 upperCase() 메서드의 파라미터로 전달하는 문자열(message 변수)을 대문자로 변환하고 있습니다.

그렇다면 StringUtils 클래스가 라이브러리라는 것을 어떻게 판단할 수 있을까요?

애플리케이션 코드는 애플리케이션을 개발하는 사람 즉, 개발자가 작성을 할 것입니다. 이렇게 개발자가 짜 놓은 코드내에서 필요한 기능이 있으면 해당 라이브러리를 호출해서 사용하는 것이 바로 Library입니다.

즉, 애플리케이션 흐름의 주도권이 개발자에게 있는 것

Framework는,,

위의 코드에서 사용한 애너테이션이나 main() 메서드 내의 SpringApplication.run() 메서드는 Spring Framework에서 지원하는 기능들인데 이러한 기능들은 라이브러리와는 다르게 코드 상에는 보이지 않는 상당히 많은 일들을 합니다.

(2)의 getMessage() 메서드 내부의 코드처럼 개발자가 메서드내에 코드를 작성해두면, Spring Framework에서 개발자가 작성한 코드를 사용해서 애플리케이션의 흐름을 만들어냅니다.

즉, 애플리케이션 흐름의 주도권이 개발자가 아닌 Framework에 있는 것입니다.

짧은 내용이긴하지만 Framework과 Library의 차이점을 학습하면서 여러분은 Spring Framework의 핵심 개념인 IoC(Inversion Of Control, 제어의 역전)라는 중요한 개념을 알게된 것입니다.

profile
성장하는 개발자가 되고자 합니다.

0개의 댓글