์ถ์ฒ
ChatGPT
1. ์ด๊ธฐ ์ฉ๋ ์ง์
ArrayList์ ๊ธฐ๋ณธ ์ฉ๋์ 10์ผ๋ก ์ค์ ๋์ด ์๋ค. ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ ๊ธฐ๋ณธ ์ฉ๋์ ์ด๊ณผํ ๊ฒฝ์ฐ, ArrayList๋ ๋ด๋ถ์ ์ผ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๊ณ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ด์ฉ์ ๋ณต์ฌํ๋ค. ์ด ๊ณผ์ ์ ๋น์ผ ์ฐ์ฐ์ผ๋ก, ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
์ฃผ์ํ ์
๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์์ธกํ ์ ์๋ค๋ฉด, ArrayList๋ฅผ ์์ฑํ ๋ ์ด๊ธฐ ์ฉ๋์ ์ง์ ํ๋ ๊ฒ์ด ์ข๋ค.
List<String> list = new ArrayList<>(100); // ์์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ด๊ธฐ ์ฉ๋ ์ค์
2. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๊ณผ ์ ๊ฑฐ
ArrayList๋ ๋ด๋ถ์ ์ผ๋ก ์์๋ค์ ๋ฐฐ์ด๋ก ๊ด๋ฆฌํ๋ค. ๋ฐ๋ผ์ ๋ฆฌ์คํธ์์ ์์๋ฅผ ์ ๊ฑฐํ๋ฉด ํด๋น ์์น๋ฅผ null๋ก ์ค์ ํ์ง ์๋๋ค. ์ด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ฃผ์ํ ์
์์๋ฅผ ์ ๊ฑฐํ ๋ ArrayList๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ null๋ก ๋ช
์์ ์ผ๋ก ์ค์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
list.remove(index);
list.set(index, null); // ์์๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฉด ๋ช
์์ ์ผ๋ก null๋ก ์ค์
Java 8 ArrayList ์ remove() ์์ค ์ฝ๋ ๋ด๋ถ์ ๊ตฌํ ์ฌํญ์ ๋ณด๋ฉด ์ด๋ ๊ฒ ํด์ผํ๋ ๊ฒ์ ์๋ฌธ์ด ์๊ธด๋ค.
- ๊ด๋ จ ๊ธ -> [Java] ArrayList ๋ด๋ถ ๊ตฌํ
1. index๊ฐ ๋งจ ๋ ์์์ผ ๊ฒฝ์ฐ : remove ๋ด๋ถ์์ ๋งจ ๋ ๊ณต๊ฐ์ null์ ํ ๋นํ๋ค. ๊ตฌ์ง ๊ฐ๋ฐ์๊ฐ ํ ํ์๊ฐ ์๋ค.
2. index๊ฐ ๋งจ ๋ ์์๊ฐ ์๋ ๊ฒฝ์ฐ : index ๋ค์ ์๋ ์์๋ค์ด ๋ค ํ ์นธ์ฉ ์์ผ๋ก ์ฎ๊ฒจ์ง๋ค. ๋ง์ง๋ง ๊ณต๊ฐ์ null์ด ํ ๋น๋๊ณ ์ฌ์ฉ ์ฌ์ด์ฆ(์ ๊ทผ ๊ฐ๋ฅ ํฌ๊ธฐ)๋ ํ ์นธ ์ค์ด๋ ๋ค. ์ด ์ํ์์ index ์นธ์ ์์๋ฅผ null ์ฒ๋ฆฌ ํ๋ ๊ฑด, ์ด๋ฏธ ์ฎ๊ฒจ์ง ๊ฐ์ ๋์ฒดํด null์ ํ ๋นํ๋ ๊ฒ์ด๋ผ์, ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ํ ๋ฐฉ๋ฒ๊ณผ๋ ์ ํ ์๊ด์๋ค.
ArrayList์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์๋๋ฐ, ์ด๋ ๊ฒ ๋์ํ๋ ๊ฒ์ ์๋ ๊ฑฐ ๊ฐ๋ค.
ArrayList ์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์
1. ArrayList์ ๋ด๋ถ ๊ตฌ์กฐ
ArrayList๋ ๋ด๋ถ์ ์ผ๋ก Object[] ํ์ ์ ๋ฐฐ์ด์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์ด ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐํจ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ์๋์ผ๋ก ์ฆ๊ฐํ๋๋ฐ, ๋ฐฐ์ด์ด ๊ฝ ์ฐจ๋ฉด ํ์ฌ ํฌ๊ธฐ์ 1.5๋ฐฐ๋ก ์๋ก์ด ๋ฐฐ์ด์ ํ ๋นํ๊ณ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ค.
์๋ฅผ ๋ค์ด, ์ด๊ธฐ ์ฉ๋์ด 10์ธ ArrayList๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ฌ๊ธฐ์ 10๊ฐ์ ์์๋ฅผ ์ถ๊ฐํ๋ฉด ์ฉ๋์ด ๊ฐ๋ ์ฐจ๊ฒ ๋๋ค. 11๋ฒ์งธ ์์๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ๋ฉด ArrayList๋ ๋ด๋ถ์ ์ผ๋ก ๋ ํฐ ๋ฐฐ์ด(15๊ฐ ํฌ๊ธฐ)์ ํ ๋นํ๊ณ , ๊ธฐ์กด ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ ๋ฐฐ์ด๋ก ๋ณต์ฌํ ํ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ๋ค.
ArrayList์ ํฌ๊ธฐ ์ฆ๊ฐ ๋ฐฐ์จ
- ava 1.4 ์ดํ: Java 1.4 ์ด์ ๋ฒ์ ์์๋ ArrayList์ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํ ๋๋ง๋ค 2๋ฐฐ๋ก ์ฆ๊ฐํ๋ค.
- Java 1.5 ์ดํ: Java 1.5๋ถํฐ๋ ํฌ๊ธฐ ์ฆ๊ฐ ์ ์ฑ ์ด ๋ณ๊ฒฝ๋์ด, ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํ ๋๋ง๋ค ํ์ฌ ๋ฐฐ์ด ํฌ๊ธฐ์ 1.5๋ฐฐ๋ก ์ฆ๊ฐํ๊ฒ ๋๋ค. ๊ณต์์ ์ผ๋ก๋ (oldCapacity * 3) / 2 + 1 ๋ฐฉ์์ผ๋ก ๊ณ์ฐํ์ฌ ๋๋ฆฌ๋๋ก ๋์ด ์๋ค.
2. ์์ ์ ๊ฑฐ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฌธ์
ArrayList์์ ์์๋ฅผ ์ ๊ฑฐํ ๋, ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
- ArrayList์์ ํน์ ์์น์ ์์๋ฅผ ์ ๊ฑฐํ๋ฉด ํด๋น ์์ ๋ค์ ์๋ ๋ชจ๋ ์์๋ค์ ์์ผ๋ก ํ ์นธ์ฉ ์ด๋์์ผ ๋น ๊ณต๊ฐ์ ๋ฉ์ด๋ค.
- ์ด๋ ArrayList๋ ๋จ์ํ ์์๋ค์ ์ด๋์ํฌ ๋ฟ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ฑฐ๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์๋๋ค.
์ด ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ์, ArrayList๊ฐ null์ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ง ์๋๋ค๋ฉด, ์ ๊ฑฐ๋ ์์๊ฐ ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ ๋จ์ ์์ ์ ์๋ค๋ ์ ์ด๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์(memory leak)๋ฅผ ์ ๋ฐํ ์ ์๋ ์ํฉ์ผ๋ก, ํนํ ํฌ๊ธฐ๊ฐ ํฐ ๊ฐ์ฒด๋ฅผ ๋ง์ด ํฌํจํ๋ ArrayList์์๋ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์๋ค.
์์
import java.util.ArrayList;
public class Example {
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<>(10);
// 10๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ
for (int i = 0; i < 10; i++) {
list.add(new Object());
}
// 5๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐ
for (int i = 0; i < 5; i++) {
list.remove(0);
}
// ์ด ์์ ์์ ArrayList๋ ๋ด๋ถ์ ์ผ๋ก 10๊ฐ์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๊ฐ์ง๊ณ ์์ง๋ง,
// ํ์ฌ 5๊ฐ์ ์์๋ง ์ ์ฅํ๊ณ ์์
System.out.println("ArrayList size: " + list.size()); // 5 ์ถ๋ ฅ
}
}
์ ์ฝ๋์์ ArrayList๋ ์ฒ์์ 10๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ ์๋ค๊ฐ 5๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ค. ํ์ง๋ง ๋ด๋ถ ๋ฐฐ์ด ํฌ๊ธฐ๋ ์ฌ์ ํ 10์ด๋ฉฐ, ์ ๊ฑฐ๋ 5๊ฐ์ ์๋ฆฌ๋ null๋ก ์ฒ๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ์ ๊ฑฐ๋ ๊ฐ์ฒด๊ฐ ์ธ๋ถ์์ ์ฐธ์กฐํ๊ณ ์๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ํ์ฑ
๋ฉ๋ชจ๋ฆฌ ๋์(memory leak)๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ง ์๊ณ ๋จ์ ์๋ ์ํฉ์ ๋งํ๋ค. ArrayList์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ํฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉด์ ๋น๋ฒํ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ, ์ ๊ฑฐ๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ํด์ ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ์ ์ฌ์ฉ๋ ์ํ๋ก ๋จ์ ์๊ฒ ๋๋ค.
2. ๋กฑ๋ฐ(long-running) ํ๋ก๊ทธ๋จ
์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ผ ์ค๋ ์๊ฐ ๋์ ์คํ๋๋ ํ๋ก๊ทธ๋จ์์๋ ์ด๋ฌํ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ ์ ์์ฌ ์ฑ๋ฅ์ ์ฌ๊ฐํ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
4. ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ์กฐ์น
1. null ํ ๋น
ํ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ ๋, ์๋์ผ๋ก null์ ํ ๋นํ์ฌ ์ฐธ์กฐ๋ฅผ ํด์ ํ ์ ์๋ค.
๋์ null ๊ฐ ํ์ธ์ ์ํ๋ฉด NPE๊ฐ ๋ฐ์ํ ์ ์์ด์ ์กฐ์ฌํด์ผ ํ๋ค.
list.remove(index);
list.set(index, null); // ๋ช
์์ ์ผ๋ก null ํ ๋น
2. ArrayList์ ์ฉ๋ ์ค์ด๊ธฐ
์์๋ฅผ ๋ง์ด ์ ๊ฑฐํ ํ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ ์ถ๋ค๋ฉด trimToSize() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ค์ ๋ก ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ง ์ ์งํ ์ ์๋ค.
list.trimToSize();
3. WeakReference ์ฌ์ฉ
ํฐ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋, ๊ฐํ ์ฐธ์กฐ ๋์ WeakReference๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
4. ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ
ArrayList๋ ํฌ๊ธฐ ์กฐ์ ์ด ๋น๋ฒํ ๊ฒฝ์ฐ ์ ์ ํ์ง ์์ ์ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ LinkedList์ ๊ฐ์ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ ์ ์๋ค.
3. ์ค๋ ๋ ์์ ์ฑ
ArrayList๋ ๋น๋๊ธฐ์ ์ด๋ฉฐ, ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์๋ ์ค๋ ๋ ์์ ํ์ง ์๋ค. ์ฌ๋ฌ ์ค๋ ๋์์ ๋์์ ArrayList๋ฅผ ์์ ํ๋ฉด ConcurrentModificationException์ด ๋ฐ์ํ ์ ์๋ค.
์ฃผ์ํ ์
๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ArrayList๋ฅผ ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ, Collections.synchronizedList ๋ฉ์๋๋ก ๋๊ธฐํ๋ ๋ฆฌ์คํธ๋ก ๊ฐ์ธ์ผ ํ๋ค.
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
๋๋ CopyOnWriteArrayList์ ๊ฐ์ ์ค๋ ๋ ์์ ํ ๋์์ ๊ณ ๋ คํ ์ ์๋ค.
4. ์ฑ๋ฅ ์ต์ ํ
ArrayList์์์ ์์ ์ฝ์ ๊ณผ ์ญ์ ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ ์กฐ์ ๊ณผ ์ด๋ ์ฐ์ฐ์ด ํ์ํ ์ ์์ด O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์ ์๋ค. ํนํ, ๋ฆฌ์คํธ์ ์ค๊ฐ์ ์์๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ฃผ์ํ ์
- ๋ฆฌ์คํธ์ ๋์ ์์๋ฅผ ์ถ๊ฐํ ๋๋ง ArrayList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ์์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋น๋ฒํ ๋ฐ์ํ๋ ๊ฒฝ์ฐ LinkedList์ ๊ฐ์ ๋ค๋ฅธ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข๋ค.
5. Null ์์
ArrayList๋ null ์์๋ฅผ ํ์ฉํ๋ค. ๊ทธ๋ฌ๋ ๋ฆฌ์คํธ์ null์ด ํฌํจ๋ ์ ์์์ ๊ณ ๋ คํ์ง ์์ผ๋ฉด NullPointerException์ด ๋ฐ์ํ ์ํ์ด ์๋ค.
์ฃผ์ํ ์
๋ฆฌ์คํธ๋ฅผ ์ํํ๊ฑฐ๋ ์์๋ฅผ ์ฒ๋ฆฌํ ๋, null ์์์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ช ํํ ํด์ผ ํ๋ค.
6. ๋ฐฐ์ด ๋ณต์ฌ ๋น์ฉ
ArrayList๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฐ์ด์ด ๊ฐ๋ ์ฐจ๋ฉด, ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ (์ต์ ๋ฒ์ ์์) 1.5 ๋ฐฐ๋ก ๋๋ฆฌ๊ณ ๊ธฐ์กด์ ๋ฐฐ์ด์ ์ ๋ฐฐ์ด์ ๋ณต์ฌํ๋ค. ์ด ๋ฐฐ์ด ๋ณต์ฌ ์์ ์ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ, ํฐ ๋ฐฐ์ด์์๋ ์๋นํ ๋น์ฉ์ด ๋ฐ์ํ ์ ์๋ค.
์ฃผ์ํ ์
- ์์๋๋ ์ต๋ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ ์ด๊ธฐ ์ฉ๋์ ์ค์ ํ์ฌ ๋ฐฐ์ด ๋ณต์ฌ๋ฅผ ์ต์ํํด์ผ ํ๋ค.
- ํฌ๊ธฐ๊ฐ ์ปค์ง ๊ฒฝ์ฐ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๊ธฐ ์ํด ์ฉ๋ ์ฆ๊ฐ ๋ก์ง์ ์ ์ดํ ์ ์๋ ์ฌ์ฉ์ ์ ์ ๋ฆฌ์คํธ ํด๋์ค๋ฅผ ๊ณ ๋ คํ ์ ์๋ค.
7. Boxing๊ณผ Unboxing ๋น์ฉ
ArrayList๋ ๊ฐ์ฒด ํ์ ๋ง ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์, ์์ ํ์ (int, char ๋ฑ)์ ์ ์ฅํ๋ ค๋ฉด ๋ํผ ํด๋์ค(Integer, Character ๋ฑ)๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์ด ๊ณผ์ ์์ Boxing๊ณผ Unboxing์ด ๋ฐ์ํ๋ฉฐ, ์ด๋ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์๋ค.
์ฃผ์ํ ์
์์ ํ์ ์ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ArrayList ๋์ ์์ ํ์ ์ ์ง์ํ๋ ์ปฌ๋ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: Trove4j, FastUtil ๋ฑ)๋ฅผ ๊ณ ๋ คํ ์ ์๋ค.
8. UnsupportedOpertationException
ArrayList๋ฅผ ๋ค๋ฅธ ๋ฆฌ์คํธ์์ ์์ฑํ ๋ ์ฃผ์ํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, Arrays.asList()๋ก ์์ฑ๋ ๋ฆฌ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ArrayList๋ฅผ ์ด๊ธฐํํ ๊ฒฝ์ฐ UnsupportedOperationException์ด ๋ฐ์ํ ์ ์๋ค.
์ฃผ์ํ ์
๋ฆฌ์คํธ ์์ฑ ์ ๋ช ํํ ์๋ก์ด ArrayList ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค.
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Arrays.asList()์ ArrayList์ ์ฐจ์ด์
1. Arrays.asList() ๋ฉ์๋
- ์ด ๋ฉ์๋๋ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ ๋ทฐ๋ฅผ ๋ฐํํ๋ค.
- ์ด ๋ฆฌ์คํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฃผ์ด์ง ๋ฐฐ์ด์ ๋ฐฑ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๋ฆฌ์คํธ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์๋ ์์ง๋ง(set() ๋ฉ์๋ ์ฌ์ฉ), ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฉ์๋(add(), remove(), ๋ฑ)๋ฅผ ํธ์ถํ๋ฉด UnsupportedOperationException์ด ๋ฐ์ํ๋ค.
์์
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array); // ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ ๋ณ๊ฒฝํ ์ ์์
list.set(0, "x"); // ๊ฐ๋ฅ, ๋ฆฌ์คํธ์ ์์๋ฅผ ์์ ํ ์ ์์
list.add("d"); // UnsupportedOperationException ๋ฐ์
2. ArrayList ํด๋์ค
- ArrayList๋ ๋์ ๋ฐฐ์ด์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ฒด ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ผ๋ฉฐ, add(), remove(), set(), ๋ฑ ๋ค์ํ ๋ฉ์๋๋ฅผ ํตํด ๋ฆฌ์คํธ์ ์์์ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
์์
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("a"); // ๊ฐ๋ฅ
arrayList.add("b"); // ๊ฐ๋ฅ
arrayList.remove("a"); // ๊ฐ๋ฅ
Arrays.asList()๋ฅผ ์ฌ์ฉํ์ฌ ArrayList๋ฅผ ์ด๊ธฐํํ ๋์ ๋ฌธ์ ์
๋ถ๋ณ ๋ฆฌ์คํธ์ ์์ฑ
Arrays.asList()๋ก ์์ฑ๋ ๋ฆฌ์คํธ๋ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ค. ์ด ๋ฆฌ์คํธ๋ ์๋ณธ ๋ฐฐ์ด์ ๋ทฐ ์ญํ ์ ํ๋ฉฐ, ์๋ณธ ๋ฐฐ์ด๊ณผ ๋์ผํ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ฉฐ ๊ฐ์ ์์๋ค์ ๊ณต์ ํ๋ค.
์๋ณธ ๋ฐฐ์ด์ ๋ทฐ๋ผ๋ ์๋ฏธ
์๋ณธ ๋ฐฐ์ด์ ์ง์ ์ฐธ์กฐํ๊ณ ์๋ค๋ ์๋ฏธ. ์๋ณธ ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ๊ฐ ๊ฐ์ ๋ฐ์ดํฐ ์์๋ฅผ ๊ณต์ ํ๋ค. ๋ฆฌ์คํธ๋ฅผ ์์ ํ๋ฉด ๋ฐฐ์ด์ ์์๋ ๋ณ๊ฒฝ๋๊ณก, ๋ฐฐ์ด์ ์์๋ฅผ ์์ ํ๋ฉด ๋ฆฌ์คํธ์์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ณผ ์ ์๋ค.
UnsupportedOperationException ๋ฐ์
๋ง์ฝ Arrays.asList()๋ก ์์ฑ๋ ๋ฆฌ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ArrayList๋ฅผ ์์ฑํ๋ค๋ฉด, ์ด ๋ฆฌ์คํธ๋ ์ฌ์ ํ ์๋ณธ ๋ฐฐ์ด์ ๋ํ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ทฐ์ด๋ฏ๋ก add()๋ remove()์ ๊ฐ์ ํฌ๊ธฐ ๋ณ๊ฒฝ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ UnsupportedOperationException์ด ๋ฐ์ํ๋ค.
์์
List<String> list = Arrays.asList("a", "b", "c");
List<String> arrayList = new ArrayList<>(list); // `ArrayList`๋ฅผ ์์ฑํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก ์ฌ์ ํ ๊ณ ์ ๋ ํฌ๊ธฐ
arrayList.add("d"); // ๊ฐ๋ฅ, ArrayList๋ ์๋ก์ด ๋์ ๋ฐฐ์ด์ ์ฌ์ฉํจ
List<String> fixedSizeList = Arrays.asList("x", "y", "z");
fixedSizeList.add("w"); // UnsupportedOperationException ๋ฐ์
ArrayList๋ก ๋ณํํ๊ธฐ
Arrays.asList()๋ก ์์ฑ๋ ๊ณ ์ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ์์ ํ ๋์ ArrayList๋ก ๋ณํํ๊ณ ์ถ๋ค๋ฉด, ArrayList์ ์์ฑ์์ ๊ณ ์ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ฌํ์ฌ ์๋ก์ด ๋ฆฌ์คํธ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค. ์ด ์๋ก์ด ๋ฆฌ์คํธ๋ ์๋ณธ ๋ฐฐ์ด๊ณผ ๋ ๋ฆฝ์ ์ด๋ฉฐ, ๊ณ ์ ์ ๋์ ํฌ๊ธฐ๋ฅผ ๊ฐ๊ฒ ๋๋ค.
String[] array = {"a", "b", "c"};
List<String> fixedSizeList = Arrays.asList(array); // ๊ณ ์ ํฌ๊ธฐ ๋ฆฌ์คํธ
List<String> dynamicArrayList = new ArrayList<>(fixedSizeList); // ์๋ก์ด ๋์ ArrayList ์์ฑ
dynamicArrayList.add("d"); // ๊ฐ๋ฅ, ๋์ ํฌ๊ธฐ์ ๋ฆฌ์คํธ
์ด ์ฝ๋๋ fixedSizeList์ ์์๋ค์ ๊ฐ๋ ์๋ก์ด ArrayList๋ฅผ ์์ฑํ๋ค. ์ด ์๋ก์ด ๋ฆฌ์คํธ๋ ์๋ณธ ๋ฐฐ์ด๊ณผ ๋ ๋ฆฝ์ ์ด๋ฉฐ, ํฌ๊ธฐ ์กฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ UnsupportedOperationException์ด ๋ฐ์ํ์ง ์๋๋ค.
์ฃผ์์ ๊ณผ Best Practice
1. ์๋ณธ ๋ฐฐ์ด๊ณผ์ ๋ ๋ฆฝ์ฑ
Arrays.asList()๋ ์๋ณธ ๋ฐฐ์ด์ ๋ํ ๋ทฐ์ด๋ฏ๋ก, ๋ฐฐ์ด์ ๋ณ๊ฒฝ์ด ๋ฆฌ์คํธ์๋ ์ํฅ์ ์ค ์ ์๋ค. ๋ ๋ฆฝ์ ์ธ ๋ฆฌ์คํธ๊ฐ ํ์ํ๋ค๋ฉด, ์๋ก์ด ArrayList๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
2. ๋ถ๋ณ ๋ฆฌ์คํธ์ ์์ ๊ฐ๋ฅ ๋ฆฌ์คํธ์ ์ฐจ์ด
Arrays.asList()๋ก ์์ฑ๋ ๋ฆฌ์คํธ๋ ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๋ถ๋ณ ๋ฆฌ์คํธ์ด๋ค. ์ด ์ ์ ๋ช ํํ ์ธ์งํ๊ณ ์ฌ์ฉํด์ผ ๋ค.
3. ๋ฐฐ์ด์ ์ฌ์ฉ ์์
๋ง์ฝ ๊ณ ์ ํฌ๊ธฐ ๋ฆฌ์คํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ Arrays.asList()๋ฅผ ์ฌ์ฉํด๋ ์ข์ง๋ง, ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ ๋ฐ๋์ ์๋ก์ด ArrayList๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํด๋ผ.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ] ์บ์ ์ง์ญ์ฑ + ArrayList์ ๊ด๊ณ (0) | 2024.09.03 |
---|---|
[Java] ArrayList ๋ด๋ถ ๊ตฌํ (0) | 2024.09.03 |
[ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ] ๋์ ๋ฐฐ์ด๊ณผ ์ ์ ๋ฐฐ์ด (0) | 2024.08.30 |
[ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ] (์ ์ ) ๋ฐฐ์ด์ ์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์๋๊ฐ (0) | 2024.08.30 |
[Java] ์์ฆ ๊ฐ๋ฐ์๋ค์ Vector๋ฅผ ์์ํ Stack์ ์ ์ฌ์ฉํ์ง ์๋๋ค. (0) | 2024.08.29 |