1. ๋‚ด๋ถ€ ํด๋ž˜์Šค

์ •์  ๋ณ€์ˆ˜์™€ ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ตœ๊ทผ์— ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ •์  ํด๋ž˜์Šค๋„ ์žˆ์Œ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋ฉ€๋ฆฌ์„œ ์ด ์ฃผ์ œ์— ์ ‘๊ทผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Java์—์„œ๋Š” ํด๋ž˜์Šค ๋‚ด์—์„œ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์ „์ ์œผ๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค ๋‚ด์˜ ํด๋ž˜์Šค ๋‚ด์— ์žˆ๋Š” ํด๋ž˜์Šค ๋‚ด์˜ ํด๋ž˜์Šค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

class OuterClass
{
   variables of the class
   methods of the class

   class NestedClass
   {
      variables of the class
      methods of the class
   }
}

์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค ์•ˆ์— ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•  ๋ฟ์ž…๋‹ˆ๋‹ค. ์ €๊ฒƒ๊ณผ ๊ฐ™์ด ์‰ฌ์šด.

์˜ˆ:

public class Solution
{
   static ArrayList<Point> points = new ArrayList<Point>();

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points.add(point);
   }

   static class Point
   {
      int x;
      int y;
   }
}

์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ์ •์ ์ด๊ฑฐ๋‚˜ ๋น„์ •์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ๋‹จ์ˆœํžˆ ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค . ๋น„์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ๋‚ด๋ถ€ ํด๋ž˜์Šค ( ๋‚ด๋ถ€ ํด๋ž˜์Šค )๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.



2. ์ •์  ํด๋ž˜์Šค

์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค์— ๊ณต์šฉ ์•ก์„ธ์Šค ํ•œ์ •์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋””์—์„œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋Š” ์ผ๋ฐ˜ ํด๋ž˜์Šค์™€ ๊ฑฐ์˜ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ์ด๋ฆ„

์™ธ๋ถ€ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด ์™ธ๋ถ€ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ์ค‘์ฒฉ ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋œ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์˜ ์ผ๋ฐ˜์ ์ธ ๋ชจ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

OuterClass.InnerClass

์˜ˆ:

์•„์šฐํ„ฐ ํด๋ž˜์Šค ์ค‘์ฒฉ ํด๋ž˜์Šค ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ์ „์ฒด ์ด๋ฆ„
com.codegym.Solution
Point
com.codegym.Solution.Point
java.util.Map
Entry
java.util.Map.Entry
java.util.Files
DirectoryStream
java.util.Files.DirectoryStream
java.nio.WindowsPath
Closeable
java.nio.WindowsPath.Closeable

์ค‘์ฒฉ ํด๋ž˜์Šค์— ์ž์ฒด ์ค‘์ฒฉ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ด๋ฆ„์€ ๋‹จ์ˆœํžˆ ์ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

JDK์—์„œ ์ค‘์ฒฉ๋œ ํด๋ž˜์Šค์˜ ์ „ํ˜•์ ์ธ ์˜ˆ๋Š” ํด๋ž˜์Šค Entry๋‚ด๋ถ€์˜ ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค Map. HashMap๊ฐ์ฒด ์— entrySet()์ €์žฅ๋œ ํ‚ค-๊ฐ’ ์Œ ์„ธํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด .Set<Map.Entry>

์ด๊ฒƒ์€ ์™ธ๋ถ€ ํด๋ž˜์Šค์™€ ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.Map.Entry

๊ฐœ์ฒด ๋งŒ๋“ค๊ธฐ

์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

OuterClass.NestedClass name = new OuterClass.NestedClass();

์ผ๋ฐ˜ ํด๋ž˜์Šค์™€ ๋™์ผํ•˜์ง€๋งŒ ์ด๋ฆ„์€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ •์  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

์ •์  ํด๋ž˜์Šค์— ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜ ํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋‹จ, ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋จ).

