Java 에서의 정렬은 java.util.Collections 클래스의 static 메소드인 sort() 를 사용한다. Collections 클래스에서 오버로딩 된 두 개의 sort() 메소드가 있음을 확인할 수 있는데 sort() 를 사용해 정렬하는 방법에는 Comparator 와 Comparable 인터페이스를 구현하는 방법이 있다. 1. Comparable 인터페이스 sort() 메소드의 매개변수 타입을 보면 List 로 제네릭 타입을 받고 있는데 이때 T는 로, Comparable 인터페이스를 구현한 타입이어야 한다. Comparable 인터페이스를 살펴보면 Comparable 인터페이스에는 compareTo() 메소드 하나 밖에 없으므로 이 메소드만 오버라이딩 해주면 Collections.sor..
Hashtable, HashMap, ConcurrentHashMap 클래스들은 Map 인터페이스를 구현한 콜렉션들로, 각 콜렉션들이 비슷한 역할을 하는 것 같으면서도 다르게 구현되어 있다. 기본적으로는 Map 인터페이스이기 때문에 구조를 가진다. Hashtable : Hashtable 은 put, get 과 같은 주요 메소드에 synchronized 키워드가 선언되어 있으며 또한 key, value 에 null 을 허용하지 않는다. HashMap : HashMap 은 주요 메소드에 synchronized 키워드가 없으며, 또한 Hashtable 과 다르게 key, value 에 null 을 입력할 수 있다. 하지만 HashMap 도 아래와 같이 선언하면 Thread-safe 한 맵으로 사용이 가능하다. ..
Java 에서 Static 키워드를 사용한다는 것은 메모리에 한 번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다. 이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필요한데, 일반적으로 우리가 만든 Class 는 Static 영역에 생성되고, new 연산을 통해 생성한 객체는 Heap 영역에 생성된다. 객체의 생성시에 할당된 Heap 영역의 메모리는 Garbage Collector 를 통해 수시로 관리를 받는다. 하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, Garbage Collector 의 관리 영역 밖에 존재하므로 Static 을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하므로 자주 사용하게..
enum 클래스는 아래와 같은 방법으로 밖에 사용해 본 적이 없었다. public enum GreengrassLoggerLevel { DEBUG, INFO, WARN, ERROR, FATAL, UNKNOWN_TO_SDK_VERSION; } 이번에 그린그래스 커넥터를 개발하면서 enum 클래스의 또다른 사용법을 알게 됐다. 커넥터 request model 에는 parameters 라는 Map 형태의 객체가 포함되는데 어떤 커넥터를 사용할건지에 따라 connectorName, connectorArn 이 다르고, 버전에 따라 또 runtime, GGCVersion 이 다르다. 그리하여 커넥터타입 enum 클래스를 생성해준 후, public enum GreengrassConnectorType { SNS("SNS..