Framework & Library : 둘 다 application을 개발하는데 있어 편의성(쉽고 빠르게) + 코드 재사용 가능


Framework

소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합
설계는 내가 할게 너는 구현만 해!

  • application 개발하는데 있어 기본적으로 필요한 구조(뻐대)와 구성을 갖추고 있음(클래스와 라이브러리가 합쳐진 구조)
    => 뼈대 위에 개발자가 코드를 작성하여 Application을 완성
    • Framework만으로 프로그램이 동작하는것이 아니라 뼈대를 제공하고 그 위에 개발자가 코드를 올려 동작하게끔
  • 코드가 프레임워크에 의해 사용됨(제어의 역전 개념이 적용되어 있어야함)
    ex) Spring, Django, Android, Vue.js


  • ex) 콜백 함수의 정의는 개발자가 하지만 정해진 알고리즘에 따라 그 콜백 함수를 실행하는 건 프레임워크
    💡프레임워크 = 밀키트
    이미 주어진 재료를 가지고 정해진 레시피 대로만 하면 요리완성!
    요리의 완성도는 어느정도 보장되어 있지만 자유도는 떨어짐


Framework의 장점

가이드 제공 + 기본적인 설계 + 라이브러리 제공 ~

  • 개발자가 기능구현에 집중할 수 있도록 함
  • 개발속도 향상
  • 코드의 재사용성 높음, 확장성 높음
  • 객체지향 개발을 하는데 있어 시스템을 일관성있게 관리할 수 있도록 도와줌
    • 여러명의 개발자들이 각자의 취향에 따라 설계하고 코딩하면 관리측면에서 어려움
      -> Framework가 제공하는 뼈대와 가이드에 맞게 설계하고 개발
      -> 시스템의 통합, 일관성 유지 가능


Framework의 단점

  • framework에 따른 별도학습 필요
  • 프로젝트 용량 증가
  • 자유롭고 유연한 개발 불가능



Library

코드작성 시 활용가능한 도구

  • 재사용이 가능한 기능을 미리 구현해놓음
    -> 필요한 곳에서 호출하여 사용할 수 있도록 만들어진 함수들의 집합
    => 개발자가 만든 클래스에서 호출해 사용
  • 단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐
    ex) JQuery, React.js


  • 💡라이브러리 = 팬트리
    요리하는 데에 정해진 규칙은 없지만 재료는 준비되어 있음
    팬트리에 있는 식재료와 식기 등을 원하는 대로 가져가 원하는 대로 요리
    -> 어떤 결과일지는 아무도 모름



Framework & Library 차이점

Flow(흐름)에 대한 제어 권한이 어디에 있는가!

  • Framework는 틀이고, 그 안에서 재사용이 가능하도록 만들어진 도구들이 라이브러리

제목 없음

  • Framework : 전체적인 흐름을 자체적으로 가지고 있음 + 개발자가 그 안에 필요한 코드를 작성
  • Library : 개발자가 흐름에 대해 제어 + 필요한 상황에 가져다 쓰는 것
    = 어디서, 언제 호출할 지 개발자가 결정

=> 한 문장으로 정리하자면 Framework에는 제어의 역전(Inversion Of Control)이 적용되어있음


제어의 역전(Inversion Of Control)

어떠한 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김
-> 클라이언트코드가 신경써야 할 것을 줄임

  • 일반적으로 프로젝트를 생성하고 Main 함수에서 프로그램의 흐름을 정하는 것은 프로그래머의 몫
    • 개발자가 어떠한 순서를 부여하느냐에 따라서 흐름을 제어하는 것이 일반적인 사고
  • but Framework는 실행의 흐름을 프레임워크 자체가 가지고 있어서 코드를 필요에 따라 프레임워크안에 넣어서 개발을 진행해야 함



Reference
https://mangkyu.tistory.com/4
https://cocoon1787.tistory.com/745
https://eroul-ri.tistory.com/5
https://velog.io/@nemo/framework-library-gfreqbgx

업데이트: