반응형

 

W3C (World Wide Web Consortium) DOM (Document Object Model)

 

DOM : 문서에 접근하는 표준방법.

이를 이용하면 플랫폼 및 개발언어에 독립적으로 문서의 내용, 구조 및 스타일 정보를 핸들링(접근, 수정, 삭제 등) 할 수 있다.

 


- W3C DOM 표준 3가지
Core DOM : 모든 문서타입을 위한 핵심 표준모델(API)
XML DOM : XML문서를 위한 표준 모델
HTML DOM : HTML문서를 위한 표준 모델
HTML DOM은 HTML 엘리먼트 요소 및 속성 정보를 핸들링하기 위한 인터페이스(API) 제공.

 

 

 

  • XML DOM을 이용한 XML문서 생성
package kr.or.ddit.basic;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * XML DOM을 이용한 XML문서 생성하기
 * @author PC-10
 *
 */
public class T01DOMCreationTest {
/*
 * W3C(World Wide Web Consortium) DOM(Document Object Model) 표준에 대하여...
 * 
 * 	DOM은 문서에 접근하는 표준방법으로서, 이를 이용하면 플랫폼 및 개발언어에 독립적으로 문서의 내용,
 * 구조 및 스타일 정보를 핸들링(접근, 수정, 삭제 등) 할 수 있다.
 * 
 * W3C DOM 표준은 크게 다음과 같이 크게 3가지로 나누어 볼 수 있다.
 * 
 * Core DOM - 모든 문서타입을 위한 핵심 표준모델(API)
 * XML DOM - XML문서를 위한 표준 모델
 * HTML DOM - HTML문서를 위한 표준 모델
 * 
 * 예를 들면, HTML DOM은 HTML 엘리먼트 요소 및 속성 정보를 핸들링하기 위한 인터페이스(API)를 제공한다.
 */
	
	public void creatDoc() throws ParserConfigurationException {
		
		// XML문서를 생성하기 위한 DocumentBuilder 객체 생성하기
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();
		
		// Document 객체 생성
		Document document = db.newDocument();
		
		// root 엘리먼트 생성
		Element root = document.createElement("root");
		
		// booklist 엘리먼트 생성
		Element booklist = document.createElement("booklist");
		
		// book 엘리먼트 생성 및 속성값 설정하기
		Element book = document.createElement("book");
		book.setAttribute("isbn", "B001");
		book.setAttribute("kind", "JAVA");
		
		// 자식 엘리먼트 생성 및 설정
		Element title = document.createElement("title");
		title.setTextContent("JAVA초급");
		Element author = document.createElement("author");
		author.setTextContent("이순신");
		Element price = document.createElement("price");
		price.setTextContent("25000");
		
		// book 엘리먼트에 자식 엘리먼트 추가하기
		book.appendChild(title);
		book.appendChild(author);
		book.appendChild(price);
		
		// booklist 엘리먼트에 book 엘리먼트 추가하기
		booklist.appendChild(book);
		// -----------------------------------------------------------
        
		// root 엘리먼트에 booklist 엘리먼트 추가하기
		root.appendChild(booklist);
        
		// 문서에 root 엘리먼트 추가하기
		document.appendChild(root);
	}
}

 

 

=> 위의 파일 html 형태 예시

<root>
	<booklist>
		<book isbn="B001" kind="JAVA">
			<title>JAVA초급</title>
			<author>이순신</author>
			<price>이순신</price>
		</book>
	</booklist>
</root>

 

 

 

  • XML 문서 변환기 생성 및 저장
package kr.or.ddit.basic;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * XML DOM을 이용한 XML문서 생성하기
 * @author PC-10
 *
 */
