Parser란 무엇인가? 언어학에서는 구문 분석기라고도 불리는데 wiki에서의 정의는 아래와 같다.
인터프리터나 컴파일러의 구성 요소 가운데 하나로, 입력 토큰에 내재된 자료 구조를 빌드하고 문법을 검사한다. 파서는 일련의 입력 문자로부터 토큰을 만들기 위해 별도의 낱말 분석기를 이용하기도 한다. 파서는 수작업으로 프로그래밍되며 도구에 의해 (일부 프로그래밍 언어에서) (반)자동적으로 만들어질 수 있다.
출처 : https://ko.wikipedia.org/wiki/%EA%B5%AC%EB%AC%B8_%EB%B6%84%EC%84%9D
이외에 검색을 해보면 표현은 다르지만 본질은 위에서 말하는 것과 같다. 그럼 이러한 parsing을 하는 방식에는 어떤 것들이 있을까? 일반적으로는 DOM과 SAX가 널리 쓰이고 추가로 Android에서는 Pull parser가 쓰이고 있다. 하나한 특징과 장/단덤을 정리해 보자.
DOM : Document Object Model
* 특징
- XML문서를 트리구조로 만듬.
* 장점
- XML문서를 전부 메모리에 올려놓고 작업하기 때문에 어디든 접근 가능하고 데이터를 추가, 수정, 삭제도 가능하다.
* 단점
- XML문서를 처음부터 끝까지 읽어야 하기 때문에 시간이 오래걸리고 메모리에 모두 올려 놓기 때문에 공간을 많이 차지한다.
SAX : Simple API for XML
* 특징
- XML 내용을 하나의 String으로 인식.
- 약속된 tag를 만나면 event 발생.
- event-driven구조로 event를 발생시키고 callback으로 내용을 처리.
* 장점
- 처음부터 순차적으로 읽으면서 tag를 만났을 때만 event를 발생시키기 때문에 메모리를 거의 사용하지 않음. 그래서 큰 XML문서도 parsing할 수 있음. 그리고 속도도 빠르다.
* 단점
- read-only이기 때문에 수정, 삭제, 추가가 안됨.
- 임의의 위치에 접근할 수 없음.
XmlPullParser (Android)
* 특징
- 전체적인 것은 SAX와 비슷하지만 SAX가 자동으로 다음 Tag를 읽는 반면, next() 함수로 다음 tag를 불러줘야 함.
* 장점
- 모든 tag에대해 처리하지 않고 원하는 tag에 대해서만 처리가 가능.
* 단점
- SAX보다 약간 느림.
위의 것 이외에도 몇가지 parser가 존재한다. 하지만 일단은 가장 널리 쓰이고 보편적인 몇가지만 정리해 보았다.
'Computer & Program > 잡다한 이모저모' 카테고리의 다른 글
[Excel] 몫과 나머지 구하기 (0) | 2019.05.30 |
---|---|
10진수 vs 2진수 vs 16진수 (0) | 2018.03.29 |
Modal과 Modeless의 차이 (0) | 2016.01.15 |
Office 확장자 (0) | 2016.01.11 |
Windows에서 한/영 변환 (0) | 2014.08.05 |
댓글