Back-End/Java

    [Java] EnumMap 정리

    토이프로젝트를 진행하며 EnumMap을 사용하는 다른 코드들을 보았다. 기존에 나는 Enum을 사용할 때, Enum 내부에 변수를 추가하는 방식으로 사용하였었지만 Enum 타입을 Map 구조로 다루는 방식과 목적에 대해서 궁금해졌다. 따라서 EnumMap 구조와 장점 사용하는 방식에 대해서 알아보려고 한다. EnumMap이란? Java에서 특정 Enum 타입의 키를 사용하는 맵이다. (HashMap과 유사) 특히 Enum 상수를 효율적으로 다룰 수 있도록 최적화된 구현을 제공한다. 특징과 성능의 장점을 알아보자. 특징 Enum 타입만 key로 사용 가능한 특별한 Map이다. 해싱 과정이 필요 없어 HashMap보다 빠르다. null을 key로 넣는 경우 NullPointerException 발생 Enum..

    [Java] Java 11 vs Java 17, JDK 17 정리

    JDK 11 vs JDK 17 팀 프로젝트 진행 시 JDK11과 JDK17 버전 중 어떤 것을 사용할지 고민한 결과 그동안 많이 접해온 Java 11의 익숙함과 더 많은 정보 량을 가진 Java 11을 결정하기로 하였다. 고민하는 과정에서 공부한 Java 11, Java 17의 변경내용과 JDK17의 중요 업데이트 항목 중 하나인 record 클래스를 정리해보려고 한다. JDK 17까지의 주요 업데이트 JDK 11 Type Features Content 패키지 Jigsaw 모듈 시스템 모듈을 만들고 해당 모듈은 외부에서 호출할 수 있는 API를 제공하여, 언어레벨에선 직접적으로 해당 모듈에 접근이 불가능 패키지 New Garbage Collector, ZGC 추가 새로운 Garbage Collector ..

    [Java] 함수 파라미터의 final 키워드를 사용하는 이유

    요청 데이터를 담고 있는 객체(requestDto) 인프런 jpa 강의에서 Entity를 dto로 변환하여 리턴하는 방식의 중요성을 배웠다. 이후 Dto를 요청 및 응답에 필요한 데이터만 포함시키도록 request, response로 구분하여 프로젝트를 진행하였다. 여기서 Dto를 관리하는 방식을 찾던 도중, Dto를 관리하는 클래스에서 변수명에 final을 사용하는 부분을 볼 수 있었다. 함수의 파라미터에 final을 사용하는 것은 이전 프로젝트를 하면서도 본적이 있지만 넘어갔던 부분이라 Dto에 대해 알아보는 김에 같이 알아보기로 하였다 ! final 키워드란? final 키워드를 사용하면 해당 변수는 값을 변경할 수 없다. 따라서 함수 내부에서 실수로 변수의 값을 변경하는 것을 방지할 수 있다. 또..

    [자료구조] Java 우선순위 큐(Priority Queue)

    우선순위 큐(Priority Queue) Priority Queue란 우선순위 큐로써 일반적인 큐의 구조 FIFO(First In First Out)를 가지면서, 데이터가 들어온 순서대로 데이터가 나가는 것이 아닌 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터가 먼저 나가는 자료구조이며, 힙(Heap)이라고도 부른다. 일반적인 큐의 구조 FIFO (First In First Out)을 가진다. 우선순위를 먼저 결정하고, 우선순위가 높은 데이터가 먼저 나가는 구조이다. Heap을 이용하여 구현하는 것이 일반적이다. 데이터 추출 시, 루트 노드를 얻어 루트 노드를 삭제할 때는 빈 루트 노드 위치에 맨 마지막 노드를 삽입 후 아래 노드로 내려가면서 정렬하는 방식으로 진행된다. 최대 힙 = 최대 값이 우선..

    [Java] StringBuffer, StringBuilder

    백준 알고리즘과 프로그래머스 코딩테스트를 작성하면서 String의 substring을 활용하며 문제를 해결하다가 효율성이 떨어지는 것을 느꼈다. 그래서 찾아보니 문자열을 StringBuilder나 StringBuffer를 통해 append하는 것이 많았다. 이 클래스에 대한 정보를 정리하기 위한 글을 작성하기로 하였다. String 문자열 implements Serializable, Comparable, CharSequence jdk 1.5 이후부터 +연산은 StringBuilder 사용해 성능 최적화 (단, 여러줄에 걸쳐 +할 경우 StringBuilder도 여러 번 선언) 1 2 3 4 5 public final class String implements Serializable, Comparable,..