item 87 incheol - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

์•„์ดํ…œ 87 ์ปค์Šคํ…€ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ๊ณ ๋ คํ•ด๋ณด๋ผ

์ข…์ข… ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๋Œ€๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ•˜๊ณ , ์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ๊ทธ๋ƒฅ ๋™์ž‘๋งŒ ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋ณดํ†ต์€ ํฌ๊ฒŒ ๋ฌธ์ œ๋˜์ง€ ์•Š๋Š” ์ „๋žต์ด๋‹ค. ํ•˜์ง€๋งŒ ํด๋ž˜์Šค๊ฐ€ Serializab le์„ ๊ตฌํ˜„ํ•˜๊ณ  ๊ธฐ๋ณธ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค ๋•Œ ๋ฒ„๋ฆฌ๋ ค ํ•œ ํ˜„์žฌ์˜ ๊ตฌํ˜„์— ์˜์›ํžˆ ๋ฐœ์ด ๋ฌถ์ด๊ฒŒ ๋œ๋‹ค. ์‹ค์ œ๋กœ๋„ BigInteger ๊ฐ™์€ ์ผ๋ถ€ ์ž๋ฐ” ํด๋ž˜์Šค๊ฐ€ ์ด ๋ฌธ์ œ์— ์‹œ๋‹ฌ๋ฆฌ๊ณ  ์žˆ๋‹ค.

๋จผ์ € ๊ณ ๋ฏผํ•ด๋ณด๊ณ  ๊ดœ์ฐฎ๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ๋งŒ ๊ธฐ๋ณธ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

์ง๋ ฌํ™” ํ˜•ํƒœ๋Š” ์œ ์—ฐ์„ฑ, ์„ฑ๋Šฅ, ์ •ํ™•์„ฑ ์ธก๋ฉด์—์„œ ์‹ ์ค‘ํžˆ ๊ณ ๋ฏผํ•œ ํ›„ ํ•ฉ๋‹นํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ์ฒด์˜ ๋ฌผ๋ฆฌ์  ํ‘œํ˜„๊ณผ ๋…ผ๋ฆฌ์  ๋‚ด์šฉ์ด ๊ฐ™๋‹ค๋ฉด ๊ธฐ๋ณธ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ผ๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‹ค์Œ์˜ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด๋ณด์ž

public final class StringList implements Serializable {
    private int size = 0;
    private Entry head = null;

    private static class Entry implements Serializable {
        String data;
        Entry next;
        Entry previous;
    }
    // ... ์ƒ๋žต
}
  • ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ด ํด๋ž˜์Šค๋Š” ์ผ๋ จ์˜ ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•œ๋‹ค.
  • ๋ฌผ๋ฆฌ์ ์œผ๋กœ๋Š” ๋ฌธ์ž์—ด๋“ค์„ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐํ–ˆ๋‹ค.
  • ์ด ํด๋ž˜์Šค์— ๊ธฐ๋ณธ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ๋…ธ๋“œ์˜ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด ๋ชจ๋“  ์—”ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.

๊ณ ๋ คํ•ด์•ผ ํ•  ๋ฌธ์ œ์ 

  1. ๊ณต๊ฐœ API๊ฐ€ ํ˜„์žฌ์˜ ๋‚ด๋ถ€ ํ‘œํ˜„ ๋ฐฉ์‹์— ์˜๊ตฌํžˆ ๋ฌถ์ธ๋‹ค.
  2. ๋„ˆ๋ฌด ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋งŽ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  4. ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.