2008. 6. 27. 15:33ㆍSoftware Engineering
최근에 Mobile Platform 및
각종 기술 동향을 알아보던 중 무심코 사용하던 용어에 대한 정의가
궁금해졌다. .NET Framework, Java Platform, Mobile Platform,
Win32 Platform, UI Framework 등
Framework와 Platform이라는 용어가 자주 등장하는데 구체적으로 어떤 의미를
담고 있는지
한 번 알아보도록 하자.
1. (Computing) Platform
우선 Platform이라는 용어를 인터넷 백과사전인 Wikipedia에서
알아보았다.
In computing, a platform
describes some sort of hardware architecture or
software framework (including
application frameworks), that allows software to run.
Typical platforms include a computer's architecture, operating
system,
programming languages and related runtime libraries or
graphical user interface.
간단하게 말하자면 소프트웨어를 실행하게 해주는 환경(소프트웨어
또는 하드웨어 일부)이라고 볼 수 있다. Runtime 라이브러리, GUI, 프로그래밍 언어, OS, 컴퓨터 아키텍쳐를 포함하므로 우리가
사용하는 윈도우나 Linux와 같은 OS도 Platform으로 정의할 수 있다. Hardware Platform에
대해서는 Wikipedia에서 언급이 되지만 Framework와는
비교하기 힘드니 여기서는 넘어가기로 하자.(Hardware Framework는 들어 본 적이 없다.)
Java Runtime 환경과 .NET Runtime 환경도 Java 또는 .NET App를 실행하므로 Platform으로 정의할 수 있다. 그럼 왜 .NET은 .NET Framework이라는 이름을 붙였을까? 그건 조금 의문이다. .NET Framework는 요 밑에 Framework의 용어를 알아보면서 정리하도록 하자. 인터넷 환경의
웹 서비스 및 웹 컨텐츠를 실행하도록 하는 브라우저 및 웹 서버 등도 일종의 Platform으로 정의
할 수 있겠다. Mobile Platform은 Wikipedia에서 Mobile OS로 정의되어 있다.
2. Framework
알아보고자 하는 Framework는 일반적인 골격 또는 뼈대를 이야기하지만
여기서 알아볼 것은 Software Framework으로
Wikipedia에도 Computing 환경에서의
Framework을 Software Framework로 정의하고 있다.
Framework는 Wikipedia에서 무엇으로 정의하는지
알아보자.
A software framework is "the skeleton of an application that can be customized by an application
developer". Like software libraries, it aids the software developer by
containing source code that solves problems for a given domain and provides a
simple API. However, while a code library acts like a servant to other
programs, software frameworks reverse the master-servant relationship. This
reversal, called inversion of control, is the essence of software frameworks.
직역을 하자면
Software Framework란 소프트웨어 라이브러리와 같이 어플리케이션 개발자에 의해 커스터마이징 할 수 있는 어플리케이션의
골격이다. 무슨 말이냐? 조금 더 직역을 해보자.
간단한 API를
제공하고 주어진 도메인에서의 문제를 해결하는 코드를 포함함으로써 개발자를 도와준다. 그러나 Code Library는 다른 프로그램의 하인으로 동작하는 반면에
Software Framework는 주인-하인 관계보다는 그 반대이다. 이러한 제어의 반전이 Software Framework의 핵심이다.
무언가 이래서 영어는 어렵다. 일종의
Control Flow의 역 관계로 생각하기로 하자. Code Library는 Application에서 API를 호출하지만, 그에 비해 Software Framework는 API도 제공하지만 Application도 실행할 수 있는 관계로
생각 할 수 있다.
Wikipedia의 정의만을 갖고는 Software Framework를 잘 이해 할 수가
없다. 삼성경제 연구소에서 답변한 프레임워크에 대한 정의를
보면 “다른 소프트웨어 프로젝트가
개발 될 수 있는 뼈대 구조”로 지원 프로그램, 라이브러리, 언어, 다른 소프트웨어의 구성요소를 엮어주는 소프트웨어를 포함한다고
한다.
따라서 Platform도 일종의 Framework라고
할 수 있으며, .NET Platform을 .NET Framework라
부르는 것도 틀린 것이 아니라고 한다. UI 프로그램 개발을 위한 부분은 Framework라고 할 수 있다. UI 프로그램 개발 부분은 완전한
소프트웨어 실행 환경이 되지 않으므로 Platform은 아니지만 Framework로
볼 수 있다. (UI Framework)
그림 1 .NET Framework in context