Java

[Effective Java] ์•„์ดํ…œ 76. ๊ฐ€๋Šฅํ•œ ํ•œ ์‹คํŒจ ์›์ž์ ์œผ๋กœ ๋งŒ๋“ค๋ผ.

quedevel 2023. 4. 6. 10:50
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽฏ ์•„์ดํ…œ 76. ๊ฐ€๋Šฅํ•œ ํ•œ ์‹คํŒจ ์›์ž์ ์œผ๋กœ ๋งŒ๋“ค๋ผ.

์ผ๋ฐ˜ํ™”ํ•ด ์ด์•ผ๊ธฐํ•˜๋ฉด, ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ ํ•ด๋‹น ๊ฐ์ฒด๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํŒจ ์›์ž์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

1๏ธโƒฃ ๋ถˆ๋ณ€ ๊ฐ์ฒด

๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ ์ƒํƒœ๋Š” ์ƒ์„ฑ ์‹œ์ ์— ๊ณ ์ •๋˜์–ด ์ ˆ๋Œ€ ๋ณ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ํด๋ž˜์Šค๋ฅผ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ 5๊ฐ€์ง€ ๊ทœ์น™

1.๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์„œ๋“œ(setter)๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

2.ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.

3.๋ชจ๋“  ํ•„๋“œ๋ฅผ final๋กœ ์„ ์–ธํ•œ๋‹ค.

4.๋ชจ๋“  ํ•„๋“œ๋ฅผ private์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.

5.์ž์‹  ์™ธ์—๋Š” ๋‚ด๋ถ€์˜ ๊ฐ€๋ณ€ ์ปดํฌ๋„ŒํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.


2๏ธโƒฃ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์ž ์žฌ์  ์˜ˆ์™ธ์˜ ๊ฐ€๋Šฅ์„ฑ ๋Œ€๋ถ€๋ถ„์„ ๊ฑธ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

public Object pop(){
    if(size == 0)
        throw new EmptyStackException();
    Object result = elements[--size];
    elements[size] = null; // ๋‹ค ์“ด ์ฐธ์กฐ ํ•ด์ œ
    return result;
}

3๏ธโƒฃ ๊ฐ์ฒด์˜ ์ž„์‹œ ๋ณต์‚ฌ๋ณธ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ, ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ์›๋ž˜ ๊ฐ์ฒด์™€ ๊ต์ฒด

4๏ธโƒฃ ์ž‘์—… ๋„์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์‹คํŒจ๋ฅผ ๊ฐ€๋กœ์ฑ„๋Š” ๋ณต๊ตฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ž‘์—… ์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•


์‹คํŒจ ์›์ž์„ฑ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ถŒ์žฅ๋˜๋Š” ๋•๋ชฉ์ด์ง€๋งŒ ํ•ญ์ƒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™๊ธฐํ™” ์—†์ด ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋™์‹œ์— ์ˆ˜์ •ํ•œ๋‹ค๋ฉด ๊ทธ ๊ฐ์ฒด์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ConcurrentModificationException์„ ์žก์•„๋ƒˆ๋‹ค๊ณ  ํ•ด์„œ ๊ทธ ๊ฐ์ฒด๊ฐ€ ์—ฌ์ „ํžˆ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ผ๊ณ  ๊ฐ€์ •ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ํ•œํŽธ, Error๋Š” ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ AssertionError์— ๋Œ€ํ•ด์„œ๋Š” ์‹คํŒจ ์›์ž์ ์œผ๋กœ ๋งŒ๋“ค๋ ค๋Š” ์‹œ๋„์กฐ์ฐจ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์‹คํŒจ ์›์ž์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋”๋ผ๋„ ํ•ญ์ƒ ๊ทธ๋ฆฌ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค. ์‹คํŒจ ์›์ž์„ฑ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋น„์šฉ์ด๋‚˜ ๋ณต์žก๋„๊ฐ€ ์•„์ฃผ ํฐ ์—ฐ์‚ฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‹คํŒจ ์‹œ์˜ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ API ์„ค๋ช…์— ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.


์ฐธ๊ณ  ์ž๋ฃŒ

Joshua Bloch, ใ€ŽEffective Java 3/Eใ€, ๊ฐœ์•ž๋งต์‹œ ์˜ฎ๊น€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ธ์‚ฌ์ดํŠธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=

728x90
๋ฐ˜์‘ํ˜•