본문 바로가기

포스트464

[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.
[Linux] '/proc/diskstats' 파일 리눅스는 시스템의 다양한 정보를 /proc 디렉토리 하위에 있는 파일을 통해 제공한다. 이번 포스트에서는 /proc/diskstats 파일에 대해 알아보자. /proc/diskstats 파일 /proc/diskstats 파일은 시스템에 있는 블록 디바이스들의 입출력 통계 정보를 출력해준다. cat 명령을 통해 /proc/diskstats 파일의 내용을 조회해보면 블록 디바이스 이름과 다양한 숫자들이 화면에 출력된다. [root@6f9963e1a7aa /]# cat /proc/diskstats 252 0 vda 13523 61 847172 2801 1330009 31047 225631031 1399426 0 870390 1523579 4707 0 386812040 173 64168 121177 252 1 .. 2023. 5. 23.
오픈소스 라이센스 총 정리 (GPL, AGP, SSPL, LGPL, MIT, BSD, Apache, JSON) 오픈소스 소프트웨어란 소프트웨어의 저작권 소유자가 소스코드를 자유롭게 사용하고 변경, 배포 할 수 있도록 모두에게 공개한 소프트웨어를 말한다. 다만 오픈소스에는 라이센스 조건이 붙는 경우가 많다. 모두가 자유롭게 사용하고 변경, 배포할 수 있지만 지켜야 할 사항이 존재하는 것이다. 오픈소스 라이센스를 제대로 이해하지 않고 사용할 경우 법적 소송에 휘말려 금전적 피해를 입게 될 가능성도 있다. 따라서 오픈소스를 도입해 서비스를 개발하기 전에 도입하려는 오픈소스의 라이센스 조건을 제대로 알고 있어야 한다. 목차 저작권(Copyright) 저작권(Copyright)이란 창작물의 원작자가 소유한 법적인 권리를 말한다. 창작물을 만들기 위해 들어간 원작자의 노력과 창작물에 대한 저자의 가치를 보호하기 위해 존재하.. 2023. 5. 2.
[Java] DelayQueue 사용법 및 예제 자바의 DelayQueue는 java.util.concurrent 패키지에 들어있는 클래스로 AbstractQueue를 상속받고 있으며 BlockingQueue 인터페이스를 구현한다. DelayQueue는 엘리먼트의 딜레이 시간을 기반으로 동작하는 Priority Queue라고 생각하면 된다. 즉 엘리먼트들이 Delay 시간을 기준으로 정렬되어 가장 빨리 딜레이 시간이 끝나는 엘리먼트가 큐의 헤드쪽에 위치한다. 큐에서 엘리먼트를 꺼낼 때, 엘리먼트의 딜레이 시간이 지나지 않았다면 소비할 수 없다. 이후 딜레이 시간이 0보다 작은 숫자가 리턴되면 그 때서야 엘리먼트를 꺼내 쓸 수 있다. DelayQueue 클래스 DelayQueue는 다음과 같은 상속 구조를 가지고 있다. public class Delay.. 2023. 5. 1.
[IntelliJ] PlantUML Integration 플러그인 설치 및 사용법 소프트웨어 개발에 있어 문서화의 중요성은 매번 강조된다. 그 중에 UML(Unified Modeling Language) 다이어그램은 가장 많이 사용되는 도구 중 하나다. PlantUML은 텍스트만으로도 UML 다이어그램을 그릴 수 있게 도와주는 오픈소스 소프트웨어다. 인텔리제이에는 PlantUML을 이용해 UML 다이어그램을 그릴 수 있는 PlantUML Integration 플러그인이 있다. PlantUML Integration 플러그인 설치 Settings > Plugins > Marketplace 에서 PlantUML Integration을 검색하자. Install 버튼을 눌러 설치한 후 인텔리제이를 재시작하자. PlantUML Integration 사용법 이제 인텔리제이에서 새로운 파일을 생성할.. 2023. 4. 30.
[IntelliJ] Saving Actions 플러그인 설치 및 사용법 - Actions on Save 기능 인텔리제이를 이용해 소스코드를 편집하다가 파일을 저장하게 되면 수정 내용이 디스크에 반영되어 영구 저장된다. 인텔리제이에는 파일이 저장될 때 어떤 작업을 동시에 수행하도록 설정할 수 있는 플러그인이 있다. 바로 Saving Actions 플러그인이다. Saving Actions 플러그인을 이용해 파일이 저장될 때, 불필요한 import 문 최적화나 코드 재정렬, 저장된 포맷으로 코드를 포매팅하는 등의 작업을 할 수 있다. 의식적으로 기능을 수행하는게 아닌 파일이 저장될 때 자동으로 수행되기 때문에 여러모로 편하다. Saving Actions 플러그인 설치 - 구버전 구버전 인텔리제이의 경우 인텔리제이의 Settings > Plugins > Marketplace에서 Saving Actions를 검색한다. .. 2023. 4. 29.
[IntelliJ] SonarLint 플러그인 설치 및 사용법 정적 코드 분석(Static Program Analysis)은 프로그램의 실행없이 소스코드나 오브젝트 파일을 통해 소프트웨어를 분석하는 것을 말한다. 소스코드에 숨어있는 잠재적인 버그, 구조적인 문제, 코드스멜을 찾아 버그를 줄이는데 도움이 된다. 인텔리제이에는 SonarLint라는 플러그인이 있는데 SonarQube라는 프로젝트를 기반으로 만든 정적 코드 분석 플러그인이다. SonarQube는 별도의 서버가 필요하다. 젠킨스 팜 같은 것과 연동해 프로젝트 전체에 대한 정적검사를 할 수 있다는 장점이 있지만 SonarQube만을 위한 환경을 구축하는게 다소 귀찮다. 또 한, 커밋 이후 PR 단계까지 넘어가야 분석이 가능하기 때문에 정적 분석의 피드백을 반영하는데에 다소 시간이 걸리기도 한다. SonarL.. 2023. 4. 28.