이번에 이에 대한 질문을 면접에서 처음으로 마주하게 되었는데 솔직히 안다고 생각했던 내용이었지만 명확하게 대답하지 못하고 우물쭈물하다가 동문서답을 해버리고 말았다... 그래서 다음에 마주했을 땐 그러지 말아야지 하는 생각으로 조금 더 확실하게 알고자 내용을 적어본다!
개발 시 공통으로 사용할 수 있는 기능들을 모듈화한 것으로 특정 기능을 수행하도록 제작된 프로그램
여러 기능을 가진 클래스, 라이브러리가 특정한 결과물을 구현하기 위해 합쳐진 형태
위 정의들은 여러 글들을 읽어보고 개인적으로 정답에 가깝다고 생각해본 결과들이다. 하지만 뭔가 부실한 느낌이 있고 자세하게 정의된 응답이 듣고 싶어져서 ChatGPT를 활용해보기로 했다!
Library의 정의
Framework의 정의
위 대답을 통해 다시 Framework와 Library를 파악해보면
Library
재사용 가능한 코드와 리소스의 모음
함수, 클래스, 메서드, 데이터 유형 등으로 구성
Framework
소프트웨어의 개발을 위한 구조적인 틀 혹은 플랫폼
미리 정의된 코드와 라이브러리로 구성
이 내용을 보면서 궁금한 점이 안 생길 수 없다. 프레임워크는 라이브러리를 포함할 수 있는데 라이브러리는 프레임워크를 포함할 수 없는 것일까?
예상대로 프레임워크가 라이브러리를 포함할 수 있지만 그 역은 불가능하다는 점을 확인할 수 있었다. 또한, 해당 내용을 통해서 프레임워크와 라이브러리의 중요한 차이점을 확인할 수 있는데..
바로 코드 흐름의 제어권이다. 라이브러리의 경우는 개발자가 라이브러리의 기능을 호출해서 사용하는 형태이지만 프레임워크의 경우, 프레임워크에 의해 개발자의 메서드가 호출되는 형태라는 점이 큰 차이점이 있다고 할 수 있다.
프레임워크에서 나타나는 형태를 IoC (Inversion of Control), 제어의 역전이라고 한다. Dependency Injection과 관련이 있는 내용이니 따로 적을 일이 있을 것이라고 생각해서 크게 내용을 담진 않을 것이다.
카레유님의 Blog
ChatGPT 3.5