Computer Engineering/컴퓨터 과학(CS: Computer Science)

[CS] 프레임워크(Framework)란 무엇인가?

잇트루 2022. 10. 14. 21:25
반응형

프레임워크(Framework)

디자인 패턴(Design Pattern)을 창시한 GoF의 한 명이자, 프레임워크 설계의 대가 랄프 존슨(Ralph Johnson)은 프레임워크를 “소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하도록 일련의 협업화된 형태로 클래스들을 제공하는 것”이라 정의했다.

 

하지만, 위 문장으로 소프트웨어 관점에서 프레임워크의 의미를 이해하기에는 쉽지 않다.

Frame은 ‘뼈대’, ‘틀’, ‘구조’ 등의 의미를 가지고 있으며, 그림이나 사진을 담는 액자를 프레임이라 부르기도 한다. 자동차의 뼈대가 되는 강판으로 된 껍데기 또한 자동차의 프레임이라고 부른다.

이처럼 Frame은 어떤 대상의 큰 틀이나 외형적인 구조를 의미하는데, 프로그래밍에서도 Frame은 이와 비슷한 의미를 가지고 있다.

하나의 애플리케이션 또는 프로그램을 건물이라고 가정하면, Frame은 위 그림과 같이 건물의 구조, 뼈대라고 이해할 수 있다.

소프트웨어 관점에서의 프레임워크는 우리가 어떠한 애플리케이션 또는 프로그램을 만들기 위한 틀 또는 구조를 제공한다고 생각할 수 있다.

 

다음은 프레임워크에 대한 HTML과 Java에서 사용되는 예시이다.

 

HTML의 frame 태그

현재 널리 사용되는 HTML5에서는 지원하고 있지 않지만, 웹의 초창기 시절에는 HTML 문서를 구성하는 태그로 frame 태그가 존재했다.

 

HTML의 frame 태그의 예

<frameset cols="33%,*,33%">
    <frame name="left" src="/left_menu"/>
    <frame name="center" src="/context"/>
    <frame name="right" src="/right_menu"/>
</frameset>

다음과 같이 과거에는 frameset과 frame 태그를 이용하여 HTML 문서의 틀을 구성할 수 있었다.

 

자바에서의 프레임워크

자바에서는 Collections Framework라는 프레임워크를 통해 Map, Set, List 등의 Collection들을 사용할 수 있다. Collection은 데이터를 저장하기 위해 널리 사용되는 자료구조를 바탕으로 비슷한 유형의 데이터들을 가공 및 처리하기 쉽도록 표준화된 방법을 제공하는 클래스의 집합이다.

 

Collection에 Framework라는 용어를 붙인 이유

Java 클래스의 유형 중 기본적인 뼈대로만 구성되어 있는 개념에는 추상 메서드와 인터페이스가 있다.

Collection은 Map, Set, List와 같은 인터페이스와 그 인터페이스들을 구현한 구현체들의 집합이다.

 

따라서 프로그래밍에서의 프레임워크는 기본적으로 프로그래밍을 하기 위한 어떤 틀이나 구조를 제공한다는 것을 알 수 있다.

 

프레임워크의 장점

효율적으로 코드를 작성할 수 있다.

개발하고자 하는 애플리케이션 또는 프로그램을 아무것도 없는 상태에서 개발하는 것이 아닌 다른 애플리케이션 간의 통신, 데이터를 저장소에 저장하는 등의 다양한 기능들을 프레임워크의 라이브러리 형태로 제공함으로써 개발자가 애플리케이션의 핵심 로직을 개발하는 것에 집중할 수 있도록 해준다.

 

정해진 규약이 있어 애플리케이션을 효율적으로 관리할 수 있다.

사용하는 프레임워크의 규약에 맞게 코드를 작성하기 때문에, 유지보수가 필요한 경우 빠르고 쉽게 문제점을 파악하여 수정할 수 있다.

동시에 작업했던 코드를 다른 사람이 수정할 경우에도 이미 프레임워크의 규약에 맞게 작성된 코드이기 때문에 빠르게 코드를 파악할 수 있다.

 

즉, 유지보수와 비슷한 기능을 개발할 때 코드의 재사용이 용이하고 기능의 확장을 쉽게 할 수 있다.

 

프레임워크의 단점

사용하고자 하는 프레임워크에 대한 학습이 필요하다.

프레임워크에서 정한 규약들을 학습할 시간이 필요하다.

예를 들어 Spring Framework를 사용하기 위해서는 Java, Kotlin 등의 언어뿐만 아니라 추가로 Spring이라는 프레임워크에 대한 학습이 필요하다.

 

자유롭고 유연한 개발이 어렵다.

이미 만들어진 애플리케이션 또는 프로그램에서 다른 프레임워크로 변경하거나, 유연한 개발을 위해 프레임워크를 사용하지 않게 변경할 경우 많은 시간과 노력이 필요로 한다.

 

프레임워크의 종류

  1. Java, Kotlin Groovy 등의 언어에서 사용되는 Spring
  2. Python 언어에서 사용되는 Django, Flask
  3. PHP 언어에서 사용되는 Laravel
  4. Ruby 언어에서 사용되는 Ruby on Rails
  5. 안드로이드 앱 개발을 위한 Android
  6. 아이폰 앱 개발을 위한 Cocoa Touch
  7. 웹 개발을 위한 Angular, Vue.js 등
  8. 자바 언어 기반의 JSP를 위한 Struts
반응형