item 57 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ผ.

๋ณ€์ˆ˜

  • ์„ ์–ธ์œ„์น˜์— ๋”ฐ๋ฅธ ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜
class Variables
// ํด๋ž˜์Šค ์˜์—ญ 
{
    int iv;                       // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜
    static int cv                 // ํด๋ž˜์Šค๋ณ€์ˆ˜ (static, ๊ณต์œ  ๋ณ€์ˆ˜)
    // ๋ฉ”์„œ๋“œ ์˜์—ญ 
    void method() {
        int localVariable = 0;    // ์ง€์—ญ๋ณ€์ˆ˜
    }
}

์ƒ์„ฑ ์‹œ๊ธฐ

  • ํด๋ž˜์Šค ๋ณ€์ˆ˜ - ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ๋•Œ
  • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ - ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์‹œ
  • ์ง€์—ญ๋ณ€์ˆ˜ - ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ ์ˆ˜ํ–‰์‹œ

๋ณ€์ˆ˜์˜ ์„ ์–ธ ์œ„์น˜๊ฐ€ ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜์™€ ๋ฒ”์œ„(scope)์„ ๊ฒฐ์ •ํ•œ๋‹ค.


ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ๋Š” ์•„์ดํ…œ 15์™€ ๋น„์Šทํ•œ ์ทจ์ง€

  • ํด๋ž˜์Šค ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ์™€ ๋‚ด๋ถ€ ๊ตฌํ˜„ ์ •๋ณด๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ˆจ๊ฒผ๋Š๋ƒ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.
  • ์ž˜ ์„ค๊ณ„๋œ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ชจ๋“  ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์™„๋ฒฝํžˆ ์ˆจ๊ฒจ ๊ตฌํ˜„๊ณผ API๋ฅผ ๊น”๋”ํžˆ ๋ถ„๋ฆฌํ•œ๋‹ค.
  • ์ •๋ณด ์€๋‹‰ (์บก์Šํ™”)๋ผ๋Š” ๊ฐœ๋…์€ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์˜ ๊ทผ๊ฐ„์ด๋‹ค.

์ง€์—ญ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œ๋กœ ์ค„์ด๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง€๊ณ  ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์•„์ง„๋‹ค.

๋ฌธ์žฅ์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด๋ฉด ์–ด๋””์„œ๋“  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ ๊ฐ€๋Šฅ

์ง€์—ญ ๋ณ€์ˆ˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ?

์ง€์—ญ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ค„์ด๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ€์žฅ ์ฒ˜์Œ ์“ฐ์ผ ๋•Œ ์„ ์–ธํ•˜๊ธฐ
  • ๋ณ€์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์—” ํƒ€์ž…๊ณผ ์ดˆ๊นƒ๊ฐ’์ด ๊ธฐ์–ต๋‚˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๋‹ค ์“ด ๋’ค์—๋„ ์—ฌ์ „ํžˆ ์‚ด์•„ ์žˆ๊ฒŒ ๋˜๊ธฐ ์‰ฝ๋‹ค.
  • ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋Š” ์„ ์–ธ๋œ ์ง€์ ๋ถ€ํ„ฐ ๊ทธ ์ง€์ ์„ ํฌํ•จํ•œ ๋ธ”๋ก์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์ด๋ฏ€๋กœ ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋ก ๋ฐ”๊นฅ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๊ทธ ๋ธ”๋ก์ด ๋๋‚œ ๋’ค๊นŒ์ง€ ์‚ด์•„ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์‹ค์ˆ˜๋กœ ์˜๋„ํ•œ ๋ฒ”์œ„ ์•ž ํ˜น์€ ๋’ค์—์„œ ๊ทธ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋”์ฐํ•œ ๊ฒฐ๊ณผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

  1. ๊ฑฐ์˜ ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™” ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ดˆ๊ธฐํ™”์— ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ถฉ๋ถ„ํ•ด์งˆ ๋•Œ๊นŒ์ง€ ์„ ์–ธ์„ ๋ฏธ๋ค„์•ผ ํ•œ๋‹ค.
  • try-catch ๋ฌธ์€ ์ด ๊ทœ์น™์—์„œ ์˜ˆ์™ธ๋‹ค.

๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ‘œํ˜„์‹์—์„œ ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด try ๋ธ”๋ก ์•ˆ์—์„œ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ธ”๋ก์„ ๋„˜์–ด ๋ฉ”์„œ๋“œ๊นŒ์ง€ ์ „ํŒŒ๋œ๋‹ค.

  • ๋ฐ˜๋ณต๋ฌธ์˜ ๊ฒฝ์šฐ ๋ฐ˜๋ณต ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ ๋’ค์—๋„ ์จ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ผ๋ฉด while๋ฌธ ๋ณด๋‹ค๋Š” for๋ฌธ์„ ์“ฐ๋Š” ํŽธ์ด ๋‚ซ๋‹ค.
  • ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ฉด (๋ฐ˜๋ณต์ž์˜ remove ๋ฉ”์„œ๋“œ๋ฅผ ์จ์•ผ ํ•œ๋‹ค๋“ ๊ฐ€) for-each๋ฌธ ๋Œ€์‹  for๋ฌธ์„ ์“ฐ๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.
  • ์•„๋ž˜์™€ ๊ฐ™์ด while ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.
Iterator<Element> i = c.iterator();
while(i.hasNext()) {
    doSomeThing(i.next());
}

Iterator<Element> i2 = c2.iterator();
while(i.hasNext()) { 
    doSomeThing(i2.next());
}
  • ์ปดํŒŒ์ผ๋„ ์ž˜๋˜๊ณ  ์‹คํ–‰๋„ ์ž˜๋˜์ง€๋งŒ ๊ธฐ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • for๋ฌธ์„ ํฌํ•จํ•œ for-each๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์žก์•„์ค€๋‹ค. (๋ฐ˜๋ณต์ž์˜ ์œ ํšจ๋ฒ”์œ„๊ฐ€ for๋ฌธ์˜ ์ข…๋ฃŒ์™€ ํ•จ๊ป˜ ๋๋‚˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
  1. ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ํ•œ ๋ฉ”์„œ๋“œ์—์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ๊ทธ์ค‘ ํ•œ ๊ธฐ๋Šฅ๊ณผ๋งŒ ๊ด€๋ จ๋œ ์ง€์—ญ๋ณ€์ˆ˜๋ผ๋„ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
  • ๋‹จ์ˆœํžˆ ๋ฉ”์„œ๋“œ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ชผ๊ฐœ๋ฉด ๋œ๋‹ค.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