배움 __IL/TIL 2기

TIL : Extra-2(enum, hashMap)

Mo_bi!e 2023. 8. 26. 22:58

I.Index

1. enum

2. hashMap

II. enum

자바 백엔드 개발 중 기존 회사의 코드에 enum 을 사용하는것을 보았다. 나는 사용해본적이 없어서 당황스러웠다.

기존 방식을 차용해서 새로운 기능 개발에 사용했지만, 그 필요성과 사용법은 아직 구체적으로 모른다.

 

What (정의) : 서로 연관된 상수들의 집합을 의미한다. Enum은 열겨형(enumerated type)을 의미한다. 즉 하나이상의 상수 값을 정의하고, 그 값을 변수처럼 사용할 수있는 자료형이다. (과거 final static string 같은 방식으로 상수를 정의하는것과 달리)

 

Why (존재이유) : 보다 구조적이고 의미있는 방법으로 다룰 수있게 해줌 -> 결국 상수를 단순히 정수로 보지않고, 객체지향적으로 객체화 해서 관리하는 취지임 즉 독립된 특수한 클래스(객체이기 때문에 별도의 heap메모리에 저장됨)

 

1. 코드의 가독성유지보수성 향상

2. 값의 열거를 도와 프로그램의도 명확히 표현

3. 값의 타입의 안정성 보장, 잘못된 값 사용 오류 방지 : 즉 잘못된 상수값 들어가도  컴파일러가 문제 발견 X 즉 String이라는 같은 타입에 다른값의 String이 들어가는것은 문제시되지않음

 

When (역사적 등장배경) :

기존 다른 언어(C, C++)에도 지원했으나, JAVA는 1.5 부터 도입됨

 

How (방법) :

enum의 각각의 상수값은 ';' 가 아닌 ',' 로 구분한다.

public enum DayOfWeek {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
DayOfWeek today = DayOfWeek.MONDAY;
if (today == DayOfWeek.MONDAY) {
    System.out.println("Today is Monday.");
}

 

e.g. (비유) : 교통신호등의 색 처럼 각각의 값이 명확한 의미를 누구나 이해할 수있게끔 가지고있게된다.

결국 코드가 더욱 의미있는것 처럼 도와준다.

 

 

 

III. hashMap

스프링 개발을 할때 REST API에서 프론트엔드로 값을 보내주거나 받을때, 그리고 마이바티스에서 동적쿼리로 값을 넣을때 hashMap을 사용했는데 구체적인 그 의미와 용도를 아직 이해하지 못했음

 

What (정의) : 해시함수를 사용한 해시테이블을 기반으로 구현된 데이터 구조이다. Key-Value 쌍으로 데이터를 저장하고 검색할 수있다. 즉 다시말하면 내부적으로 각 'Key의 해시코드를 계산'하고, 한계점인 해시충돌 방지위해 다양한 기법 사용함

 

 

Why (존재이유) : 데이터를 빠르게 검색하고 접근하기 위함임 배열,리스트의 경우 선형시간이 필요하다. HashMap은 해시함수로 key를 이용하여 값을 저장하고 내부적으로 배열의 인덱스로 매핑되어 저장된다. 하지만 List의 경우 동적배열 자료구조로서 인덱스를 알아야하며, 중간에 삽입,삭제가 발생 시 요소를 이동시켜야하기 때문에 hashMap보다 느리다.

 

When (탄생이전 역사적 등장배경) :

Java 1.2에서 도입되어 HashTable를 개선한것으로서 보다 높은 성능과 유연성을 제공한다.

 

How (방법) :

// HashMap<타입, 타입>변수명 = new HashMap<타입, 타입>();
// key, value 2개의 값이므로 두개의 타입을 선언해야한다.
HashMap<String, Integer> hashMap = new HashMap<>();

// 데이터 추가
hashMap.put("apple", 5);
hashMap.put("banana", 3);

// 데이터 검색
int appleCount = hashMap.get("apple");
System.out.println("Apple count: " + appleCount);

// 데이터 제거
hashMap.remove("apple");

// 데이터 개수 확인
int size = hashMap.size();
System.out.println("Size: " + size);

e.g. (비유) :

도서관의 인덱스, 혹은 주소록처럼 생각할 수있음

각각의 이름(Key) 에 해당하는 전화번호를 저장하여 검색하는것 처럼, HashMap은 데이터를 특정 Key로 매핑하여 빠르게 접근하고 검색 할 수있는 자료구조이다.