라이브러리와 프레임워크의 차이는 무엇일까?

juny_0429·2023년 4월 19일
0

처음 접하게되면 무슨 차이가 있는지 어렵고 헷갈립니다.
먼저 라이브러리와 프레임워크의 개념에 대해 알아보고 차이점을 알아보겠습니다.



라이브러리(Library)란?

라이브러리는 프로그래밍을 할 때 자주 사용되는 기능들을 미리 작성해 놓은 코드의 집합입니다.

이러한 기능들은 필요할 때 호출하여 사용할 수 있습니다.

라이브러리는 보통 프로그래머가 개발하는 애플리케이션에 추가하여 사용됩니다.



장점

  1. 개발 시간 단축
    라이브러리를 사용하면, 개발자가 기능을 직접 구현할 필요 없이 라이브러리가 제공하는 기능을 활용할 수 있습니다. 이로 인해 개발 시간을 단축할 수 있습니다.

  2. 코드 재사용
    라이브러리를 사용하면, 이미 구현된 코드를 재사용할 수 있습니다. 이는 코드의 중복을 줄이고, 개발 시간을 단축시킬 수 있는 장점이 있습니다.

  3. 안정성과 신뢰성
    라이브러리는 보통 많은 사용자들이 사용하고 있기 때문에, 안정성과 신뢰성이 높은 편입니다. 따라서, 라이브러리를 사용하면 개발자가 직접 구현한 코드보다 안정적이고 신뢰성이 높은 코드를 만들 수 있습니다.

단점

  1. 이해도가 낮을 수 있음
    라이브러리를 사용하다 보면, 라이브러리가 제공하는 코드를 완전히 이해하지 못할 수 있습니다. 따라서, 라이브러리의 동작 방식이나 내부 구현 방법을 이해하지 못하면, 문제 발생 시 대처가 어려울 수 있습니다.

  2. 자유도가 낮을 수 있음
    라이브러리는 라이브러리가 제공하는 기능만 사용 가능하므로, 개발자가 원하는 기능을 추가하기 어려울 수 있습니다. 또한, 라이브러리를 사용할 때 개발자가 원하는 방식으로 동작하지 않을 수 있습니다.

  3. 용량이 크다
    라이브러리는 보통 많은 기능을 제공하기 때문에, 큰 용량을 가지고 있을 수 있습니다. 따라서, 라이브러리를 사용할 경우 애플리케이션의 용량이 커질 수 있습니다. 또한, 라이브러리의 버전이 업데이트될 경우 애플리케이션을 업데이트해야 할 수도 있습니다.



프레임워크(Framework)란?

프레임워크(Framework)는 소프트웨어 개발을 위해 사용되는 구조적인 체계를 의미합니다.

이 체계는 소프트웨어 개발에 필요한 여러 기능들을 미리 구현해 놓은 라이브러리나 API를 제공하여 개발자가 보다 쉽고 빠르게 소프트웨어를 개발할 수 있도록 도와줍니다.


장점

  1. 생산성 향상
    미리 구현된 기능들을 제공하여 개발자가 보다 쉽고 빠르게 소프트웨어를 개발할 수 있도록 도와줍니다. 이는 개발 생산성을 향상시켜 줍니다.

  2. 일관성 유지
    구조와 규칙을 제공하여 개발자가 일관성 있는 코드를 작성할 수 있도록 도와줍니다. 이는 코드 유지보수 및 확장성 측면에서 매우 중요한 요소입니다.

  3. 안정성 향상
    프레임워크는 많은 개발자들이 사용하므로, 많은 테스트와 검증을 거쳐 안정성이 보장됩니다. 따라서 개발자는 안정적인 소프트웨어를 보다 쉽게 개발할 수 있습니다.