OuterClass.NestedClass.staticMethod();

์ •์  ๋ณ€์ˆ˜์— ์•ก์„ธ์Šค

์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ๊ณต๊ฐœ ์ •์  ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ๋„ ์‰ฝ์Šต๋‹ˆ๋‹ค.

OuterParent.NestedClass.nameOfStaticVariable


3. ์ •์  ํด๋ž˜์Šค์˜ ํŠน์ง•

์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ์ •์ ์ด๋ผ๊ณ  ํ•  ์ด์œ ๊ฐ€ ๊ฐ€์žฅ ์ ์Šต๋‹ˆ๋‹ค . ๊ทธ๊ฒƒ๋“ค์€ ์ผ๋ฐ˜ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค . ๋น„์ •์  ๋ฉ”์„œ๋“œ์—์„œ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ(์ค‘์ฒฉ ๋ฐ ์ •์ ์ด ์•„๋‹Œ) ํด๋ž˜์Šค์™€ ์–ด๋–ค ์ฐจ์ด๋„ ๋Š๋ผ์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ:

์ •์  ์ค‘์ฒฉ ํฌ์ธํŠธ ํด๋ž˜์Šค ์ผ๋ฐ˜ ํฌ์ธํŠธ ํด๋ž˜์Šค.
public class Solution
{
   static ArrayList<Point> points;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points = new ArrayList<Point>();
      points.add(point);
   }

   static class Point
   {
      int x;
      int y;
   }
}
public class Solution
{
   static ArrayList<Point> points;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;
      points = new ArrayList<Point>();
      points.add(point);
   }
}

class Point
{
   int x;
   int y;
}

์ผ๋ถ€ ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ์™ธ๋ถ€ ํด๋ž˜์Šค ๋ฐ–์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋ณ€๊ฒฝ๋˜๋Š” ์œ ์ผํ•œ ์‚ฌํ•ญ์€ ์ƒˆ ํด๋ž˜์Šค๊ฐ€ ๋” ์ด์ƒ private static์ด์ „ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ:

์ •์  ์ค‘์ฒฉ ํฌ์ธํŠธ ํด๋ž˜์Šค ์ผ๋ฐ˜ ํฌ์ธํŠธ ํด๋ž˜์Šค.
public class Solution
{
   private static ArrayList<Point> points;

   static class Point
   {
      int x;
      int y;

      public static void main(String[] args)
      {
         Point point = new Point();
         point.x = 100;
         point.y = 200;

         // This will work
         points = new ArrayList<Point>();
         points.add(point);
      }
   }
}
public class Solution
{
   private static ArrayList<Point> points;
}

class Point
{
   int x;
   int y;

   public static void main(String[] args)
   {
      Point point = new Point();
      point.x = 100;
      point.y = 200;

      // This will generate an error
      points = new ArrayList<Point>();
      points.add(point);
   }
}

main์ผ๋ฐ˜ Pointํด๋ž˜์Šค ์˜ ๋ฉ”์„œ๋“œ ๋Š” ํด๋ž˜์Šค ์˜ ๋ณ€์ˆ˜ ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค !private static pointsSolution

์ด๊ฒƒ์ด ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค์™€ ์ผ๋ฐ˜ ํด๋ž˜์Šค์˜ ์ฃผ์š” ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋Š” ์„ ์–ธ๋œ ๊ฒฝ์šฐ์—๋„ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ •์  ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค private.

์ƒ๊ฐํ•ด ๋ณด๋ฉด ์™œ ๋†€๋ผ์šด ์ผ์ž…๋‹ˆ๊นŒ? ์ˆ˜์ • ์ž๋Š” private์ด ์ˆ˜์ •์ž๊ฐ€ ํ‘œ์‹œํ•œ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ๋งํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํด๋ž˜์Šค ์•ˆ์— ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ, ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค! ์›ํ•˜๋Š” ๋งŒํผ ์•ก์„ธ์Šคํ•˜์„ธ์š”.