CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /Java์˜ ์ •์  ์ˆ˜์ •์ž์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ์‚ฌํ•ญ
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

Java์˜ ์ •์  ์ˆ˜์ •์ž์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ์‚ฌํ•ญ

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
Java์—์„œ ์ •์  ์ˆ˜์ •์ž๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ํด๋ž˜์Šค์™€ ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ๋˜์–ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ์ •์ ์ด๋ฉด ํด๋ž˜์Šค์— ์†ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์ ์ด๋ฉด ํด๋ž˜์Šค์— ์†ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ •์  ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด countํ•„๋“œ๊ฐ€ ํด๋ž˜์Šค์—์„œ ์ •์  ์ด๋ฉด Counter๋‹ค์Œ ์‹์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Counter.count. Java์˜ ์ •์  ์ˆ˜์ •์ž์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ์‚ฌํ•ญ - 1๋ฌผ๋ก  ์•ก์„ธ์Šค ํ•œ์ •์ž๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด privateํ•„๋“œ๋Š” ์„ ์–ธ๋œ ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ protected๋Š” ํŒจํ‚ค์ง€ ๋‚ด์˜ ๋ชจ๋“  ํด๋ž˜์Šค์™€ ํŒจํ‚ค์ง€ ์™ธ๋ถ€์˜ ๋ชจ๋“  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์— ์ž‘์—…์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” Counter์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.increment()countํ•„๋“œ. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Counter.increment(). Counter์ •์  ํ•„๋“œ ๋˜๋Š” ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค . ์ด๊ฒƒ์ด ์ •์ (ํด๋ž˜์Šค) ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ์™€ ๋น„์ •์ (์ธ์Šคํ„ด์Šค) ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ ๊ฐ„์˜ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค์˜ ์ •์  ๋ฉค๋ฒ„๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ํด๋ž˜์Šค์— ์ง์ ‘ ์†ํ•œ๋‹ค๋Š” ์ ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ฆ‰, ์ •์  count๋ณ€์ˆ˜์˜ ๊ฐ’์€ ๋ชจ๋“  ๊ฐœ์ฒด์— ๋Œ€ํ•ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค Counter. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Java์—์„œ ์ •์  ํ•œ์ •์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์ธก๋ฉด๊ณผ ์ฃผ์š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ Java์˜ ์ •์  ์ˆ˜์ •์ž์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ์‚ฌํ•ญ.

