끄적끄적 코딩
article thumbnail
Published 2023. 2. 1. 02:47
[Java] 파싱, XML, SAX Java

공공데이터란?
공공기관이 만들어내는 모든 공적인 정보
각 공공기관이 보유한 데이터를 개방하여 누구나 원하는 기능에 활용 가능
www.data.go.kr 등 회원 가입 후 개별 키를 발급 받아 사용

데이터의 형태
CSV
comma separated value
‘,’로 구분되는데이터 용량이 작지만 구조적이지 못함

xml
Extensible markup language
태그(element)를 이용하여 문서나 데이터의 구조를 명기하는 언어
구조적, 정확한 문법이 필요, 큰 용량

json
javascript object notation 구조를 가지며 객체로 다른 언어와 호환


XML 기본문법

문서의 시작은 <?xml version=”1.0” encoding=”UTF-8”?>로 한다
반드시 root element가 존재해야 한다
나머지 태그들은 Tree형태로 구성 시작 태그와 종료 태그는 일치해야 한다
시작 태그는 key-value 구조의 속성을 가질 수 있다
속성 값은 “ “ 또는 ‘ ‘로 묶어서 표현한다 태그는 대소문자를 구별한다.

valid
xml태그는 자유롭게 생성하기 때문에 최초 작성자의 의도대로 작성되는지 확인할 필요
- 문서의 구조와 적절한 요소, 속성들의 개수, 순서들이 잘 지켜졌는가?
- DTD 또는 Schema를 이용해서 문서의 규칙 작성
DTD와 Schema를 잘 따른 문서를 valid 하다 라고 함

*cdata : XML에서 파싱되지 말아야 될 데이터에 사용 <![CDATA[age < 10]]> // cdata : character data


파싱

문서에서 필요한 정보를 얻기 위해 태그를 구별하고 내용을 추출하는 과정
- 전문적인 parser 활용

SAX parser
- Simple API for XML parser
- 문서를 읽으면서 태그의 시작, 종료 등 이벤트 기반으로 처리하는 방식

DOM parser
- Document Object Model
- 문서를 다 읽고 난 후 문서 구조 전체를 자료구조에 저장하여 탐색하는 방식

* SAX는 빠르고 한번에 처리하기 때문에 다양한 탐색이 어렵다
* DOM은 다양한 탐색이 가능하지만 느리고 무거우며 큰 문서를 처리하기 어렵다
* sax가 dom보다 많이 사용됨

SAX(Simple API for XML) Parser
동작 방식
문서를 읽다가 발생하는 이벤트 기반으로 문서 처리

// 문자를 데이트형식으로 변경
SimpleDataFormat format = new SimpleDataFormat(”yyyy-MM-dd”); 
dateObj = format.parse(date);


DOM parser

동작 방식

문서를 완전히 메모리에 로딩 후 필요한 내용 찾기
DOM Tree
- 문서를 구성하는 모든 요소를 Node(태그, 속성, 값)로 구성
- 태그들은 root 노드(주소록)을 시작으로 부모-자식의 관계 구성)


JSON

Javascript Object Notation (자바스크립트에서의 객체 표현법)
간결한 문법, 단순한 텍스트 ,적은 용량으로 대부분의 언어, 대부분의 플랫폼에서 사용 가능
객체를 key-value의 쌍으로 관리


Swing
Java Application에서 사용되는 GUI를 제공하는 추상적으로 정의된 도구(컴포넌트) 모음
Container
- 다른 컴포넌트들을 배치하기 위한 컴포넌트
- Container는 다른 Container를 포함할 수 있고 나중에 복합적인 Layout을 구성할 수 있게 한다
- JFrame: 독립적으로 사용될 수 있으며 타이틀과 사이즈를 조절할 수 있는 버튼을 가짐
- JPanel: 반드시 다른 Container에 포함되어야 하며 복합적인 레이아웃 구성에 사용

Layout과 LayoutManager
Layout: Component들을 Container에 어떻게 배치할 것인가
LayoutManager: Container별로 Component의 위치와 크기, 배치 방식을 결정하는 객체

FlowLayout
- JPanel의 기본 LayoutManager
- 요소를 가로로 물 흐르듯이 배치

BorderLayout
JFrame의 기본 LayoutManager
특별한 영역 즉, N, S, W, E, C 에 각각의 컴포넌트를 배치

Layout과 LayoutManager
Layout설정
- 생성자 또는 setLayout 메서드로 layout 변경 가능
복합적인 Layout 구성
- Container 안에 또다른 Contatiner를 배치하는 형태로 복합적인 Layout 구성

이벤트 처리 모델(Delegation Model)
위임형 모델 PPT이미지 참조
실제로 이벤트가 일어나는 것은 component이지만 거기서 처리되는 것이 아니라 이벤트 리스너를 등록시킨 후 위임받은 handler 클래스 내에서 이벤트 처리

이벤트 처리 클래스
XX Listener
- 이벤트 처리에 대한 메서드들을 정의한 인터페이스로 handler는 이 인터페이스를 구현
- 하나의 component에 여러 개의 event handle를 붙일 수 있다.

XXEventAdapter
- Listener를 implements 할 경우 사용하지도 않는 이벤트 핸들러까지 다 구현해야하는 단점
- -xxxEventAdapter implements XXListener 

Gson
json 구조를 띄는 직렬화된 데이터를 Java의 객체로 역직렬화, 직렬화 해주는 자바 라이브러리

Gson gson = new Gson(); 
String json = gson.toJson(p); 
System.out.println(json);

Person p2 = gson.fromJson(json, Person.class); 
System.out.println(p2);

SAX 콜백 메서드
startElement() : 태그를 처음 만나면, 발생하는 이벤트
endElement() : 닫힌 태그를 만나면 발생하는 이벤트
characters() : 태그와 태그 사이의 text(내용)을 처리하기 위한 이벤트

'Java' 카테고리의 다른 글

[Java] String 메서드  (0) 2023.02.01
[Java] 람다(Ramda)  (0) 2023.02.01
[Java] I/O와 Stream  (0) 2023.02.01
[Java] List, Set, Map, Sort  (0) 2023.02.01
[Java] try~catch, throws , 사용자 정의 예외  (0) 2023.01.31

검색 태그