티스토리 뷰

1. Map 개요

1-1. Map 이란?

💡 키와 값을 하나의 쌍으로 저장하는 자료구조.
키는 실제 데이터를 찾기 위한 역할.
Map 이란 Collection 인터페이스와는 다른 저장 방식.
Map의 종류로는 HashMap, HashTable, TreeMap 등이 있다.

인덱스 대신 우리가 만든 Key(중복 불가)로 Value(중복 가능)를 가져온다.

 

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함