Java 변수 선언 & 초기화 방법 - Array, List, Set, Map
( 이미지 출처 : https://openjdk.java.net )
변수 선언과 동시에 초기화 작업 방법에 대해서 기술합니다.
Array
public class Sample {
private final String[] values0 = new String[]{ "1", "2", "3" };
// 위와 동일하지만 배열 선언시에만 사용 가능
private final String[] values1 = { "1", "2", "3" };
}
List
변경 가능한 List
public class Sample {
private final List<String> values0 = new ArrayList<>() {
{
add("1");
add("2");
add("3");
}
};
private final List<String> values1 = new ArrayList<>(Arrays.asList(new String[]{ "1", "2", "3" }));
// JDK 5 이상에서 사용 가능
private final List<String> values2 = new ArrayList<>(Arrays.asList("1", "2", "3"));
}
Immutable List
초기화 이후에 변경이 불가한 list를 만드는 방법입니다.
변경 시도시에는 UnsupportedOperationException 이 발생합니다.
public class Sample {
private final List<String> values0 = Arrays.asList(new String[]{ "1", "2", "3" });
private final List<String> values1 = Collections.unmodifiableList(new ArrayList<>(values0));
// JDK 5 이상에서 사용 가능
private final List<String> values2 = Arrays.asList("1", "2", "3");
// JDK 9 이상에서 사용 가능
private final List<String> values3 = List.of("1", "2", "3");
}
Set
변경 가능한 Set
public class Sample {
private final Set<String> values = new HashSet<>(Arrays.asList("1", "2", "3"));
}
Immutable Set
초기화 이후에 변경이 불가한 set을 만드는 방법입니다.
변경 시도시에는 UnsupportedOperationException 이 발생합니다.
public class Sample {
private final Set<String> values0 = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList("1", "2", "3")));
// JDK 9 이상에서 사용 가능
private final Set<String> values1 = Set.of("1", "2", "3");
}
Map
변경 가능한 Map
public class Sample {
private final Map<String, String> map = new HashMap<String, String>() {
{
put("key01", "val01");
put("key02", "val02");
put("key03", "val03");
}
};
}
Immutable Map
초기화 이후에 변경이 불가한 Map을 만드는 방법입니다.
변경 시도시에는 UnsupportedOperationException 이 발생합니다.
Collections 는 Collection interface에 대한 utility class입니다.
근데 Map interface는 Collection interface를 extend 하지 않음에도 불구하고 Collections으로부터 몇가지 기능을 지원받고 있습니다.
public class Sample {
private final Map<String, String> map0 = Collections.unmodifiableMap(new HashMap<String, String>() {
{
put("key01", "val01");
put("key02", "val02");
put("key03", "val03");
}
});
// JDK 9 이상에서 사용 가능
// 10개의 key, value까지만 사용 가능
Map<String, String> map1 = Map.of("key01","value01", "key02", "value02");
}
Empty Immutable Collection
항상 텅비어있는 상태를 유지하는 List, Set, Map을 만드는 방법입니다.
프로세스에 유일하게 1개만 존재하기 때문에 자원 관점에서 굉장히 효율적입니다.
불변 객체이기 때문에 변경 시도시에는 UnsupportedOperationException 이 발생합니다.
public class Sample {
// JDK 5 이상에서 사용 가능
private final List<String> emptyList0 = Collections.emptyList();
private final Set<String> emptySet0 = Collections.emptySet();
private final Map<String, String> emptyMap0 = Collections.emptyMap();
// JDK 9 이상에서 사용 가능
private final List<String> emptyList1 = List.of();
private final Set<String> emptySet1 = Set.of();
private final Map<String, String> emptyMap1 = Map.of();
}
Associated Posts
관련된 주제를 살펴볼 수 있도록 동일한 Tag를 가진 글들을 모아뒀습니다. 제목을 눌러주세요.-
유용한 표준 Java RuntimeException
( 이미지 출처 : https://openjdk.java.net )Java 프로그래밍을 하면서 예외처리를 발생시켜야하는 경우, 우리는 RuntimeException을 상속하는 예외를 사용하면 됩니다.
그리고 RuntimeException을 상속하는 예외를 새롭게 만드는 것보다는 JDK에서 제공하는 표준 RuntimeExcepton 상속 예외들을 사용하는 것이 바람직합니다.JDK 12 기준으로 RuntimeException을 직접 상속하는 예외는 총 58개입니다. (참고 - OpenJdk 12 RuntimeException)
그리고 그 58개의 예외들을 다시 상속하는 자식 예외들까지 개수를 세면 엄청나게 많습니다.그 중 자주 사용하게 되는 유용한 표준 RuntimeException 들을 기록합니다.
... 더 읽기 -
Java Thread Safe Collections - List, Queue, Set, Map
( 이미지 출처 : https://openjdk.java.net )Thread safe 한 Collection(List, Queue, Set) 그리고 Map의 구현체 사용법에 대해서 기술합니다.
... 더 읽기 -
Java Random - ThreadLocalRandom, SplittableRandom, SecureRandom
( 이미지 출처 : https://openjdk.java.net )Java에서 제공하는 Random 라이브러리에 대해서 알아봅니다.
... 더 읽기 -
Java Date - Instant, LocalDateTime, ZonedDateTime
-
Java Validation - null check, Optional
-
How to initialize Java variables - Array, List, Set, Map
-
왜 Java 8 을 공부해야 하는가?