public class T01DOMCreationTest {
/*
 * W3C(World Wide Web Consortium) DOM(Document Object Model) 표준에 대하여...
 * 
 * 	DOM은 문서에 접근하는 표준방법으로서, 이를 이용하면 플랫폼 및 개발언어에 독립적으로 문서의 내용,
 * 구조 및 스타일 정보를 핸들링(접근, 수정, 삭제 등) 할 수 있다.
 * 
 * W3C DOM 표준은 크게 다음과 같이 크게 3가지로 나누어 볼 수 있다.
 * 
 * Core DOM - 모든 문서타입을 위한 핵심 표준모델(API)
 * XML DOM - XML문서를 위한 표준 모델
 * HTML DOM - HTML문서를 위한 표준 모델
 * 
 * 예를 들면, HTML DOM은 HTML 엘리먼트 요소 및 속성 정보를 핸들링하기 위한 인터페이스(API)를 제공한다.
 */
	
	public void creatDoc() throws ParserConfigurationException, FileNotFoundException, TransformerException {
		
		// XML문서를 생성하기 위한 DocumentBuilder 객체 생성하기
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();
		
		// Document 객체 생성
		Document document = db.newDocument();
		
		// root 엘리먼트 생성
		Element root = document.createElement("root");
		
		// booklist 엘리먼트 생성
		Element booklist = document.createElement("booklist");
		
		// book 엘리먼트 생성 및 속성값 설정하기
		Element book = document.createElement("book");
		book.setAttribute("isbn", "B001");
		book.setAttribute("kind", "JAVA");
		
		// 자식 엘리먼트 생성 및 설정
		Element title = document.createElement("title");
		title.setTextContent("JAVA초급");
		Element author = document.createElement("author");
		author.setTextContent("이순신");
		Element price = document.createElement("price");
		price.setTextContent("25000");
		
		// book 엘리먼트에 자식 엘리먼트 추가하기
		book.appendChild(title);
		book.appendChild(author);
		book.appendChild(price);
		
		// booklist 엘리먼트에 book 엘리먼트 추가하기
		booklist.appendChild(book);
		// -----------------------------------------------------------
		
		// book 엘리먼트 생성 및 속성값 설정하기
		book = document.createElement("book");
		book.setAttribute("isbn", "B002");
		book.setAttribute("kind", "JAVA");
		
		// 자식 엘리먼트 생성 및 설정
		title = document.createElement("title");
		title.setTextContent("JAVA고급");
		author = document.createElement("author");
		author.setTextContent("강감찬");
		price = document.createElement("price");
		price.setTextContent("28000");
		
		// book 엘리먼트에 자식 엘리먼트 추가하기
		book.appendChild(title);
		book.appendChild(author);
		book.appendChild(price);
		
		// booklist 엘리먼트에 book 엘리먼트 추가하기
		booklist.appendChild(book);
		// -----------------------------------------------------------
		
		// book 엘리먼트 생성 및 속성값 설정하기
		book = document.createElement("book");
		book.setAttribute("isbn", "B003");
		book.setAttribute("kind", "DB");
		
		// 자식 엘리먼트 생성 및 설정
		title = document.createElement("title");
		title.setTextContent("DB초급");
		author = document.createElement("author");
		author.setTextContent("일지매");
		price = document.createElement("price");
		price.setTextContent("30000");
		
		// book 엘리먼트에 자식 엘리먼트 추가하기
		book.appendChild(title);
		book.appendChild(author);
		book.appendChild(price);
		
		// booklist 엘리먼트에 book 엘리먼트 추가하기
		booklist.appendChild(book);
		// -----------------------------------------------------------
		
		// book 엘리먼트 생성 및 속성값 설정하기
		book = document.createElement("book");
		book.setAttribute("isbn", "B004");
		book.setAttribute("kind", "DB");
		
		// 자식 엘리먼트 생성 및 설정
		title = document.createElement("title");
		title.setTextContent("DB고급");
		author = document.createElement("author");
		author.setTextContent("성춘향");
		price = document.createElement("price");
		price.setTextContent("35000");
		
		// book 엘리먼트에 자식 엘리먼트 추가하기
		book.appendChild(title);
		book.appendChild(author);
		book.appendChild(price);
		
		// booklist 엘리먼트에 book 엘리먼트 추가하기
		booklist.appendChild(book);
		// -----------------------------------------------------------
		
		// root 엘리먼트에 booklist 엘리먼트 추가하기
		root.appendChild(booklist);
		
		// 문서에 root 엘리먼트 추가하기
		document.appendChild(root);
		
		//////////////////////////////////////////////////////////
		
		// XML 문서 변환기 생성하기
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		
		// 출력 인코딩 정보 설정하기
		transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
		
		// 들여쓰기 설정하기(공백크기 : 2)
		transformer.setOutputProperty(OutputKeys.INDENT, "yes");
		transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
		
		// XML 문서 변환작업 하기
		DOMSource source = new DOMSource(document);
		StreamResult result = new StreamResult();
		
		// 파일로 문서 저장하기
		FileOutputStream fos = new FileOutputStream("./src/new_book.xml");
		result.setOutputStream(fos);
		transformer.transform(source, result); // 변환 시작...
		
		System.out.println("변환 작업 끝...");
	}
	
