Skip to main content

๊ทœ์น™7 : ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚œ ๊ฐ์ฒด ์ฐธ์กฐ๋Š” ํ๊ธฐํ•˜๋ผ

2024๋…„ 7์›” 4์ผLess than 1 minuteJavacrashcoursejavajdkjdk8

๊ทœ์น™7 : ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚œ ๊ฐ์ฒด ์ฐธ์กฐ๋Š” ํ๊ธฐํ•˜๋ผ ๊ด€๋ จ

๋ชฉ์ฐจ

Effective Java

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์‚ญ์ œ | ์–‘๋ด‰์ˆ˜ ๋ธ”๋กœ๊ทธ
๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š” ์‹œ์ ๊ณผ ๊ทธ ๋ฐฉ๋ฒ•, ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ทธ ๋ฐฉ๋ฒ•, ์ ์ ˆํ•œ ์ˆœ๊ฐ„์— ๊ฐ์ฒด๊ฐ€ ์‚ญ์ œ๋˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์‚ญ์ œ ์ „์— ๋ฐ˜๋“œ์‹œ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋Š” ์ฒญ์†Œ ์ž‘์—…๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณธ๋‹ค.

Eliminate obsolete object references

์Šคํƒ์ด ์ปค์กŒ๋‹ค๊ฐ€ ์ค„์–ด๋“ค๋ฉด์„œ ์ œ๊ฑฐํ•œ ๊ฐ์ฒด๋“ค์„ GC๊ฐ€ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ฒจ์ž ๊ฐ’์ด size๋ณด๋‹ค ์ž‘์€ ๊ณณ์— ์žˆ๋Š” ์š”์†Œ๋“ค์€ ์‹ค์ œ๋กœ ์“ฐ์ด๋Š” ์ฐธ์กฐ๋“ค์ด์ง€๋งŒ, ๋‚˜๋จธ์ง€ ์˜์—ญ์— ์žˆ๋Š” ์ฐธ์กฐ๋“ค์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๋ฌธ์ œ๋Š” ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ฐธ์กฐ๋˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค๋„ ์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘์—์„œ ์ œ์™ธ๋œ๋‹ค.

ํ•˜์ง€๋งŒ GC ์ž…์žฅ์—์„œ๋Š” free object๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ ๋„๋ฆฌ๊ฐ€ ์—†๋‹ค.
ํ•˜์ง€๋งŒ GC ์ž…์žฅ์—์„œ๋Š” free object๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ ๋„๋ฆฌ๊ฐ€ ์—†๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํžˆ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค. ์“ธ ์ผ ์—†๋Š” ๊ฐ์ฒด ์ฐธ์กฐ๋Š” ๋ฌด์กฐ๊ฑด null๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

public Object pop() {
    if(size ==0)
        throw new EmptyStackException();
    Object result = elements[--size];
    elements[size] = null //๋งŒ๊ธฐ ์ฐธ์กฐ ์ œ๊ฑฐ
    return result;
}

๋งŒ๊ธฐ ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํ•ด๋‹น ์ฐธ์กฐ๊ฐ€ ๋ณด๊ด€๋œ ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจ๋ฒ”์œ„๋ฅผ ๋ฒ—์•„๋‚˜๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด๋‹ค.

์บ์‹œ๋„ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์žฅ์†Œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ํ”ํžˆ ๋ฐœ๊ฒฌ๋˜๋Š” ๋˜ ํ•œ๊ณณ์€ ๋ฆฌ์Šค๋„ˆ ๋“ฑ์˜ ์—ญํ˜ธ์ถœ์ž(callback)๋‹ค.