CS Interview

라이브러리(Library)와 프레임워크(Framework)

게임이 더 좋아 2020. 12. 1. 01:37
반응형
728x170

 

 

컴퓨터를 하다보면

"라이브러리를 이용하면 되잖아?"

"아니 그런 기능 가지고 있는 라이브러리 없어?"

또는

"아니 그런 프레임워크를 가지고도 그것도 못해?"

"우리 회사는 프레임워크를 제작하는데 힘쓰고 있습니다" 

와 같은 말을 들을 수 있는데 

도대체가 뭐길래 저렇게 쓰느냐 이거다...

?

 

dev.to/juliatorrejon/what-is-the-importance-of-understanding-libraries-and-frameworks-3nfm

오늘은 그 둘에 대해서 알아보자

위의 링크를 봐도 좋다.


 

우선 프레임워크를 설명해보겠다.

사실 사전적의미를 보자면

 

소프트웨어 어플리케이션이나 솔루션의 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경을 말한다.

 

란다. 

 

**솔루션 또는 어플리케이션이 의미하는 바는 

여기서 우리가 처한 문제를 해결하거나 처리를 용이하게 만드는 도구를 말한다.

 

**소프트웨어 프레임워크는 지원 프로그램, 컴파일러 , 코드 라이브러리, 도구 세트, API 등과 같이 프로젝트나 솔루션 개발을 가능하게 하는 여러 가지 서로 다른 컴포넌트들을 포함

 

 

?? 뭐라는겨 

쉽게 말하자면 대학교의 행정시스템이 있다고 하자. 모든 대학교의 시스템은 비슷한게 핵심이다. 그래서 우리는 

"프레임워크"를 가지고 대학교 자체에서 자율적으로 구성한다. 

 

다시 말해서 "대학행정 프레임워크" 에는 수많은 기능이 들어가있다. 

하지만 어떻게 짜야 우리학교에 맞는지는 학교마다 다를 수 밖에 없다. 그래서 프레임워크의 기능을 자기 입맛에 맞게 끼워넣는다.  결국 프레임워크 하나로 여러 대학교의 고유의 대학행정시스템이 만들어지는 것이다.

제일 쉽게 말하면

 

프레임워크는 레고다. 레고 어떤 블럭을 써서 만들지는 맘대로 하면되겠다. 

다만 조건이 있다면 프레임워크는 한정된 레고블럭이다. 

 

1대1 대응시켜서 설명하자면

소프트웨어 어플리케이션이나 솔루션의 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경을 말한다.

 

어플리케이션,솔루션: 내가 레고로 만들 것

 

소프트웨어의 구체적 기능: 내가 원하는 기능을 가진 레고블럭

 

협업화된 형태: 레고는 레고블럭끼리 잘 끼워짐

 

소프트웨어 환경: 그러한 레고 블럭 뭉치들

 

 

왜 프레임워크가 필요하냐?

 프레임워크는 프로그래머들이 어플리케이션에 세부적인 사항을 제외한 공통 부분들의 개발에 드는 시간을 줄이고 세부 요구사항 구현에 집중할 수 있도록 하는 것을 목표로 한다.

 

 

 

프레임워크가 어떻게 쓰이냐?

사용자 응용 프로그램을 개발하기 위한 프레임워크의 예로써 다음과 같은 것들이 있다.

- 의사 결정 지원 시스템
- 웹 애플리케이션 프레임워크
- 미들웨어
- 금융 모델링 애플리케이션
- 멀티미디어 프레임워크
- 엔터프라이즈 아키텍처(enterprise architecture) 프레임워크

 

 

라이브러리랑 왜 묶어서 설명했냐?

 

프레임워크는 명확하게 정의된 API를 가지고 코드를 재사용 가능한 형태로 구조화한다는 점에서 라이브러리와 비슷하다.

라이브러리에서는 호출 측이 전체 프로그램 제어 구조를 지정할 수 없지만, 프레임워크에서는 이러한 제어의 반전(inversion of control)이 가능하다. 또한 라이브러리와 달리 프레임워크는 사용자가 선택적 오버라이딩(overriding, 상속받은 함수를 재정의 하는 것)이나 특정 기능을 수행하는 사용자 코드로 특수화하여 코드를 확장 재사용할 수 있다.

 

 

 

 

 


 

그 다음은 라이브러리를 설명하겠다.

 

프레임워크가 감이 왔으면 라이브러리를 이해하는 것은 어렵지 않다.

라이브러리의 사전적의미를 보고가자

 

다른 프로그램들과 링크되기 위하여 존재하는 하나 이상의 서브루틴이나 function들이 저장된 파일들의 모음을 말하는데, 함께 링크될 수 있도록 보통 컴파일된 형태(object module)로 존재한다.

란다.

 

?? 감이 오면 좋고

아니면 다시 쉽게 말해보자

 

예를들어

그냥 내가 메서드를 구현해야 하긴 하는데... 솔직히 power(거듭제곱)하는 함수는 누가 구현했을 것 같다.

그러면 power method를 포함한 라이브러리를 찾는다. 그것이 바로 math 라이브러리였다. 

그래서 import해서 썼다는 해피엔딩.

 

다시

레고로 설명해보겠다.

 

라이브러리는 내가 필요한 기능을 가진 블럭 뭉치들이다.

**어디있는지는 내가 찾아야 하지만 내가 굳이 블럭을 만들 필요는 없다.  그래서 좋다.

하지만 내가 그 블럭을 조금 변형하고 싶다?? 라이브러리를 건들 수는 없으니까... 그냥 내가 다시 만들어야 한다.

 

와 갓 레고...

레고로 설명이 이렇게 잘되네 ㅎㅎ 

 

아무튼 알아보았다.

 

 

반응형
그리드형