	public static void main(String[] args) throws FileNotFoundException, ParserConfigurationException, TransformerException {
		new T01DOMCreationTest().creatDoc();
	}
}

 

결과 화면1

 

new_book.xml 파일 생성됨

 

=> new_book.xml 파일

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
  <booklist>
    <book isbn="B001" kind="JAVA">
      <title>JAVA초급</title>
      <author>이순신</author>
      <price>25000</price>
    </book>
    <book isbn="B002" kind="JAVA">
      <title>JAVA고급</title>
      <author>강감찬</author>
      <price>28000</price>
    </book>
    <book isbn="B003" kind="DB">
      <title>DB초급</title>
      <author>일지매</author>
      <price>30000</price>
    </book>
    <book isbn="B004" kind="DB">
      <title>DB고급</title>
      <author>성춘향</author>
      <price>35000</price>
    </book>
  </booklist>
</root>

 

 

 

  • XML 문서 읽기
package kr.or.ddit.basic;

import java.awt.print.Book;
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class T02DOMParsingTest {
	public void parseDoc() throws ParserConfigurationException, SAXException, IOException {
		// XML문서를 생성하기 위한 DocumentBuilder 객체 생성하기
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();

		// Document 객체 생성(기존 문서를 읽어와 파싱하기)
		Document document = db.parse(new File("./src/new_book.xml"));
		
		// root 엘리먼트 접근하기
		Element root = document.getDocumentElement();
		System.out.println("루트 엘리먼트 태그명 : " + root.getTagName());
		
		// 하위 엘리먼트 접근하기
		NodeList bookNodeList = root.getElementsByTagName("book");
		Node firstBookNode = bookNodeList.item(0); // 첫번째 항목 가져오기
		Element firstBookElement = (Element) firstBookNode;
		
		// 앨리먼트 객체의 속성값 가져오기
		System.out.println("firstBookElement 의 속성 isbn 속성값 => "
							+ firstBookElement.getAttribute("isbn"));
		
		// 모든 book 정보 출력하기
		System.out.println("------------------------------------------------------");
		System.out.println("------------------------------------------------------");
		System.out.println("------------------------------------------------------");
	}
	
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
		new T02DOMParsingTest().parseDoc();
	}
}

 

결과 화면2

 

구조

 

 

package kr.or.ddit.basic;

import java.awt.print.Book;
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class T02DOMParsingTest {
	public void parseDoc() throws ParserConfigurationException, SAXException, IOException {
		// XML문서를 생성하기 위한 DocumentBuilder 객체 생성하기
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();

		// Document 객체 생성(기존 문서를 읽어와 파싱하기)
		Document document = db.parse(new File("./src/new_book.xml"));
		
		// root 엘리먼트 접근하기
		Element root = document.getDocumentElement();
		
		// 하위 엘리먼트 접근하기
		NodeList bookNodeList = root.getElementsByTagName("book");
		Node firstBookNode = bookNodeList.item(0); // 첫번째 항목 가져오기
		Element firstBookElement = (Element) firstBookNode;
		
		// 모든 book 정보 출력하기
		System.out.println("------------------------------------------------------");
		System.out.printf("%8s %8s %12s %10s %8s\n", "ISBN", "분류", "제목", "저자", "가격");
		System.out.println("------------------------------------------------------");
		
		for (int i = 0; i < bookNodeList.getLength(); i++) {
			Element bookE1 = (Element) bookNodeList.item(i);
			
			String isbn = bookE1.getAttribute("isbn");
			String kind = bookE1.getAttribute("kind");
			String title = bookE1.getElementsByTagName("title")
							.item(0).getTextContent().trim();
			String author = bookE1.getElementsByTagName("author")
					.item(0).getTextContent().trim();
			String price = bookE1.getElementsByTagName("price")
					.item(0).getTextContent().trim();
			
			System.out.printf("%8s %8s %12s %10s %8s\n", 
								isbn, kind, title, author, price);
		}
		
	}
	
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
		new T02DOMParsingTest().parseDoc();
	}
}

 

