삶의 공유

[Java] Map의 개념 정리 (feat. Python Dict) 본문

Programing언어/Java

[Java] Map의 개념 정리 (feat. Python Dict)

dkrehd 2025. 4. 22. 15:36
728x90
반응형

🔧 Map<String, String> env 동작 구조로 Map의 개념 정리

Map<String, String> env = System.getenv();
 

이 코드는 운영체제 환경변수를 Key-Value 구조로 가진 Map 객체를 반환합니다.


1️⃣ Map개념

Java에서 Map은 Key와 Value의 쌍으로 데이터를 저장하는 자료구조입니다.

  • Key: 유일해야 함 (중복 X)
  • Value: 중복 허용
  • 대표 구현체: HashMap, TreeMap, LinkedHashMap

🔍 Map Details

항목설명
정체 인터페이스 (java.util.Map)
종류 Key-Value 쌍 저장용 자료구조
구현체 HashMap, TreeMap, LinkedHashMap, Hashtable 등
역할 데이터를 키로 빠르게 검색, 저장, 삭제
사용 형태 Map<K, V> map = new HashMap<>();

2️⃣ System.getenv()가 반환하는 Map은 어떤 동작을 하나요?

System.getenv()가 반환하는 Map은 보통 내부적으로 다음 동작을 수행합니다:

env.get("JAVA_HOME");       // 특정 키의 값 조회
env.containsKey("PATH");    // 특정 키 존재 여부 확인
env.keySet();               // 모든 키 반환
env.values();               // 모든 값 반환
 
 

다만! System.getenv()의 반환 Map은 다음과 같은 특징이 있어요:

특성설명
읽기 전용 값을 수정하거나 put(), remove() 호출 시 UnsupportedOperationException 발생
실행 시 고정 Java 실행 시점에 시스템으로부터 읽어오기 때문에 중간에 갱신되지 않음
Thread-safe 아님 환경 변수는 일반적으로 불변이므로 동시성 문제는 없음

3️⃣ 내부적으로 어떻게 동작할까?

자바 내부에서는 System.getenv() 호출 시, OS에서 환경변수 정보를 받아 JVM 내에 초기화된 native Map 객체로 바인딩합니다.

  • 이 Map은 기본적으로 HashMap 유사 구조를 가짐
  • 하지만, JVM 내부 전용 구현체이므로 일반적인 HashMap처럼 수정은 안 됨
  • Java에서는 읽기 전용 래퍼를 제공 (Collections.unmodifiableMap() 형태 유사)

🧠 예시: 환경변수 출력

 

Map<String, String> env = System.getenv();

for (String key : env.keySet()) {
    System.out.println(key + " = " + env.get(key));
}

 

✅ 모든 환경변수를 확인할 수 있고, @Value("#{systemEnvironment['LOGNAME']}에서 쓸 key가 뭔지 확인할 때 유용합니다!


📝 요약

항목설명
반환 타입 Map<String, String>
내용 시스템 환경 변수 (Key: 변수명, Value: 값)
수정 가능 여부 ❌ 읽기 전용 (변경 불가)
구현체 구조 내부적으로 HashMap 유사, 변경 불가
대표 사용 목적 설정 확인, @Value와 연동, 디버깅 등

 

Java의 Map과 Python의 dict는 기본적인 구조와 역할이 거의 동일합니다.
둘 다 Key-Value 쌍으로 데이터를 저장하고, 빠르게 값을 조회하는 데 사용됩니다.


🧠 Java Map vs Python dict 비교

 

선언 및 초기화 Map<String, String> map = new HashMap<>(); my_dict = {}
값 추가 map.put("key", "value"); my_dict["key"] = "value"
값 조회 map.get("key"); my_dict["key"] 또는 get("key")
키 존재 여부 확인 map.containsKey("key") "key" in my_dict
반복 처리 for (String k : map.keySet()) for k in my_dict:
삭제 map.remove("key") del my_dict["key"]
정렬 여부 기본 미정렬 (LinkedHashMap 예외) Python 3.7부터는 기본적으로 정렬 유지
Null 키 허용 여부 허용 (HashMap은 허용, Hashtable은 불가) 허용 (None 사용 가능)

 

✅ 결론

Java의 Map<K, V> 와 Python의 dict는 기능적으로 매우 유사하며,

  • 검색 속도가 빠르고
  • Key 중복이 불가능하고
  • Value는 중복 가능한 구조

이라는 점에서도 동일하다고 볼 수 있습니다.

 

반응형