Languages/Java7 자바 8에서 Arrays.asList() 를 완벽한 불변리스트로 사용하기 회사에서 운영 중인 서비스는 자바 8 버전을 사용하고 있습니다.때문에 정적 리스트를 생성할 때 자바 9에서 추가된 List.of()를 사용하지 못하고, 대신 Arrays.asList()를 사용하고 있는데요.하지만 완벽한 불변을 보장하는 List.of()와 달리 Arrays.asList()는 완벽한 불변을 지원하지 않습니다.자바 8에서 List.of()를 대체할 수 있는 수준으로 Arrays.asList()를 완벽한 불변 리스트로 만드는 방법을 공유하고자 합니다. Arrays.asList()를 불변 리스트로 만들기에 앞서 Arrays.asList()의 기본동작을 보며 완벽한 불변 리스트가 아닌지 살펴보겠습니다. 1. Arrays.asList()와 List.of()의 기본동작Arrays.asList()의 동.. 2025. 1. 27. 배열보다는 리스트를 사용하라 최근 [이펙티브 자바]를 읽으면서 배열보다 리스트를 주로 사용해 온 이유에 대해 다시 생각해 보게 되었고 이 경험을 공유하고자 합니다. 배열과 제네릭의 차이를 알아보고 배열보다는 제네릭을 사용할 수 있는 리스트를 사용하는 이유에 대해 다뤄보겠습니다. 첫 번째 이유 : 배열과 제네릭의 공변성과 불공변성자바에서 배열은 공변성을 가지고, 제네릭은 불공변성을 가진다는 차이가 있습니다.배열보다 리스트를 사용해야 하는 첫 번째 이유는 제네릭의 불공변성 덕분에 타입 안정성을 보장하기 때문입니다. 이를 이해하기위해 간단한 예로 공변성과 불공변성을 알아보겠습니다. 공변성공변성은 말 그대로 '함께 변한다' 라는 뜻으로, 이를 코드 레벨에 적용해 본다면 모든 객체의 상위 클래스인 Object가 있고 하위 클래스인 Integ.. 2024. 9. 27. [Java] 자바21의 가상스레드 간단하게 이해하기 자바 21에 새롭게 가상스레드가 추가되었고 간단하게 가상스레드를 이해해 보기 위해 포스팅하게 되었다. 자바의 스레드가상 스레드를 이해하기 위해 먼저 기초지식인 프로세스와 스레드를 다시 정리하면 아래와 같다.프로세스 : 프로그램이 CPU 메모리 자원을 할당받아 실행 중인 상태스레드 : 프로세스 내 실행 흐름 단위. 즉, 프로세스에 소속되어 여러 코드를 동시에 실행시킬 수 있도록 하는 단위 그러면 자바코드로 스레드를 만들어서 실행시킨다면 실제로 어떻게 동작하게 되는 걸까? 자바에서 스레드를 만들어서 실행하는 코드public static void main(String[] args) throws Exception { for (int i = 0; i 코드레벨에서 스레드를 생성하게 되면 자바가 동작하고 있는 .. 2024. 5. 29. [Java] 제네릭과 가변인자 조합 메서드의 @SafeVarargs 어노테이션 @SafeVarargs 어노테이션을 이해하기 위해선 가변인자와 제네릭의 조합을 알아야한다. 가변인자를 사용하면, 메서드를 호출할 때 매개변수의 개수를 자유롭게 넣을 수 있고 해당 값들이 담겨 있는 배열이 생성된다.public static int sum(int... nums) { return Arrays.stream(nums).sum();}int... 로 받은 정수형 타입의 매개변수의 합을 반환하는 기본적인 예시그렇다면 만약 제네릭 함수에서 가변인자를 사용하면 어떻게 될까? 아래에 List를 여러개 받아 모두 하나의 List로 합쳐주는 flatten 메서드가 있다.public static List flatten(List... lists) { List result = ne.. 2024. 4. 24. 이전 1 2 다음