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..
Builder 패턴이란, 객체를 생성할 때 사용하는 패턴을 의미한다. Person person = Person.build() .name("Jane") .age(30) .build(); 객체 생성 패턴 3가지 점층적 생성자 패턴 public class Person { private final String name; //필수 인자 private final String nation; //선택적 인자 private final String hobby; //선택적 인자 /** 필수 생성자 **/ public Person(String name) { this(name, "국가 비공개", "취미 비공개"); } /** 1개의 선택적 인자를 받는 생성자 **/ public Person(String name, String ..