결과 화면3

 

 

 

문서 파싱

 

 

package kr.or.ddit.basic;

import java.net.MalformedURLException;
import java.net.URL;

public class T03DOMParsingExam {
	public void parseDOC() throws MalformedURLException {
		String svcKey = "Grid_20150827000000000227_1";  // 레시피 재료 정보 조회 서비스
		String apiKey = "1df7e8571e8df3f8cbc9b87691ca7d3e4d04f03c593d477e52bf67b03f0b6e1c"; // 개인별 발급.
		String startIdx = "1";  	// 레시피 재료 시작 순번
		String endIdx = "5";	// 레시피 재료 종료 순번
		String recipeId = "195428";	// 래시피가 궁금한 음식 ID

		URL url = new URL("http://211.237.50.150:7080/openapi/"+ apiKey
				+ "/xml/"+ svcKey + "/"+startIdx +"/" + endIdx
				+"?RECIPE_ID=" +  recipeId);
		
		System.out.println(url);
	}
	
	public static void main(String[] args) throws Exception {
		new T03DOMParsingExam().parseDOC();
	}
}

 

결과 화면4

 

주소 복사해서 url로 검색하면 나오는 화면

 

 

 

  • url 파싱
package kr.or.ddit.basic;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class T03DOMParsingExam {
	public void parseDOC() throws ParserConfigurationException, SAXException, IOException {
		String svcKey = "Grid_20150827000000000227_1";  // 레시피 재료 정보 조회 서비스
		String apiKey = "1df7e8571e8df3f8cbc9b87691ca7d3e4d04f03c593d477e52bf67b03f0b6e1c"; // 개인별 발급.
		String startIdx = "1";  	// 레시피 재료 시작 순번
		String endIdx = "5";	// 레시피 재료 종료 순번
		String recipeId = "195428";	// 래시피가 궁금한 음식 ID

		URL url = new URL("http://211.237.50.150:7080/openapi/"+ apiKey
				+ "/xml/"+ svcKey + "/"+startIdx +"/" + endIdx
				+"?RECIPE_ID=" +  recipeId);
		
		//System.out.println(url);
		
		// XML문서를 생성하기 위한 DocumentBuilder 객체 생성하기
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();

		// Document 객체 생성(기존 문서를 읽어와 파싱하기)
		Document document = db.parse(url.toString());
		
		Element root = document.getDocumentElement();

		// 전체 레시피 수 접근
		String totalCnt = root.getElementsByTagName("totalCnt")
							.item(0).getTextContent();
		System.out.println("totalCnt : " + totalCnt);
		
		// 모든 레시피 확인 url 다시 생성
		url = new URL("http://211.237.50.150:7080/openapi/"+ apiKey
				+ "/xml/"+ svcKey + "/"+startIdx +"/" + totalCnt
				+"?RECIPE_ID=" +  recipeId);
		
		document = db.parse(url.toString());
		
		root = document.getDocumentElement();
		
		String code = root.getElementsByTagName("code")
						.item(0).getTextContent();
		
		if(code.equals("INFO-000")) { // 정상 조회된 경우....
			NodeList rowNodeList = root.getElementsByTagName("row");
			
			for(int i=0; i<rowNodeList.getLength(); i++) {
				
				Element rowEl = (Element) rowNodeList.item(i);
				
				String rowNum = rowEl.getElementsByTagName("ROW_NUM")
									.item(0).getTextContent();
				String irdntNm = rowEl.getElementsByTagName("IRDNT_NM")
						.item(0).getTextContent();
				String irdntCpcty = rowEl.getElementsByTagName("IRDNT_CPCTY")
						.item(0).getTextContent();
				String irdntTyNm = rowEl.getElementsByTagName("IRDNT_TY_NM")
						.item(0).getTextContent();
				
				System.out.printf("%3s %8s %10s %10s %8s\n", 
									rowNum, recipeId, irdntTyNm, irdntNm, irdntCpcty);
				System.out.println("---------------------------------------------------------");
			}
		}
	}
	
	public static void main(String[] args) throws Exception {
		new T03DOMParsingExam().parseDOC();
	}
}

 

