EFL 라이브러리

hoyunadmin 6월 23, 2016 댓글 없음

Tizen Native APP의 핵심인 EFL의 각 라이브러리에서 제공하는 기능과 특징에 대해 알아보겠습니다.

그림4

                                                                                           <ELF 블록 다이어그램>

EFL 블록 다이어그램을 보듯이, EFL은 많은 라이브러리로 구성되어있습니다. 그만큼 EFL은 다양한 기능을 제공하며 확작성을 고려하여 모듈화가 잘 되어있다고 볼 수 있습니다.

위 그림은 EFL 모듈 간의 빌딩 순서를 명확하게 보여주고 있습니다. 예를 들어, Evas의 경우에는 Eet, Eina에 의존하고 있으며, Ecore의 경우 Evas, Eina에 의존하게 됩니다. EFL은 OS를 기반으로 작동하며 EFL 어플리케이션은 EFL의 각 라이브러리가 제공하는 기능들을 이용하여 구연할 수 있습니다. 그럼 각 모듈의 역할에 대해 알아보겠습니다.

1. Eina

Eina는 자료구조 라이브러리입니다. C++의 STL과 같이 배열, 리스트, 해시, 트리 그리고 공유 문자열과 같은 복잡한 로직을 사용자가 쉽고 빠르게 구현할 수 있도록 유용한 기능을 제공합니다.

2. Eet

Eet는 데이터 인코딩 및 디코딩의 역할을 제공합니다. 임의의 자료구조나 이미지 데이터 등을 압축하여 파일로 저장하거나 네트워크를 통해 전송할 수 있습니다. 또한 Eet를 통해 압축된 파일을 읽고 디코딩할 수 있습니다. Zip과 유사한 압축기법을 제공하며 파일로부터 임의의 위치의 데이터에 빠르게 접근할 수 있습니다.

 3. Evas

Evas는 EFL의 가장 핵심으로 볼 수 있는 기능으로 하나의 캠버스 또는 렌더링 엔진으로 불립니다. 사용자는 Evas를 통해 윈도우 내에 이미지, 사각형, 선, 텍스트 등을 표현할 수 있으며 출력물 개별은 모두 객체화가 되어있습니다. Evas_Object 타입으로 객체화 하여 제공하며, Evas_Object 인터페이스로 접근하고 이를 통해 화면 상에 그래픽 객체들을 표현할 수 있습니다. 또한, Evas는 사용자 입력 이벤트 전달 메커니즘도 담당하여 각 오브젝트가 사용자 입력 이벤트에 적절하게 반응할 수 있도록 인터페이스도 제공합니다.

Evas는 렌더링 방식을 리테인 모드(retain mode)를 채택하였으며, 내부적으로 장면그래프(Scene-Graph)를 통해 오브젝트를 관리하며 화면상에 보여야 할 객체들을 적절히 최적화하여 알아서 렌더링을 해준다는 특징을 가지고 있습니다. 이를 통해 사용자는 복잡한 렌더링 메커니즘으로부터 자유로워져 어플리케이션의 주 로직의 구현에 집줄 할 수 있게 도와줍니다.

또한, evas는 기본적으로 소프트웨어 렌더링 방식을 지원하지만, 플랫폼 환경에 따라 오픈지엘 등과 같은 그래픽 H/W 가속 기능을 벡엔드로 지원합니다.

Evas

<Evas의 기본 Workflow>

4. Ecore

Ecore는 사용자들의 편의를 위해 제공되는 시스템 기반 라이브러리입니다. 메인 루프, 타이밍, 이벤트, 스레드, 윈도우 시스템 등과 관련된 기능들을 제공합니다. 복잡한 설정 및 사용단계들을 내부적을 처리해주고 쉽고 단순화하여 사용자에게 제공되므로 사용자들이 직접 시스템 기능들을 구현할 때 시간과 노력을 단축될 수 있도록 도와줍니다.

5. Edje

Edje는 복잡한 GUI 구성을 위한 기능들을 제공합니다. EDC라는 스크립트 언어를 제공하며 사용자는 EDC스크립트를 통해 프로그램 코드로부터 GUI부분을 분리하여 프로그램을 작성이 가능합니다. EDC는 edje_cc 컴파일러를 통해 EDJ바이너리 형태로 변환됩니다. 프로그램은 EDJ파일을 런타임시에 읽어 Evas_Object로 바인딩하여 GUI를 구축할 수 있습니다.

edje

<Edje의 기본 Workflow>

6. Embryo

Embryo는 일종의 바이트코드 가상 머신으로 EDC파일 내에서 구현될 수 있는 작은 프로그램을 위해 이용됩니다. EDC 내에 간단한 기능(단순 계산, 오브젝트 상태 바꾸기 등)을 구현하기 위해 C언어 스타일의 Embryo 스크립트 언어를 추가로 사용할 수 있습니다. 이러한 Embryo 스크립트는 폰(PAWN)컴파일러를 통해 폰 바이너리로 변환됩니다. 폰 프로그램은 기기 환경에 의존하지 않고 Embryo의 AMX(Abstract Machine eXecutive) 가상머신에 의해 해석되어 작동이 가능합니다. 즉, 하나의 출력물을 가지고 다른 기기 환경에서도 동일하게 동작을 보장합니다.

7. Emotion

Emotion은 비디오/오디오 플레이백 라이브러리입니다. Emotion은 Gstreamer, Xine와 같은 다른 비디오 재생 플러그인 등을 이용하여 영상을 재생하고 이러한 영상 출력결과물을 Evas_Object에 연동하여 사용자에게 제공합니다. 사용자는 이를 통해 동영상 재생과 함께 GUI를 결합한 화면 구성을 쉽고 간단하게 구현할 수 있습니다.

8. Elementary

Elementary는 위젯 툴킷 라이브러리입니다. 버튼, 리스트, 레이블, 슬라이더 등과 같은 범용 위젯들을 제공하며, 다양한 룩 앤 필(Look & Feel)을 지원하기 위한 동적 테마 변경, 다양한 스크린 해상도 지원을 제공합니다.

9. Efreet

Efreet는 아이콘, 데스크톱, 파일, 메뉴 등과 관련하여 Freedesktop.org의 표준에 맞춰 작동할 수 있도록 기능을 제공합니다.

10. Eio

Eio는 비동기 입출력을 위한 라이브러리입니다.

11. Ethumb

Ethumb는 frame 이미지를 더한 썸네일 이미지를 생성해주는 기능을 제공합니다.

12. Eeze

Eeze는 udev를 통하여 하드웨어 장비를 조작합니다. 예를 들어 CPU 온도, 전원 배터리와 같은 장비의 상태 및 정보를 얻고 조작하는데 사용됩니다.

13. Eldbus

Eldbus는 메시지 버스 시스템입니다.

14. Languauge Bindings

EFL은 기본적으로 C언어를 지원하며, 그 외에 JavaScript, 파이썬, C++ 등의 랭귀지 바인딩 또한 제공하고 있습니다.

감사합니다.

Prepared by : 신재규

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.