์•ˆ๋…•! Java์˜ ์ค‘์ฒฉ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ฃผ์ œ๋ฅผ ๊ณ„์† ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋‚œ ์—ฐ์Šต์—์„œ๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ผ๊ณ ๋„ ํ•˜๋Š” ๋น„์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค - 1์˜ค๋Š˜์€ ๋‹ค๋ฅธ ํด๋ž˜์Šค ๊ทธ๋ฃน์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค - 3๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€์š”? ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ด๋ฏธ ์ต์ˆ™ํ•œ static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

public class Boeing737 {

   private int manufactureYear;
   private static int maxPassengersCount = 300;

   public Boeing737(int manufactureYear) {
       this.manufactureYear = manufactureYear;
   }

   public int getManufactureYear() {
       return manufactureYear;
   }

   public static class Drawing {
      
       public static int getMaxPassengersCount() {
          
           return maxPassengersCount;
       }
   }
}
์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค - 4Boeing737์ด ์˜ˆ์—๋Š” ์ด ์œ ํ˜•์˜ ๋น„ํ–‰๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์ธ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: ์ œ์กฐ ์—ฐ๋„( int manufactureYear). ์ตœ๋Œ€ ์Šน๊ฐ ์ˆ˜( )๋ผ๋Š” ํ•˜๋‚˜์˜ ์ •์  ๋ณ€์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค int maxPassengersCount. ๋™์ผํ•œ ๋ชจ๋ธ์˜ ๋ชจ๋“  ํ‰๋ฉด์— ๋Œ€ํ•ด ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋ฏ€๋กœ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Drawing๋˜ํ•œ ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค (๋น„ํ–‰๊ธฐ์˜ ์—”์ง€๋‹ˆ์–ด๋ง ์ฒญ์‚ฌ์ง„์„ ๋‚˜ํƒ€๋ƒ„)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ์šฐ๋ฆฌ๋Š” ์ด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ญ๊ณต๊ธฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ณต์‹ ์ •๋ณด๋ฅผ ์บก์Šํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ์ด ํด๋ž˜์Šค๋ฅผ ์ œ์กฐ ์—ฐ๋„๋กœ ์ œํ•œํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋งŽ์€ ์ •๋ณด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค - 5์ง€๋‚œ ์ˆ˜์—…์—์„œ ๋งํ–ˆ๋“ฏ์ด ์ด๋Ÿฌํ•œ ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ์บก์Šํ™”๊ฐ€ ํ–ฅ์ƒ๋˜๊ณ  ๋ณด๋‹ค ํ˜„์‹ค์ ์ธ ์ถ”์ƒํ™”์— ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ฐ ๋น„์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 1. ์ •์  Drawingํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ํŠน์ • ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ ์ˆ˜์—…์˜ ์ž์ „๊ฑฐ ์˜ˆ๋ฅผ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค.

public class Bicycle {

   private String model;
   private int maxWeight;

   public Bicycle(String model, int maxWeight) {
       this.model = model;
       this.maxWeight = maxWeight;
   }
  
   public void start() {
       System.out.println("Let's go!");
   }

   public class Handlebar {

       public void right() {
           System.out.println("Steer right!");
       }

       public void left() {

           System.out.println("Steer left!");
       }
   }

}
Handlebar๊ทธ ์ˆ˜์—…์—์„œ ์šฐ๋ฆฌ๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ˆˆ์— ๋„์ง€ ์•Š๊ฒŒ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค Bicycle. ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—†์œผ๋ฉด ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •์  ๋‚ดํฌ ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๋Š” ์ „์ ์œผ๋กœ ์ž์ฒด์ ์œผ๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์ •์  ํด๋ž˜์Šค๋Š” ๋น„์ •์  ํด๋ž˜์Šค๋ณด๋‹ค "๋…๋ฆฝ์ "์ž…๋‹ˆ๋‹ค. ์•Œ์•„์•ผ ํ•  ์œ ์ผํ•œ ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

public class Main {

