Framework
Framework란?
랄프 존스는 Framework를 아래와 같이 정의했다.
"소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것" - Ralph Johnson -
소프트웨어 관점에서의 Framework는 우리가 어떠한 애플리케이션을 만들기 위한 틀 혹은 구조를 제공한다고 생각하면된다.
Framework의 의미를 Java에서 이미 배웠던 Collections Framework를 통해 찾아볼 수 있다.
Java에서 자주 사용하는 Map이나 Set, List 등의 Collection들은 데이터를 저장하기 위해 널리 알려져 있는 자료구조를 바탕으로 비슷한 유형의 데이터들을 가공 및 처리하기 쉽도록 표준화된 방법을 제공하는 클래스의 집합이다.
Collection에 Framework라는 용어가 붙은 이유
'틀'이나 '뼈대' 같은 단어를 듣게 되었을 때, Java 언어의 구성요소 중에서 어떤 것을 제일 먼저 떠올리는가?
Java 클래스의 유형 중에 기본적인 뼈대로만 구성되어 있는 것은 바로 추상 메서드만 정의되어 있는 인터페이스(Interface)이다. 그리고 Java에서의 Collection은 바로 Map, Set, List 같은 인터페이스와 그 인터페이스들을 구현한 구현체들의 집합인 것이다.
결론적으로 프로그래밍 상에서의 Framework은 기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조를 제공한다라는 것을 알 수 있다.
Framework의 장점
1. 효율적으로 코드를 작성할 수 있다.
아무것도 없는 상황에서 코드를 작성하는 것과, 기본 구조가 만들어져 있는 상황에서 코드를 작성하는 것은 많은 차이가 있다.
개발하고자 하는 애플리케이션을 그 밑바닥부터 일일이 전부 개발하는 것이 아니라 서로 다른 애플리케이션 간의 통신이나, 데이터를 데이터 저장소에 저장하는 등의 다양한 기능들 역시 Framework이 라이브러리 형태로 제공함으로써 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해준다.
2. 정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있다.
우리가 사용하는 Framework의 규약에 맞게 코드를 작성하기 때문에, 유지보수가 필요한 경우 더 빠르고 쉽게 문제점을 파악해 수정할 수 있다.
동시에 내가 작업했던 코드를 다른 사람이 수정할 경우에도 이미 Framework에 규약에 맞게 작성된 코드이기 때문에, 빠르게 코드를 파악하고 수정하기 용이하다.
이는 곧 유지보수 이외에도 비슷한 기능을 개발할 때 코드의 재사용이 용이하고 기능의 확장 또한 쉽게 확장이 가능하다.
Framework의 단점
내가 사용하고자 하는 Framework에 대한 학습이 필요하다.
즉 Framework에서 정하는 규약들을 학습할 시간이 필요하다는 의미다.
Spring의 경우 Java언어에 대한 이해도 필요하지만 추가로 Spring이라는 Framework에 대한 학습이 필요한 이유이다.
자유롭고 유연한 개발이 어렵다.
Framework에 규약을 벗어나기가 어렵다.
건물의 구조자체를 변경해야 한다면 이미 만들어진 것들을 모두 허물고 새롭게 구조부터 만들어야한다.
소프트웨어 관점에서의 Framework도 동일하다. 이미 만들어진 애플리케이션에서 Framework를 변경하거나, 유연한 개발을 위해 Framework를 사용하지 않게 변경할 경우 정말 많은 시간과 노력이 필요하다.
Framework와 Library의 차이
Library는 애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드이다.
소프트웨어 관점에서 Library는 애플리케이션을 개발할 때 필요한 기능을 미리 구현해 놓은 집합체라고 생각할 수 있다.
그럼 Framework와 Library의 차이점을 실생활에 가까운 에로 알아보자.
애플리케이션을 하나의 자동차로 비유하면 자동차를 만들기 위해 필요한 것들은 어떤게 있을까?
차체를 구성하는 Frame, 그리고 바퀴 혹은 핸들 엔진과 같은 다양한 부품들이 모여서 하나의 자동차를 이룬다.
이 자동차를 구성하고 있는 요소에서 Framework는 자동차의 뼈대, 즉 Frame을 의미한다.
그리고, Library는 자동차에서 다양한 기능을 제공하는 부품을 의미한다.
자동차가 나아가기 위한 바퀴, 엔진 또는 밤에 운전하기 위한 라이트, 비가 올 때 필요한 와이퍼등을 생각하면 된다.
자동차를 구매 후, 부품을 교체할 때 Frame은 쉽게 교체할 수 없다.
자동차를 새로 사지 않는 이상 Frame을 교체하는 건 너무 크고 어려운 일이 된다.
하지만 바퀴나 와이퍼, 라이트는 언제든지 쉽게 교체가 가능하다.
이말은 곧 소프트웨어 관점에서도 한번 정해진 Framework를 교체하는 일은 어렵지만, Library는 쉽게 교체가 가능하며 필요한 Library들을 선택적으로 사용할 수 있다는 의미다.
Framework와 Library는 애플리케이션에 대한 제어권의 차이가 있다고 표현할 수 있다.
Library는 애플리케이션 흐름의 주도권이 개발자에게 있는 반면, Framework은 애플리케이션 흐름의 주도권이 개발자가
아닌 Framework에 있다.