코테를 풀다보면 list에서 배열로 변환하는 과정이 흔히 발생한다..
여러 방법이 있지만 나는 toArray를 자주 사용한다.

toArray로 String을 list의 사이즈로 항상 지정해줬는데
다른 사람들의 풀이 보다보니,

사이즈를 지정하지 않고 [0]으로 넘기는 코드를 종종 볼 때가 있다.
new String[0]을 사용하는 이유
- new String[0]은 크기가 0인 배열을 전달하여, Java가 알아서 적절한 크기의 배열을 동적으로 생성하도록 합니다.
- 크기를 0으로 전달해도 성능에 영향이 거의 없고, 코드가 간결해집니다.

배열의 크기를 정확히 맞추고 싶다면 배열 길이 그대로 해도 된다.
하지만 new String[0]이 간편하고, 자파 컴파일러는 성능저하 없이 작동한다.
배열 길이를 정해 넘길 경우 문제점
또 중요한 new String[0]으로 동적할당을 해야할 이유가 있는데,
동시성 이슈가 발생할 수 있다고 한다..
내부 원리는 아직 이해가 가질 않으나

"해당 메서드에 배열의 길이를 미리 초기화 한 뒤 넘겨서 코드를 실행했는데
도중에 다른 스레드에서 해당 List 의 size 를 줄인다면 원래라면 타지 않았어야할 마지막 조건문이 true 가 되고
그 결과 extra nulls 가 추가될 가능성이 있다. 그렇기에 동시성 이슈가 생길 가능성이 있다는 뜻이다."
완벽하게 이해하진 못했지만..
결과적으로
list.toArray(new String[0])는 크기가 0인 배열을 전달해도 Java가 내부적으로 적절한 크기의 배열을 생성함!
size가 줄어들 일 없이 정확하게 전달할 수 있다면 배열 크기 자체를 넘겨도 된다.
(더 작은 수를 넘길 경우에 발생하는 이슈기에..)
그렇지만 성능 차이가 전혀 없기에 그냥 new String[0]을 습관화 하자!
'java' 카테고리의 다른 글
| 로깅 앤 디버깅 (0) | 2024.06.09 |
|---|---|
| 증감 연산자 (0) | 2024.01.23 |
| String이란? (0) | 2023.10.31 |
| 하라는 indexof() 공부는 안하고 물리에 빠진 건에 대하여. (0) | 2023.05.19 |
| 내맘대로 디버깅(Debug) (0) | 2023.05.17 |