728x90
728x90

라이브러리와 프레임워크의 차이는 어플리케이션의 Flow(흐름)를 누가 쥐고 있느냐에 달려 있습니다. 라이브러리는 라이브러리를 가져다가 사용하고 호출하는 측에 전적으로 주도성이 있으며 프레임워크는 그 틀안에 이미 제어 흐름에 대한 주도성이 내재(내포)하고 있습니다. 프레임워크는 가져다가 사용한다기보다는 거기에 들어가서 사용한다는 느낌/관점으로 접근할 수 있습니다. 

일반적으로 라이브러리는 프로그래머가 작성하는 클라이언트 코드가 라이브러리의 메소드를 호출해서 사용하는 것을 의미 합니다. 프레임워크를 규정하는 특성은 프레임워크의 메소드가 사용자의 코드를 호출 한다는데 있습니다. 

 

  프레임워크 라이브러리
정의 뼈대, 기반구조 개발자가 만든 클래스에서 호출하여 사용하는 방식
상호 협력하는 클래스와 인터페이스의 집합 도구들의 집합
목적 소프트웨어의 특정 문제를 해결 단순활용
제어 흐름에 대한 주도성 전체적인 흐름을 스스로 가지며 그 안에 사용자가 필요 코드를 짜 넣음 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 씀
특징 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성   
컴포넌트들은 재사용이 가능  
높은 수준에서 패턴들을 조작화
 
추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의 
 

 

라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어합니다.
단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐입니다. 

반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용되는 것입니다. 
보통 프레임워크 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식입니다. 프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 하며 애플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으로 동작해야 합니다.

 

제어의 역전

어떠한 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경 써야 할 것을 줄이는 전략입니다. (프레임워크가 나의 코드를 호출하는 것)

사용방법 1 : event, delegate 에 나의 메소드를 등록하여 사용합니다. 전달 인자와 반환 형식만 일치하면 프레임워크 코드는 내가 작성한 객체와 타입을 고려하지 않습니다. 등록된 메소드만 감지하여 실행 invoke (적용) 합니다.

사용방법 2 : 다른 방법은 프레임워크에 정의되어 있는 인터페이스 interface, 추상타입 abstract 을 나의 코드에서 구현, 상속 한후 프레임워크에 넘겨주는 것입니다. 프레임워크는 인터페이스와 추상을 알고 있으므로 내가 하고자 하는 일련의 작업을 처리할 수 있습니다. 이는 객체를 프레임워크에 주입하는 것이고, 이를 의존성 주입 dependency injection 이라고 합니다.

 

라이브러리는 그냥 함수들이나 기능 모음을 가져다가 쓰는 것이고. 프레임워크는 특정 디자인 패턴이나, 전처리 후처리에 필요한 동작과 기능들을 수행하기 위해서 프레임워크가 실행되다가 중간 중간에 특정 비지니스나, 특정 구현 단에서만 사용자의 코드를 lookup(검색)하여 사용하는 형태라고 할 수 있습니다. 쉽게 라이브러리는 연장으로 좀 바뀌어도 목적만 달성하면 되나 프레임워크는 비행기 차 등으로 정해진 곳으로만 다닐 수 있습니다. 일단 연장으로 탈것을 만들고 규칙에 맞게 핸들만 돌리면 되는 것입니다. (XML에 어떤 태그를 쓸지, 함수를 쓸지, 소스파일을 어디에 넣을 지 등 이미 정해진 프로그래밍 규칙)  

 

아래 유명하신 분의 글을 보고 요약했습니다.

출처: https://webclub.tistory.com/458 [Web Club]

 

728x90
728x90

'Frameworks' 카테고리의 다른 글

싱글톤 패턴(Singleton Pattern)을 쓰는 이유  (0) 2019.11.03
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v