결과 화면5

 

사이트 안의 자료

 

 

 

클래스 다이어그램

 

: 시간에 따라 변하지 않는 시스템의 정적인 면을 보여주는 대표적인 UML 구조 다이어그램이다.

시스템을 구성하는 클래스들 사이의 관계를 표현한다.

 

 

클래스, 속성, 연산으로 구성 되어 있음

 

클래스 다이어그램 예시

 

접근 제어자

 

 

 

  • 관계

 

 

 

1. 연관 관계 (associtation)

 

StarUML 결과 화면1

 

 

2. 일반화 관계 (generalization)

 

: 한 클래스가 다른 클래스를 포함하는 상위 개념일때 두 클래스 사이의 관계

 

 

 

StarUML 결과 화면2

 

 

3. 집합 관계

 

: 전체와 부분의 관계를 명확하게 명시할 때 사용

 

1) 집약 관계 (aggregation) : 한 객체가 다른 객체를 포함하는 것

 

2) 합성 관계 (composition) : 부분 객체가 전체 객체에 속하는 관계

 

 

 

StarUML 결과 화면3

 

 

4. 의존 관계 (dependency)

 

: 클래스가 다른 클래스를 사용하는 경우

 

 

 

StarUML 결과 화면4

 

 

5. 실체화 관계 (realization)

 

: 인터페이스와 클래스들 사이 간의 관계

 

 

 

 

유스케이스 명세서

 

유스케이스(Use case) : 사용 예, 행위자가 유용한 일을 달성하기 위한 시나리오의 집합

 

 

유스케이스 다이어그램은 유스케이스가 제공하는 모든 기능을 명시한다.

 

액터 사이의 일반화 관계

 

 

  • 유스케이스 사이의 관계

 

1. 포함 관계(<<include>>) : 중복적으로 발생하는 흐름을 표현하기 위해 사용

 

 

 

2. 확장 관계(<<extend>>) : 유스케이스에서 특정 조건에서 여러가지 형태로 분류될 경우 사용

 

 

 

 

  • 주의 사항

1. Use Case 간의 관계를 정의할 수 없음

 

 

2. Use Case의 시나리오를 명확하게 나눠야 함

 

 

3. 외부 시스템 Actor는 수행 Actor로 정의하지 않음

 

 

4. Use Case 추출 시 대응되는 필요 기능 필수

 

 

5. 시스템의 기능과 관련 없는 Use Case 추출 금지

 

 

6. Use Case의 역할을 나타낼 수 있는 명칭 사용

 

 

7. 개발 시스템의 이름을 액터로 제작 불가

 ex) 도서 대출 시스템 개발 시 도서 대출 시스템은 액터가 될 수 없음

 

 

 

  • 예시

StarUML 결과 화면5

 

StarUML 결과 화면6

 

 

반응형

'자바' 카테고리의 다른 글

[Java 고급] 23장 소켓  (1) 2024.02.15
[Java 고급] 22장 IP주소 정보  (0) 2024.02.14
[Java 고급] 20장 로깅  (0) 2024.02.08
[Java 고급] 19장 Mybatis  (0) 2024.02.07
[Java 고급] 18장 Singleton 패턴  (0) 2024.02.07