티스토리 뷰
1. Map 개요
1-1. Map 이란?
💡 키와 값을 하나의 쌍으로 저장하는 자료구조.
키는 실제 데이터를 찾기 위한 역할.
Map 이란 Collection 인터페이스와는 다른 저장 방식.
Map의 종류로는 HashMap, HashTable, TreeMap 등이 있다.
2. HashMap 개요
2-1. HashMap 이란?
💡 Map 인터페이스를 구현하고 있는 클래스 중에 가장 자주 쓰이는 클래스.
Key-Value 쌍으로 데이터를 저장하며 다양한 value를 가질 수 있지만 Key는 중복이 안된다.
2-2. HashMap 특징
- 저장은 느리지만 Hashing 이라는 해시 함수를 이용해서 데이터를 해시 테이블에 저장하기 때문에 검색 측면에서 뛰어나다.
- Key는 중복이 불가능하지만, value는 중복이 가능하다.
- 중복된 키 값에 값을 저장하면 기존의 값에 새로운 값이 덮어 씌어진다.
package com.ohgiraffers.section03.map.run;
import com.ohgiraffers.section01.list.dto.BookDTO;
import java.util.*;
public class Application1 {
public static void main(String[] args) {
/* 수업목표. Map의 자료구조에 대해 이해하고 HashMap을 이용할 수 있다. */
Map<Object, Object> hMap = new HashMap<>();
hMap.put("one", new Date());
hMap.put(12, "red apple");
hMap.put(33, 123);
System.out.println("키가 \"one\"인 value 값: " + hMap.get("one")); // 다운캐스팅 왜 해야하지? Object면 그냥 다 가능한 거 아닌가????????
System.out.println("Map의 toString(): " + hMap);
hMap.put(new BookDTO(1, "홍길동전", "허균", 50000), "허균의 홍길동전이면 오케이!");
// null 값이 나온다.(동등으로 보지 않아서???????????????????????) BookDTO에서 e,h 오버라이딩해줘야 한다.
System.out.println("map의 키 값으로 활용되는 객체를 활용: "
+ hMap.get(new BookDTO(1, "홍길동전", "허균", 50000))); // 동등??????????????
/* 설명. 키 값은 중복되면 안되지만 중복될 경우 나중의 키와 밸류가 기존의 값을 덮어 씌운다. */
hMap.put(12, "purple banana");
System.out.println("hMap = " + hMap);
/* 설명. 밸류 값은 중복되어도 상관 없이 추가 된다. */
hMap.put(34, 123);
System.out.println("hMap = " + hMap);
System.out.println("Map이 지닌 entry의 수: " + hMap.size());
System.out.println("34번 키와 관련된 entry 삭제: " + hMap.remove(34)); // 어떤 값이 삭제되는지 한 번 출력해주긴 한다.
System.out.println("삭제 후 entry의 수: " + hMap.size());
/* 설명. Map을 활용해 보자.(반복하여) */
Map<String, String> hMap2 = new HashMap<>();
hMap2.put("one", "java 17");
hMap2.put("two", "mariaDB 10");
hMap2.put("three", "servlet/jsp");
hMap2.put("four", "springboot 3.0");
hMap2.put("five", "vue.js");
/* 목차. 1. keySet()을 활용한 iterator 반복하기(feat. key 값만 set으로 변환하자) */ // HashMap 무조건 알아야한다. 하나씩 뽑는 것...
Set<String> keys = hMap2.keySet();
Iterator<String> iter = keys.iterator();
while (iter.hasNext()) {
String key = iter.next();
System.out.println("key: " + key + ", value: " + hMap2.get(key));
}
/* 목차. 2. entrySet()을 활용한 iterator 반복하기(feat. key + value set으로 변환하자) */
Set<Map.Entry<String, String>> set = hMap2.entrySet();
Iterator<Map.Entry<String, String>> iterEntry = set.iterator();
while (iterEntry.hasNext()) {
Map.Entry<String, String> entry = iterEntry.next();
System.out.println("key값: " + entry.getKey() + ", value값: " + entry.getValue());
}
}
}
// 실행 결과
키가 "one"인 value 값: Wed Jul 24 18:32:55 KST 2024
Map의 toString(): {33=123, one=Wed Jul 24 18:32:55 KST 2024, 12=red apple}
map의 키 값으로 활용되는 객체를 활용: 허균의 홍길동전이면 오케이!
hMap = {33=123, one=Wed Jul 24 18:32:55 KST 2024, BookDTO{number=1, title='홍길동전', author='허균', price=50000}=허균의 홍길동전이면 오케이!, 12=purple banana}
hMap = {33=123, 34=123, one=Wed Jul 24 18:32:55 KST 2024, BookDTO{number=1, title='홍길동전', author='허균', price=50000}=허균의 홍길동전이면 오케이!, 12=purple banana}
Map이 지닌 entry의 수: 5
34번 키와 관련된 entry 삭제: 123
삭제 후 entry의 수: 4
key: four, value: springboot 3.0
key: one, value: java 17
key: two, value: mariaDB 10
key: three, value: servlet/jsp
key: five, value: vue.js
key값: four, value값: springboot 3.0
key값: one, value값: java 17
key값: two, value값: mariaDB 10
key값: three, value값: servlet/jsp
key값: five, value값: vue.js
3. Properties 개요
3-1. Properties 이란?
💡 Hashtable 을 상속 받아 구현한 것으로 (Object, Object)의 형태로 저장하는 해시테이블과 달리 (String, String) 형태로 저장.
주로 환경 설정과 관련된 속성을 저장하는데 사용.
3-2. Properties 특징
- 프로그램 환경 설정과 관련된 데이터를 읽어올 때 주로 쓴다.
- Key, Value 모두 String 이기 때문에 제네릭이 필요하지 않다.
package com.ohgiraffers.section03.map.run;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class Application2 {
public static void main(String[] args) {
/* 수업목표. Properties에 대해 이해하고 활용할 수 있다. */
/* 설명.
* Properties란?
* HashMap과 거의 유사하지만 key와 value 모두를 String으로만 사용할 수 있는 자료구조이다.
* (제네릭을 별도로 요구하지 않음)
* 주로 설정 파일 관련된 파일과의 입출력에 사용된다.(store, load 등)
* */
Properties prop = new Properties(); // 제네릭 타입이 없다 -> 무조건 String / Map 계열
prop.setProperty("driver", "oracle.jdbc.driver.OracleDriver");
prop.setProperty("url", "jdbc:oracle:thin:@localhost:1521:xe");
prop.setProperty("user", "swcamp");
prop.setProperty("password", "swcamp");
System.out.println("prop = " + prop);
/* 설명. Properties를 활용한 설정정보 파일로 출력해 보기 */
try {
// prop.store(new FileOutputStream("driver.dat"), "jdbc driver");
prop.storeToXML(new FileOutputStream("driver.xml"), "jdbc driver xml version");
} catch (IOException e) {
throw new RuntimeException(e);
}
/* 설명. 저장된 설정 파일에서부터 읽어온 데이터를 담을 새로운 Properties 객체 */
Properties prop2 = new Properties();
System.out.println("읽어오기 전: " + prop2);
try {
// prop2.load(new FileInputStream("driver.dat"));
prop2.loadFromXML(new FileInputStream("driver.xml"));
} catch (IOException e) {
throw new RuntimeException(e);
}
System.out.println("읽어온 이후 ===========================");
System.out.println("driver: " + prop2.getProperty("driver"));
System.out.println("url: " + prop2.getProperty("url"));
System.out.println("user: " + prop2.getProperty("user"));
System.out.println("password: " + prop2.getProperty("password"));
}
}
// 실행 결과
prop = {password=swcamp, driver=oracle.jdbc.driver.OracleDriver, user=swcamp, url=jdbc:oracle:thin:@localhost:1521:xe}
읽어오기 전: {}
읽어온 이후 ===========================
driver: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:xe
user: swcamp
password: swcamp
'한화시스템 > 백엔드' 카테고리의 다른 글
[BE] JAVA_Stream (0) | 2024.07.29 |
---|---|
[BE] JAVA_ENUM (0) | 2024.07.24 |
[BE] JAVA_컬렉션(Collection)_Set (1) | 2024.07.24 |
[BE] JAVA_컬렉션(Collection)_List (1) | 2024.07.23 |
[BE] JAVA_컬렉션(Collection)_개요 (1) | 2024.07.23 |