   public static void main(String[] args) {

       Boeing737.Drawing drawing1 = new Boeing737.Drawing();
       Boeing737.Drawing drawing2 = new Boeing737.Drawing();
   }
}
Drawing์ง€๋‚œ ์ˆ˜์—…์—์„œ ํด๋ž˜์Šค๋ฅผ ์ •์ ์œผ๋กœ ๋งŒ๋“  ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?Seatํด๋ž˜์Šค(์ž์ „๊ฑฐ ์ขŒ์„์„ ๋‚˜ํƒ€๋ƒ„) ๋น„์ •์ ? ์ง€๋‚œ๋ฒˆ๊ณผ ๊ฐ™์ด ์˜ˆ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ "์ฒ ํ•™"์„ ์ถ”๊ฐ€ํ•ด ๋ด…์‹œ๋‹ค :) ์ž์ „๊ฑฐ ์ขŒ์„๊ณผ ๋‹ฌ๋ฆฌ ์—”์ง€๋‹ˆ์–ด๋ง ๋„๋ฉด์˜ ๊ฐœ๋…์€ ํ•ญ๊ณต๊ธฐ์˜ ๊ฐœ๋…๊ณผ ์—„๊ฒฉํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์ „๊ฑฐ๊ฐ€ ์—†์œผ๋ฉด ๋ณ„๋„์˜ ์ž์ „๊ฑฐ ์ขŒ์„ ์˜ค๋ธŒ์ ํŠธ๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค(ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ง€๋‚œ ๋‹จ์›์—์„œ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค). ์—”์ง€๋‹ˆ์–ด๋ง ๋„๋ฉด์˜ ๊ฐœ๋…์€ ๊ทธ ์ž์ฒด๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋น„ํ–‰๊ธฐ ์ •๋น„๋ฅผ ๊ณ„ํšํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„ํ–‰๊ธฐ๋Š” ๊ณ„ํš์„ ์„ธ์šฐ๋Š” ๋ฐ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์–ด๋””์—๋‚˜ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”์ง€๋‹ˆ์–ด๋ง ๋„๋ฉด ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋™์ผํ•œ ๋ชจ๋ธ์˜ ๋ชจ๋“  ํ•ญ๊ณต๊ธฐ๋Š” ๋™์ผํ•œ ์—”์ง€๋‹ˆ์–ด ๋„๋ฉด์„ ๊ฐ€์ง€๋ฏ€๋กœ ์ž์ „๊ฑฐ ์ขŒ์„๊ณผ ๊ฐ™์€ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ,Drawing๊ฐ์ฒด๋Š” ํŠน์ • ๋น„ํ–‰๊ธฐ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2. ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์•ก์„ธ์Šค. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์  ํ•„๋“œ์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ ํด๋ž˜์Šค์—๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์  ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ Drawing์žˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋‚˜ ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํด๋ž˜์Šค์— ๋งŒ๋“ค ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค . ๊ฒฐ๊ตญ ๋ณ€์ˆ˜๋Š” ๋น„์ •์ ์ด๋ฏ€๋กœ ์˜ ํŠน์ • ์ธ์Šคํ„ด์Šค์— ์†ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ •์  ๋‚ดํฌ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๊ฐ€ ์‰ฝ๊ฒŒ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค :) ์ •์  ๋ณ€์ˆ˜๊ฐ€ ์™ธ๋ถ€ ํด๋ž˜์Šค์— ์–ด๋–ค ์•ก์„ธ์Šค ์ˆ˜์ •์ž๋ฅผ ๊ฐ€์ง€๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค ํ•ด๋„getMaxPassengersCount()maxPassengersCountgetManufactureYear()DrawingmanufactureYearmanufactureYearBoeing737private, ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ๊ณ„์† ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋ชจ๋“  ๋‚ด์šฉ์€ ์ •์  ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ •์  ๋ฉ”์†Œ๋“œ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ! ๋‚ด๋ถ€ ํด๋ž˜์Šค ์„ ์–ธ์—์„œ staticํ‚ค์›Œ๋“œ๋Š” ํ•˜๋‚˜์˜ ๊ฐœ์ฒด๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ์ฒด์™€ ๋ณ€์ˆ˜๋ฅผ ํ˜ผ๋™ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ •์  ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์˜ˆ, ์ •์  ํด๋ž˜์Šค ๋ณ€์ˆ˜์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: maxPassangersCount. ๊ทธ๋Ÿฌ๋‚˜ static๊ฐ€ ์ค‘์ฒฉ ํด๋ž˜์Šค์— ์ ์šฉ๋˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์›ํ•˜๋Š” ๋งŒํผ ๊ฐœ์ฒด ์ž์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

public class Boeing737 {

   private int manufactureYear;
   private static int maxPassengersCount = 300;

   public Boeing737(int manufactureYear) {
       this.manufactureYear = manufactureYear;
   }

   public int getManufactureYear() {
       return manufactureYear;
   }

   public static class Drawing {

       private int id;

       public Drawing(int id) {
           this.id = id;
       }

       public static int getPassengersCount() {

           return maxPassengersCount;
       }

       @Override
       public String toString() {
           return "Drawing{" +
                   "id=" + id +
                   '}';
       }

       public static void main(String[] args) {

           for (int i = 1; i < 6; i++) {

               Boeing737.Drawing drawing = new Boeing737.Drawing(i);
               System.out.println(drawing);
           }
       }
   }
}
์šฐ๋ฆฌ๋Š” main()์ค‘์ฒฉ๋œ ํด๋ž˜์Šค์—์„œ ์ง์ ‘ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๊ณ (์ด์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ด์œ ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค), 5๊ฐœ์˜ Drawing๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋‹จ์ผ ๊ฐœ์ฒด๊ฐ€ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ . ๋ณด์‹œ๋‹ค์‹œํ”ผ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค :) ์ฝ˜์†” ์ถœ๋ ฅ:

Drawing{id=1} 
Drawing{id=2} 
Drawing{id=3} 
Drawing{id=4} 
Drawing{id=5}
์ด๊ฒƒ์œผ๋กœ ์ˆ˜์—…์„ ๋งˆ์นฉ๋‹ˆ๋‹ค! ๋งŒ์ผ์„ ๋Œ€๋น„ํ•˜์—ฌ Oracle ์„ค๋ช…์„œ์—์„œ ๊ด€๋ จ ์„น์…˜์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค . ์—ฌ์ „ํžˆ ๋ถˆ๋ถ„๋ช…ํ•œ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์ฝ์œผ์‹ญ์‹œ์˜ค. ์ด์ œ ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ํ•ด๊ฒฐํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค! :)