EFL은 Enlightment Foundation Libraries의 약자로 타이젠 핵심 코어 툴킷입니다.
타이젠은 내부적으로 EFL로 구현되어져 있어, Native App 개발 시 기본적인 개념을 알고 시작한다면 훨씬 쉽게 개발이 가능합니다.
EFL은 UI를 만들기 위한 라이브러리로 기존 툴킷들에 비해 더 빠르고, 더적은 리소스를 사용하여 UI를 구현할 수 있다는 특징을 갖고 있습니다.
EFL은 여러 유용한 라이브러리가 모여진 툴킷인데요, 아래와 같은 블록 다이어그램을 갖고 있습니다.
기본적으로 상위 라이브러리는 하위 라이브러리를 참조하는 구조를 갖고 있습니다.
1. Eina(에이나)
- 자료구조 라이브러리
- C++의 STL과 같이 배열, 리스트, 해시, 트리 그리고 공유 문자열을 쉽게 구현될 수 있도록 제공
2. Eet(이이티)
- 데이터 인코딩 및 디코딩
- 임의의 자료구조, 이미지 데이터 등을 압축하여 파일저장 또는 네트워크 전송
- zip과 유사한 압축기법, 파일로부터 임의의 위치한 데이터에 빠르게 접근 가능
3. Evas(에바스)
- EFL의 핵심 라이브러리, Canvas or Rendering Engine
- 사용자는 Evas를 통해 윈도우 내 이미지, 사각형, 선, 폴리곤, 텍스트 등을 표현하며, 출력물은 모두 객체화
- Evas_Object 타입으로 객체화하여 제공하며, 모든 그래픽 객체들은 Evas_Object인터페이스로 접근
- 기본적으로 evas는 소프트웨어 렌더링 방식을 지원하지만, 플랫폼 환경에 따라 그래픽 H/W가속기능을 백엔드로 지원
- 렌더링 방식은 리테인 모드(retain mode) 채택, 내부적으로 장면그래프(Scene-graph)를 통해 오브젝트를 관리하며 화면상에 보여할 객체들을 적절히 최적화하여 알아서 렌더링 -> 사용자는 복잡한 렌더링 메커니즘에서 자유로워져 로직에만 집중 가능
- 차폐된 렌더링 객체를 걸러내고 클리핑 작업을 통해 최소 렌더링 영역 결정.
* 이미디어트 모드(Immediate Mode) : 렌더링 객체 선별 및 클리핑 작업이 모두 사용자가 구현, 이전 그래픽스 시스템은 대체로 이미디어트 모드.
* Evas는 메인루프 가동 중 화면이 그려지는 시점이 발생, 그러나 매번 화면을 렌더링 하지 않고 이전 루프에서 오브젝트의 변화가 없다면 다시 렌더링 하지 않음
* Scene-Graph : 그래프를 통해 캔버스 상에 변경된 오브젝트들을 추적하여 변경된 영역 계산. 변경된 객체만 Pixel을 계산하여 redraw 수행. 렌더링 부하 감소
* 아래의 경우는 렌더링 제외
- 변화가 없는 경우
- Canvas 영역에서 벗어난 경우
- 가려진 경우
- 크기가 없는 경우
- hide 상태인 경우
- alpha값이 0인 경우
- 클리퍼에 의해 보이지 않는 경우
-> 만약 이미디어트 모드라면, 사용자는 굳이 렌더링 필요가 없는 화면을 새로 갱신하는 비효율적인 작업을 하거나, 실제 갱신된 부분을 다시 계산하는 번거로운 작업을 수행하여야 한다.
4. Ecore(이코어)
- 사용자 편의를 위해 제공되는 시스템 라이브러리
- Main loop, Timer, Event, Connection, IPC, Thread, Window System 등
- 복잡한 설정 및 사용단계들을 내부적으로 처리하여 보다 쉽게 단순화
5. Edje(엣지)
- 복잡한 GUI 구성을 위한 기능들을 제공
- EDC Script 언어 제공, 사용자는 EDC Script를 통해 코드로부터 GUI부분을 분리하여 프로그램 작성
6. Emotion(이모션)
- 비디오/오디오 플레이백
7. Elementary(엘레멘트리)
- 위젯 툴킷 라이브러리 (버튼, 리스트, 레이블, 슬라이더)
- GUI확장성 지원-> 다양한 스크린 해상도 지원, 테마지원, 디바이스 프로파일별 기능 제공
Tizen API는 보통 각라이브러리명으로 시작하고 있습니다.
예를 들면 에바스의 경우 evas_, 이코어의 경우 ecore_, 엘레멘트리의 경우 elm_의 형태를 이루고 있는데요,
각 라이브러리의 역할이 무엇인지 알아두고 있다면 원하는 기능을 찾을 때 훨씬 쉽게 찾을 수 있습니다.
[참고사이트]
http://blog.naver.com/hermet/163998959
'Software Development > Tizen' 카테고리의 다른 글
[TIZEN]6. 타이젠_간단한게임 만들기1_프로젝트생성, 화면방향설정 (0) | 2015.12.25 |
---|---|
[TIZEN]5. 타이젠 Gear(기어) App 개발(Native) (0) | 2015.12.25 |
[TIZEN]3. 타이젠 Basic UI Application 코드 설명 (0) | 2015.12.19 |
[TIZEN]2. 타이젠 네이티브 프로젝트 생성/에뮬레이터 생성 (0) | 2015.12.19 |
[TIZEN]1.타이젠 시작하기 (개념, 환경설정) (0) | 2015.11.16 |