[Java] 14_컬렉션(Collection - Properties)

2022. 8. 22. 16:33·📗 self-study/📗 KH정보교육원 당산지원

14_컬렉션(Collection - Properties)

 

  Properties: Map 계열 => key, value 세트로 저장함
       단, Properties만의 특징이라고 한다면
       key, value 모두 String 타입으로 쓰는 것을 권장

=> 파일 입출력에 특화된 타입이기 때문에

package com.kh.chap03.map.part02.properties.run;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

import com.kh.chap03.map.part01.hashMap.model.vo.Snack;

public class PropertiesRun1 {

	public static void main(String[] args) {
		
		Properties prop = new Properties();
		
		/*
		prop.put("다이제", new Snack("초코맛", 1500));
		// String이 아닌 값을 넣을 경우 기존의 Map 계열과 동일하게 put 메소드로 key + value 세트로 넣을 수 있음
		
		System.out.println(prop);
		System.out.println(prop.get("다이제"));
		// 기존의 Map 계열과 동일하게 get 메소드로 value 값을 불러올 수 있음
		
		// 단, 주로 Properties를 사용하는 경우는
		// Properties에 담겨 있는 key + value를 세트로 파일로 기록하거나, 파일에 기록되어 있는 key + value를 가지고 올 경우 주로 사용됨
		// => 파일 입출력에 특화된 타입이기 때문에 "문자열" 형태로 키와 밸류를 지정하는 것이 권장됨
		
		// Properties 에서 제공하는 파일로 출력하는 메소드: store(), storeToXML()
		//			파일로부터 입력받는 메소드: load(), loadFromXML()
		
		try {
			prop.store(new FileOutputStream("test.properties"), "Properties Test");
			// 내부적으로 파일 입출력 시 String 타입이 아닌 다른 타입으로 key, value를 넣어 버리면
			// ClassCastException이 발생함
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		*/
		
	}

}

 

Properties의 put 메소드 이용 시
Key, Value가 모두 Object 타입으로 정의되어 있어서 String이 아닌 다른 값들이 들어갈 수 있는데
setProperty 메소드를 이용하면 key, value 모두 String 타입으로 매개변수를 넣을 수 있음!

	// 1. setProperty(String key, String value)
		prop.setProperty("List", "ArrayList");
		prop.setProperty("Set", "HashSet");
		prop.setProperty("Map", "HashMap");
		prop.setProperty("Map", "Properties");
		
		System.out.println(prop);
		// {Map=Properties, List=ArrayList, Set=HashSet}
		// 저장 순서 유지 X, key값 중복 X, 중복되어도 value가 덮어씌워짐
		
		// Properties를 쓸 때 보통은 값을 추가하고자 할 경우 setProperty 메소드를 사용함
		
		try {
			// 2. store(OutputStream os, String comments)
			// => Properties에 담긴 key - value 값들을 파일로 출력
			prop.store(new FileOutputStream("test.properties"), "Properties Test");
			
			// } catch (FileNotFoundException e) {
			// e.printStackTrace();
			
			// 3. storeToXML()
			// => Properties에 담긴 key - value 값들을 xml 형식의 파일로 출력
			prop.storeToXML(new FileOutputStream("test.xml"), "properties Test");
			// xml: 어느 프로그래밍 언어와 쓰든지 간에 별 탈 없는 확장자
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// {Map=Properties, List=ArrayList, Set=HashSet}
		
		// 2. store 과정 이후 test.properties 파일에 기록된 내용
		// #Properties Test
		// #Mon Aug 22 15:46:08 KST 2022
		// Map=Properties
		// List=ArrayList
		// Set=HashSet

 

파일로부터 읽어들여서 Properties 객체에 담아 두려면
우선적으로 Properties 객체부터 생성해야 함

package com.kh.chap03.map.part02.properties.run;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class PropertiesRun2 {

	public static void main(String[] args) {
		
		Properties prop = new Properties(); // 비어 있는 상태: ()
		
		try {
		// 4. load(InputStream in)
		// => 해당 파일로부터 값을 key - value 세트로 읽어들여 해당 Properties 객체에 값을 넣어 주는 역할
			// prop.load(new FileInputStream("test.properties"));

			// } catch (FileNotFoundException e) {
			// e.printStackTrace();
			
			// 5. loadFromXML(InputStream in)
			// => 해당 xml 파일로부터 값을 key - value 세트로 읽어들여 해당 Properties 객체에 값을 넣어 주는 역할
			prop.loadFromXML(new FileInputStream("test.xml"));
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		// System.out.println(prop);
		// {List=ArrayList, Map=Properties, Set=HashSet}
		
		// 6. getProperty(String key): String value를 리턴해 줌
		// => String 타입의 키값을 제시하면 String 타입의 밸류값을 리턴
		System.out.println(prop.getProperty("List"));
		System.out.println(prop.getProperty("Set"));
		System.out.println(prop.getProperty("Map"));
		System.out.println(prop.getProperty("Collection"));
		
		// ArrayList
		// HashSet
		// Properties
		// null
		// 없는 키값을 제시할 경우 null이 반환됨!

	}

}

 

.properties 파일을 사용하는 경우
우리가 보통 개발 시 해당 프로그램이 기본적으로 가져야 할 환경설정과 같은 정보를 보통 .properties 확장자를 가진 파일에 담아둠
key - value 값들이 문자열로 외부 파일에 보관되면서 나중에 배포되었을 때,

개발자가 아닌 일반 관리자가 손쉽게 환경설정과 관련된 세팅을 다룰 수 있게 됨
=> JDBC 가서 사용할 예정
=> value가 1줄로 끝나야 함
 
.xml 파일을 사용하는 경우
xml 확장자 문서는 다양한 프로그래밍 언어간의 호환이 쉽다는 장점이 있고,
value 값들이 여러 줄이어도 문제 없이 파일에 담길 수 있는 장점이 있기 때문에
프로그램에서 앞으로 사용할 외부 명령문들을 담아 둘 때 주로 사용됨
=> JDBC 가서 사용할 예

저작자표시 (새창열림)
'📗 self-study/📗 KH정보교육원 당산지원' 카테고리의 다른 글
  • [Oracle] 00_Oracle 11g XE 개발 환경 구축
  • [Oracle] 00_Oracle Database의 개요
  • [Java] 14_컬렉션(Collection - Map)
  • [Java] 14_컬렉션(Collection - Set)
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[Java] 14_컬렉션(Collection - Properties)
상단으로

티스토리툴바