์ด ์„น์…˜์—์„œ๋Š” ์ •์  ๋ฉ”์„œ๋“œ, ํ•„๋“œ ๋ฐ ํด๋ž˜์Šค ์‚ฌ์šฉ์˜ ์ฃผ์š” ์ธก๋ฉด์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  1. ์ •์  ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋ธ”๋ก๊ณผ ๊ฐ™์€ ์ •์  ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ํด๋ž˜์Šค์˜ ๋น„์ •์  ๋ฉค๋ฒ„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

    
    public class Counter {
    private int count;
    public static void main(String args []) {
       System.out.println(count); //  Compile time error
    }
    }
    

    ์ด๊ฒƒ์€ Java ํ”„๋กœ๊ทธ๋ž˜๋จธ, ํŠนํžˆ ์ดˆ๋ณด์ž๊ฐ€ ์ €์ง€๋ฅด๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‹ค์ˆ˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. main๋ฉ”์†Œ๋“œ๋Š” ์ •์ ์ด๊ณ  count๋ณ€์ˆ˜๋Š” ์ •์ ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ println๋‚ด๋ถ€์—์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด main"์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์˜ค๋ฅ˜"๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  2. thread safe๋กœ์ปฌ ๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ ์ •์  ํ•„๋“œ ๋ฐ ๋ฉ”์„œ๋“œ๋Š” Java์— ์—†์Šต๋‹ˆ๋‹ค . ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ณด์•ˆ ๋ฌธ์ œ์˜ ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•œ ์›์ธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค์˜ ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ •์  ๋ณ€์ˆ˜์˜ ๋™์ผํ•œ ๋ณต์‚ฌ๋ณธ์„ ์ฐธ์กฐํ•œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค์— ์˜ํ•ด ๋ณดํ˜ธ๋˜๊ฑฐ๋‚˜ "์ž ๊ฒจ" ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •์  ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  synchronized๋•Œ๋Š” race conditions.

  3. ์ •์  ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์‹ค์šฉ์ ์ธ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์„ ์–ธํ•œ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ factory๋ฐฉ๋ฒ•๊ณผ utility๋ฐฉ๋ฒ•์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค java.lang.Math๋Š” ํ›Œ๋ฅญํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์ ์ž…๋‹ˆ๋‹ค. finalJava์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋„ ๊ฐ™์€ ์ด์œ ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค .

  4. @Override๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ ์€ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜( )ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . ์— ๊ทธ๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ, ์ฆ‰ ๋™์ผํ•œ ์ด๋ฆ„๊ณผ ์„œ๋ช…์„ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋ฉด subclassํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ superclass์žฌ์ •์˜ํ•˜๋Š” ๋Œ€์‹  "์ˆจ๊ธฐ๊ธฐ"๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ํ˜„์ƒ์€ method hiding. ์ฆ‰, ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค ๋ชจ๋‘์—์„œ ์„ ์–ธ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ํ•ญ์ƒ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ณ€์ˆ˜ ์œ ํ˜•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ์žฌ์ •์˜์™€ ๋‹ฌ๋ฆฌ ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    
    class Vehicle {
         public static void kmToMiles(int km) {
              System.out.println("Inside the parent class / static method");
         } 
    }
    
    class Car extends Vehicle {
         public static void kmToMiles(int km) {
              System.out.println("Inside the child class / static method");
         } 
    }
    
    public class Demo {   
       public static void main(String args []) {
          Vehicle v = new Car();
           v.kmToMiles(10);
      }
    }
    

    ์ฝ˜์†” ์ถœ๋ ฅ:

    ์ƒ์œ„ ํด๋ž˜์Šค/์ •์  ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€

    ์ด ์ฝ”๋“œ๋Š” ๊ฐ์ฒด๊ฐ€ ์ด๋ผ๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํด๋ž˜์Šค Car์˜ ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ Vehicle์ปดํŒŒ์ผ ํƒ€์ž„์— ํ˜ธ์ถœ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœ๋˜์—ˆ์Œ์„ ๋ถ„๋ช…ํžˆ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค!

  5. ๋˜ํ•œ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค ์ด์™ธ์˜ ํด๋ž˜์Šค๋ฅผ ์ •์ ์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋Š” nested static classes. ๋” ๋‚˜์€ ์‘์ง‘๋ ฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ค‘์ฒฉ๋œ ์ •์  ํด๋ž˜์Šค์˜ ๋†€๋ผ์šด ์˜ˆ๋Š” HashMap.Entry๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ธ ์ž…๋‹ˆ๋‹ค HashMap. ๋‚ด๋ถ€ ํด๋ž˜์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ๋ณ„๋„์˜ .class ํŒŒ์ผ์—์„œ ์„ ์–ธ๋œ๋‹ค๋Š” ์ ์€ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ํด๋ž˜์Šค์—์„œ 5๊ฐœ์˜ ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๋ฉด .class ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ 6๊ฐœ์˜ ํŒŒ์ผ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ํด๋ž˜์Šค ์˜ ๋‚˜์ด ๋น„๊ต๊ธฐ( ) Comparator์™€ ๊ฐ™์€ ์šฐ๋ฆฌ ์ž์‹ ์˜ ์„ ์–ธ์ž…๋‹ˆ๋‹ค .AgeComparatorEmployee

  6. ์ •์  ์ˆ˜์ •์ž๋Š” ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” "์ •์  ์ดˆ๊ธฐํ™” ๋ธ”๋ก"์œผ๋กœ ๋” ์ž˜ ์•Œ๋ ค์ง„ ์ •์  ๋ธ”๋ก์— ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ธ”๋ก์„ ์„ ์–ธํ•˜์ง€ ์•Š์œผ๋ฉด Java๋Š” ๋ชจ๋“  ์ •์  ํ•„๋“œ๋ฅผ ๋‹จ์ผ ๋ชฉ๋ก์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ธ”๋ก์€ ํ™•์ธ๋œ ์˜ˆ์™ธ๋ฅผ throwํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ™•์ธ๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ๋Š” throwํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ExceptionInInitializerError๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ •์  ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ˆ์™ธ๋Š” Java์— ์˜ํ•ด ์ด ์˜ค๋ฅ˜๋กœ ๋ž˜ํ•‘๋ฉ๋‹ˆ๋‹ค. NoClassDefFoundError์ด๊ฒƒ์€ ํด๋ž˜์Šค๊ฐ€ ์ฐธ์กฐ๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์›์ธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค .

  7. ์‹ค์ œ ๊ฐœ์ฒด์—์„œ ํ˜ธ์ถœ๋  ๋•Œ ๋Ÿฐํƒ€์ž„์— ์—ฐ๊ฒฐ๋˜๋Š” ๊ฐ€์ƒ ๋˜๋Š” ๋น„์ •์  ๋ฉ”์„œ๋“œ์˜ ์—ฐ๊ฒฐ๊ณผ ๋‹ฌ๋ฆฌ ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์—ฐ๊ฒฐ๋œ๋‹ค๋Š” ์ ์„ ์•„๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •์  ๋ฉ”์„œ๋“œ๋Š” ๋Ÿฐํƒ€์ž„์— ๋‹คํ˜•์„ฑ์ด ์ ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Java์—์„œ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์ ์œผ๋กœ ์„ ์–ธํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ค‘์š”ํ•œ ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ๋Šฅ๋ ฅ์ด ์—†๊ฑฐ๋‚˜ ์žฌ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ๋Š” ์ •์  ํ•œ์ •์ž๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. Joshua Bloch๋Š” ๋ชจ๋“  Java ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ฝ์–ด์•ผ ํ•  ์ €์„œ Effective Java์—์„œ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ตฌ์„ฑ์ž์— ๋น„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์žฅ์ ์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค.

  8. ์ดˆ๊ธฐํ™”๋Š” ์ •์  ๋ธ”๋ก์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. ์ •์  ํ•„๋“œ ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ํ›„ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ์ˆœ์„œ๋Š” Java ํด๋ž˜์Šค์˜ ์†Œ์Šค ํŒŒ์ผ์— ์„ ์–ธ๋œ ์ˆœ์„œ์™€ ๋™์ผํ•˜๊ฒŒ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ •์  ํ•„๋“œ๋Š” ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ”„๋กœ์„ธ์Šค๋Š” SingletonํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Enum์–ด๋–ค ์ด์œ ๋กœ as a๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ Singleton์ข‹์€ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ "์ง€์—ฐ" ์ดˆ๊ธฐํ™”๊ฐ€ ์•„๋‹˜์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •์  ํ•„๋“œ๊ฐ€ ๋ˆ„๊ตฐ๊ฐ€ "์š”์ฒญ"ํ•˜๊ธฐ ์ „์— ์ดˆ๊ธฐํ™”๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด๊ฐ€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ •์  ๋ธ”๋ก์—์„œ ๊ฐœ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  9. ์ง๋ ฌํ™” ์ค‘์— transient๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์ •์  ํ•„๋“œ๋Š” ์ง๋ ฌํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ •์  ํ•„๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ์—ญ์ง๋ ฌํ™” ํ›„ ์ดˆ๊ธฐ(๊ธฐ๋ณธ๊ฐ’) ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ •์  ํ•„๋“œ๊ฐ€ ์ธ ๊ฒฝ์šฐ int์—ญ์ง๋ ฌํ™” ํ›„ ํ•ด๋‹น ๊ฐ’์€ 0์ด ๋ฉ๋‹ˆ๋‹ค. ์œ ํ˜•์ด ์ธ ๊ฒฝ์šฐ float๊ฐ’์€ 0.0์ด ๋ฉ๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ์ด๋ฉด Object๊ฐ’์€ ์ž…๋‹ˆ๋‹ค null. ์†”์งํžˆ ๋งํ•ด์„œ ์ด๊ฒƒ์€ Java ์ง์ฑ…์— ๋Œ€ํ•œ ์ธํ„ฐ๋ทฐ์—์„œ ์ง๋ ฌํ™”์— ๋Œ€ํ•ด ๊ฐ€์žฅ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํ•„์ˆ˜ ๊ฐœ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ •์  ํ•„๋“œ์— ์ €์žฅํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค!

  10. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •์  ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์ˆ˜์ •์ž๋Š” ํ‘œ์ค€ ๋ฌธ๊ณผ ๊ณตํ†ต์ ์ด ๋งŽ์ง€๋งŒ importํ•˜๋‚˜ ๋˜๋Š” ๋ชจ๋“  ์ •์  ํด๋ž˜์Šค ๋ฉค๋ฒ„๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๋™์ผํ•œ ํด๋ž˜์Šค์—์„œ ์„ ์–ธ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •์  ํ•„๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ Java 1.5์— ๋“ฑ์žฅํ–ˆ์œผ๋ฉฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ์„ฑ์€ JUnit ํ…Œ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๊ฐœ๋ฐœ์ž๊ฐ€ assert ๋ฉ”์„œ๋“œ(์˜ˆ: assertEquals()์˜ค๋ฒ„๋กœ๋“œ๋œ ๋ณ€ํ˜•)์— ๋Œ€ํ•ด ์ •์  ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  11. ์ง€๊ธˆ์€ ์—ฌ๊ธฐ๊นŒ์ง€์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  Java ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ •์  ์ˆ˜์ •์ž์˜ ๋ชจ๋“  ์ธก๋ฉด์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ •์  ๋ณ€์ˆ˜, ํ•„๋“œ, ๋ฉ”์†Œ๋“œ, ์ดˆ๊ธฐํ™” ๋ธ”๋ก ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ๊ฒ€ํ† ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Java ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์†์„ฑ์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ์ง„์ง€ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋งค์šฐ โ€‹โ€‹์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์  ๋ฉค๋ฒ„๋ฅผ ๋Šฅ์ˆ™ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค."

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION