item 29 JungHyunLyoo - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

일반 클래슀λ₯Ό μ œλ„€λ¦­ 클래슀둜 λ§Œλ“€κΈ°

  1. 클래슀 선언에 <μ •κ·œ νƒ€μž… λ§€κ°œλ³€μˆ˜>λ₯Ό μΆ”κ°€ν•˜κΈ°(보톡 E μ‚¬μš©)
  2. 클래슀 λ‚΄μ˜ μ œλ„€λ¦­μœΌλ‘œ μ§€μ •ν•˜κ³  싢은 ν•„λ“œ νƒ€μž…μ„ 클래슀 선언에 좔가해놓은 <μ •κ·œ νƒ€μž… λ§€κ°œλ³€μˆ˜>둜 λ°”κΎΈκΈ°

μ œλ„€λ¦­μ„ μ μš©ν•œ Stack

public class Stack<E> {
    private E[] elements;
    private int size = 0;
    private static final int DEFAULT_INITIAL_CAPACITY = 16;

    public Stack() {
        elements = new E[DEFAULT_INITIAL_CAPACITY];
    }

    public void push(E e) {
        ensureCapacity();
        elements[size++] = e;
    }

    public E pop() {
        if (size == 0)
            throw new EmptyStackException();
        E result = elements[--size];
        elements[size] = null; // λ‹€ μ“΄ μ°Έμ‘° ν•΄μ œ
        return result;
    }

    public boolean isEmpty() {
        return size == 0;
    }

    private void ensureCapacity() {
        if (elements.length == size)
            elements = Arrays.copyOf(elements, 2 * size + 1);
    }

    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();
        for (String arg : args)
            stack.push(arg);
        while (!stack.isEmpty())
            System.out.println(stack.pop().toUpperCase());
    }
}

ν•˜μ§€λ§Œ μœ„ μ½”λ“œλŠ” μ»΄νŒŒμΌλ˜μ§€ μ•ŠλŠ”λ‹€!! E와 같은 싀체화 λΆˆκ°€ νƒ€μž…μœΌλ‘œλŠ” 배열을 λ§Œλ“€ 수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.

ν•΄κ²° 방법 1

1. μƒμ„±μž λ‚΄μ—μ„œ elements ν•„λ“œμ˜ μΈμŠ€ν„΄μŠ€ 생성을 μ•„λž˜μ™€ 같이 μˆ˜μ •

elements = new E[DEFAULT_INITIAL_CAPACITY];
-> elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];


2. μƒμ„±μžμ— @SuppressWarnings("unchecked") μ–΄λ…Έν…Œμ΄μ…˜μ„ μΆ”κ°€


μž₯점 : 가독성 ↑
단점 : λ°°μ—΄μ˜ λŸ°νƒ€μž„ νƒ€μž…μ΄ μ»΄νŒŒμΌνƒ€μž„ νƒ€μž…κ³Ό 달라 νž™ μ˜€μ—Ό(item 32) ↑

ν•΄κ²° 방법 2

1. elementsν•„λ“œμ˜ νƒ€μž…μ„ E[] -> Object[]둜 ꡐ체
그리고 μ—­μ‹œ Eκ°€ 싀체화 λΆˆκ°€ νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ—, elements νƒ€μž… λ‚΄ μ›μ†Œλ₯Ό μ–»μ–΄μ˜€λŠ” λΆ€λΆ„ μˆ˜μ •

E result = elements[--size];
-> E result = (E) elements[--size];


2. @SuppressWarnings("unchecked") μ–΄λ…Έν…Œμ΄μ…˜μ„ μˆ˜μ •ν•œ μ½”λ“œ λ°”λ‘œ μœ„μ— μΆ”κ°€


μž₯점 : νž™ μ˜€μ—Ό ↓
단점 : 가독성 ↓
⚠️ **GitHub.com Fallback** ⚠️