본문 바로가기

Old Posts/Java108

[Java] NavigableSet 사용법 및 예제 Java의 NavigableSet 인터페이스는 SortedSet을 상속하는 인터페이스다. Set 인터페이스를 상속한 SortedSet 인터페이스를 상속하고 있기 때문에 NavigableSet 인터페이스를 구현하기 위해서는 Set, SortedSet의 메소드들도 구현해야한다. NavigableSet 이름에서 알 수 있듯이 NavigableSet은 저장되는 엘리먼트들에 Navigation 기능을 더한다. NavigableSet의 JavaDocs를 보면 다음과 같은 설명이 있다. A SortedSet extended with navigation methods reporting closest matches for given search targets. NavigableSet은 SortedSet을 상속하기 때문에.. 2023. 5. 25.
[Java] SortedSet 사용법 및 예제 자바에서 Set은 엘리먼트들의 중복을 제거하기위해 사용된다. 대표적인 구현체로 HashSet이 많이 사용된다. HashSet의 경우 담고 있는 엘리먼트들의 해시 값에 따라 무작위 순서로 순회하게 된다. 반면 SortedSet의 경우 중복을 제거하면서 엘리먼트들의 저장되는 순서를 관리할 수 있다. SortedSet은 이 순서에 따라 엘리먼트들을 순회하게 된다. SortedSet 이름에서 알 수 있듯이 SortedSet은 엘리먼트들을 정렬된 순서로 저장한다. 저장되는 엘리먼트가 Comparable 인터페이스를 구현하고 있다면 compare() 메소드의 로직을 이용하게 되며, SortedSet의 구현체를 생성할 때 Comparator 클래스를 넘겨 엘리먼트들의 대소 비교에 사용할 수 있다. SortedSet은.. 2023. 5. 25.
[Java] NavigableMap 사용법 및 예제 Java NavigableMap 인터페이스는 SortedMap을 상속하는 인터페이스다. Map 인터페이스를 상속한 SortedMap 인터페이스를 상속하고 있기 때문에 Map, SortedMap에 정의되어 있는 메소드를 정의해야한다. NavigableMap NavigableMap은 저장된 Key-Value 엔트리에 Navigation 기능을 더해주고 있다. 즉, SortedMap이므로 Key-Value 엔트리가 정렬된 상태로 저장된다. 여기에 찾고자 하는 Key 값에 가장 가까운 엔트리를 찾는 Navigation 메소드가 추가되었다. NavigableMap의 JavaDocs를 보면 다음과 같이 설명되어 있다. A SortedMap extended with navigation methods returning.. 2023. 5. 25.
[Java] SortedMap 사용법 및 예제 자바에서 Map 인터페이스는 Key와 Value 쌍을 저장하기 위해 사용된다. Map 인터페이스를 상속하여 정의된 SortedMap은 Key와 Value 쌍을 순서를 유지하면서 저장한다. SortedMap Map 인터페이스를 상속하는 SortedMap은 Key-Value 쌍을 정렬된 순서대로 저장한다. Map 인터페이스에서 정의하는 것처럼 Key를 통해 Value를 얻어올 수 있으며, 동시에 정렬된 순서대로 Key-Value 쌍을 순회할 수도 있다. Map에 저장되는 데이터를 순서대로 접근하고 싶은 경우 사용하면 좋다. SortedMap에 저장되는 Key-Value는 Key값의 Natural Order에 맞게 저장된다. Key 클래스가 Comparable 인터페이스를 구현하도록하거나 SortedMap의 .. 2023. 5. 24.
[Java] DelayQueue 사용법 및 예제 자바의 DelayQueue는 java.util.concurrent 패키지에 들어있는 클래스로 AbstractQueue를 상속받고 있으며 BlockingQueue 인터페이스를 구현한다. DelayQueue는 엘리먼트의 딜레이 시간을 기반으로 동작하는 Priority Queue라고 생각하면 된다. 즉 엘리먼트들이 Delay 시간을 기준으로 정렬되어 가장 빨리 딜레이 시간이 끝나는 엘리먼트가 큐의 헤드쪽에 위치한다. 큐에서 엘리먼트를 꺼낼 때, 엘리먼트의 딜레이 시간이 지나지 않았다면 소비할 수 없다. 이후 딜레이 시간이 0보다 작은 숫자가 리턴되면 그 때서야 엘리먼트를 꺼내 쓸 수 있다. DelayQueue 클래스 DelayQueue는 다음과 같은 상속 구조를 가지고 있다. public class Delay.. 2023. 5. 1.
Apple M1 Pro 맥북에 JDK 1.8 설치하기 M1 Pro 맥북에 개발환경을 설치했다. 자바 환경을 설치해야하는데, Oracle JDK는 라이센스 문제가 있어서 사용하지 않는 것으로 가이드되고 있어 OpenJDK를 설치하기로 했다. OpenJDK에도 여러가지 선택지가 있는데 서버환경에서 많이 사용되고 있는 AdoptOpenJDK를 사용하려고 찾아봤더니 애플 실리콘인 M1 Pro의 아키텍처인 arm 아키텍처를 지원하는 JDK는 제공되지 않는 것 같았다. 다른 OpenJDK의 경우 최신 버전은 arm 아키텍처를 지원하지만 내가 써야하는 1.8 버전은 지원되지 않는 경우가 많았다. Azul Zulu 찾아보니 Azul에서 제공하는 Zulu라는 OpenJDK가 있었다. https://www.azul.com/downloads/?package=jdk 로 접속한다.. 2023. 3. 12.
[Java] 자바 어노테이션(Annotation) 사용법 및 예제 - 커스텀 어노테이션 만들기 스프링 프레임워크 기반의 작업을 많이 하는 개발자라면 '어노테이션(Annotation)'을 자주 사용할 것이다. (어노테이션, 애너테이션 등으로 발음하지만 본 포스트에서는 어노테이션으로 명명하겠다) 하지만 스프링 프레임워크를 사용하는 개발자들도 그냥 관용적으로 어노테이션들을 사용하는 경우가 많고, 자바 어노테이션 자체에 대해서 크게 고민해보지 않은 경우가 많이 있다. 1. 자바 어노테이션(Annotation) 자바에서 어노테이션은 사전적의미로는 주석이라는 뜻을 가지고 있다. 자바의 어노테이션은 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다. 메타 데이터란 애플리케이션이 처리해야할 데이터가 아니라 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야하는지를 알려주기 위한 추가 정보다. 자바의 어.. 2022. 10. 7.
[Java] ERROR StatusLogger No Log4j 2 configuration file found. 에러 확인방법 자바를 이용해 프로그램을 작성하다가 다음 에러 메시지를 만나게 되었다. ERROR StatusLogger No Log4j 2 configuration file found. 프로그램의 실행에는 문제가 없었지만 매번 실행할 때마다 경고 메시지가 화면에 출력되어 신경이 쓰였다. 원인 log4j2에 대한 설정 파일을 찾을 수 없어서 발생하는 문제다. 프로젝트의 리소스 디렉토리나 클래스 패스에 log4j2.xml 파일을 생성해 설정을 넣어주면 더 이상 에러메시지가 출력되지 않는다. 2022. 9. 8.
[Java] log4j:WARN No appenders could be found for logger 에러 해결방법 IntelliJ에서 자바 프로젝트를 실행했을 때 다음과 같은 경고 메시지가 출력되었다. log4j:WARN No appenders could be found for logger log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 개발중인 프로그램을 실행하는데에는 문제가 없지만 매번 경고 메시지가 출력되는 것이 신경쓰였다. 경고 메시지가 출력되지 않도록 조치를 취해보자. 원인 메시지의 내용에서 알 수 있듯이 이 메시지는 log4j 관련 메시지다. log4j는 자바로 작성된 애플리케이션에서 로그를 기록하기 위해 .. 2022. 9. 6.