단점

  1. 제약 사항
    개발자가 일정한 구조와 규칙을 따라야 하기 때문에, 개발자의 자유도가 제한될 수 있습니다. 이는 개발자가 원하는 기능을 구현하기 위해 제약 사항을 따르지 않고 일부 코드를 작성해야 하는 경우가 있습니다.

  2. 학습 곡선
    새로운 개발자가 프레임워크를 사용하기 위해서는 해당 프레임워크의 구조와 규칙을 이해해야 합니다. 이는 학습 곡선이 상대적으로 높은 단점으로 작용할 수 있습니다.

  3. 유지보수의 어려움
    프레임워크를 사용하면 개발자는 대부분의 코드를 작성하지 않아도 되지만, 이는 반대로 프레임워크를 수정하는 일이 어려울 수 있습니다. 따라서 프레임워크 업데이트에 대한 유지보수 비용이 증가할 수 있습니다.



라이브러리와 프레임워크의 차이점은 무엇일까?

위에서 얘기한 딱딱한 개념 대신 예를 들어서 라이브러리와 프레임워크에 대해 설명해보겠습니다.



우리가 요리를 한다고 했을 때,
라이브러리는 칼, 국자, 집게, 냄비, 후라이팬 같은 요리 도구입니다.

요리를 할 때, 칼로 식재료를 자르고 국자로 뜨고 집게로 잡아내듯, 라이브러리는 개발자가 필요한 작업을 수행할 때 사용하는 도구입니다. 이러한 라이브러리는 자유롭게 사용할 수 있으며, 필요에 따라 적절하게 조합하여 다양한 작업을 수행할 수 있습니다.

말이 안되긴 하지만 냄비로 달걀후라이를 하거나, 국자로 고기를 자르는 것처럼 말이죠

즉, 라이브러리는 요리 도구와 마찬가지로 자유롭게 사용 가능하지만, 각각의 도구는 특정 용도를 가지고 있으며, 그에 따라 적절하게 사용해야 합니다.



프레임워크는 밀키트라고 생각해봅시다.

주어진 재료가 있고 설명서에 따라 요리하는 방법이 정해져 있습니다.
설명서와 다르게 조금씩 바꿀순 있지만 설명서대로 만들면 요리가 완성되도록 되어있습니다.
즉, 결과물이 정해져 있습니다.

이처럼 프레임워크는 개발에 필요한 핵심 구성 요소와 함께 밀키트처럼 미리 준비된 코드와 규칙을 제공합니다. 개발자는 이러한 밀키트를 활용하여 웹 애플리케이션, 앱 등을 만들어낼 수 있으며, 필요에 따라 일부 구성 요소를 수정하여 맛을 개선할 수 있습니다. 하지만, 이러한 구성 요소들은 일정한 규칙과 틀 안에서 작동해야 하기 때문에, 개발자는 이러한 규칙을 따르는 것이 중요합니다.


여기서, 제일 중요한 차이점은 "제어 흐름의 권한"이 어디에 있는가?를 알아야합니다.

라이브러리는 내가 원하는 것을 선택하여 사용하기 때문에 사용자가 코드의 흐름을 직접 제어해야합니다.
반면, 프레임워크는 코드가 프레임워크에 의해 사용됩니다. 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름을 프레임워크가 가지고 있다고 할 수 있습니다.



그러면 프레임워크를 안쓰고 라이브러리만 사용하면 안되나요?

프레임워크를 사용하지 않고 라이브러리만 사용하는 것도 가능합니다.

그러나 이 경우 애플리케이션 전체를 직접 개발해야 하며, 이를 위해서는 충분한 능력과 시간이 필요합니다.

반면에, 프레임워크는 이미 구현된 틀을 제공하기 때문에 빠르게 개발이 가능하며, 수정이나 업데이트도 빠릅니다.
비유하자면, 배고플 때 밥을 먹고 싶어서 요리를 해야하는데 재료부터 구해서 요리하는 것과 비슷합니다. 가능하지만 시간과 노력이 많이 필요합니다.


마지막으로 어떤 기술이든 장단점이 존재합니다. 이러한 장단점을 파악하여 적절한 상황에서 활용하는 것은 개발자로서의 역량을 향상시키는 것입니다.


0개의 댓글