λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Java

[Java-기초] λ‚΄λΆ€ 클래슀

by μ½”λ”©ν•˜λŠ” λΆ•μ–΄ 2021. 2. 22.
λ°˜μ‘ν˜•

β–Ά λ‚΄λΆ€ 클래슀

 

*λ‚΄λΆ€ 클래슀 μ •μ˜μ™€ μœ ν˜• → 주둜 λ³΄μ•ˆμͺ½μ—μ„œ 많이 μ“°μž„

λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” 말 κ·ΈλŒ€λ‘œ '클래슀 내뢀에 μ„ μ–Έν•œ 클래슀'이닀. 내뢀에 클래슀λ₯Ό μ„ μ–Έν•˜λŠ” μ΄μœ λŠ” λŒ€κ°œ 이 ν΄λž˜μŠ€μ™€ μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ λ°€μ ‘ν•œ 관련이 있기 λ•Œλ¬Έμ΄λ‹€. λ˜ν•œ κ·Έ λ°–μ˜ λ‹€λ₯Έ ν΄λž˜μŠ€μ™€ ν˜‘λ ₯ν•  일이 μ—†λŠ” κ²½μš°μ— λ‚΄λΆ€ 클래슀둜 μ„ μ–Έν•΄μ„œ μ‚¬μš©ν•œλ‹€.

μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀, 정적(static) λ‚΄λΆ€ 클래슀, 지역(local) λ‚΄λΆ€ ν΄λž˜μŠ€κ°€ μžˆλŠ”λ°, 이것은 클래슀 내뢀에 μ„ μ–Έν•˜λŠ” λ³€μˆ˜μ˜ μœ ν˜•(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, 정적 λ³€μˆ˜, 지역 λ³€μˆ˜)κ³Ό μœ μ‚¬ν•˜λ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ 클래슀 이름 없이 μ„ μ–Έν•˜κ³  λ°”λ‘œ μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” 읡λͺ…(anonymous) λ‚΄λΆ€ ν΄λž˜μŠ€κ°€ μžˆλ‹€.

​

​

​

*μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀

μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œμ™€ 같은 μœ„μΉ˜μ— μ„ μ–Έν•˜λ©°, μ™ΈλΆ€ 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 객체λ₯Ό μ„ μ–Έν•  λ•Œ μ“΄λ‹€. μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀 생성 ν›„ μƒμ„±λœλ‹€. λ”°λΌμ„œ μ™ΈλΆ€ 클래슀λ₯Ό λ¨Όμ € μƒμ„±ν•˜μ§€ μ•Šκ³  μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀λ₯Ό μ‚¬μš©ν•  μˆ˜λŠ” μ—†λ‹€. (정적 λ‚΄λΆ€ ν΄λž˜μŠ€μ™€ λ‹€λ₯Έ 점)

​

​

InnerTest.java

package innerclass;

class OutClass {                  // μ™ΈλΆ€ 클래슀
	private int num = 10;         // μ™ΈλΆ€ 클래슀 private λ³€μˆ˜
	private static int sNum = 20; // μ™ΈλΆ€ 클래슀 정적 λ³€μˆ˜

    private InClass inClass;      // λ‚΄λΆ€ 클래슀 μžλ£Œν˜• λ³€μˆ˜λ₯Ό λ¨Όμ € μ„ μ–Έ

	public OutClass() {           // μ™ΈλΆ€ 클래슀 λ””ν΄νŠΈ μƒμ„±μž. μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ μƒμ„±λœ 후에 λ‚΄λΆ€ 클래슀 생성 κ°€λŠ₯
        inClass = new InClass();
    }
  
	class InClass {               // μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀
        int inNum = 100;          // λ‚΄λΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
        // static int sInNum = 200; ← μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€μ— 정적 λ³€μˆ˜ μ„ μ–Έ λΆˆκ°€λŠ₯
	
        void inTest() {
			System.out.println("OutClass sNum = " + sNum + "(μ™ΈλΆ€ 클래슀의 정적 λ³€μˆ˜ μ‚¬μš©)");
			System.out.println("InStaticClass sInNum = " + sInNum + "(λ‚΄λΆ€ 클래슀의 정적 λ³€μˆ˜ μ‚¬μš©)");
		}
	    // static void sTtest() {} ← μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€μ— 정적 λ©”μ„œλ“œ μ •μ˜ λΆˆκ°€λŠ₯
    }

    public void usingClass() {
        inClass.inTest();
    }
}

public class InnerTest {
	public static void main(String[] args) {
		OutClass outClass = new OutClass();
		System.out.println("μ™ΈλΆ€ 클래슀 μ΄μš©ν•˜μ—¬ λ‚΄λΆ€ 클래슀 κΈ°λŠ₯ 호좜");
        outClass.usingClass(); // λ‚΄λΆ€ 클래슀 κΈ°λŠ₯ 호좜
	}
}

<μ‹€ν–‰ κ²°κ³Ό>

-μ™ΈλΆ€ 클래슀λ₯Ό λ¨Όμ € 생성해야 λ‚΄λΆ€ 클래슀λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

​

​

​

*μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜μ™€ λ©”μ„œλ“œ

Class λ³€μˆ˜λ‚˜ Class λ©”μ„œλ“œλŠ” μ‚¬μš© λΆˆκ°€!

클래슀의 생성과 상관없이 μ‚¬μš©ν•  수 μžˆλŠ” 정적 λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έν•  수 μ—†λ‹€.

λ§ˆμ°¬κ°€μ§€ 이유둜 정적 λ©”μ„œλ“œλ„ μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ„ μ–Έν•  수 μ—†λ‹€.

μ •λ¦¬ν•˜μžλ©΄, μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ λ¨Όμ € μƒμ„±λ˜μ–΄μ•Ό μ‚¬μš©ν•  수 μžˆλ‹€. 그리고 μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀의 λ©”μ„œλ“œλŠ” μ™ΈλΆ€ 클래슀의 λ©”μ„œλ“œκ°€ 호좜될 λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.

​

 

β˜… μ–΄λ–€ 클래슀의 λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•  λͺ©μ μ΄λΌλ©΄ λ‚΄λΆ€ 클래슀λ₯Ό private으둜 μ„ μ–Έν•œλ‹€.

​

​

​

*정적 λ‚΄λΆ€ 클래슀

μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ ν΄λž˜μŠ€κ°€ λ¨Όμ € μƒμ„±λ˜μ–΄μ•Ό 생성할 수 있기 λ•Œλ¬Έμ— 정적 λ³€μˆ˜λ‚˜ 정적 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€κ³  ν–ˆλ‹€. 그런데 λ‚΄λΆ€ ν΄λž˜μŠ€κ°€ μ™ΈλΆ€ 클래슀 생성과 λ¬΄κ΄€ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•˜κ³  정적 λ³€μˆ˜λ„ μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€λ©΄ 정적 λ‚΄λΆ€ 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. 정적 λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀처럼 μ™ΈλΆ€ 클래슀의 멀버 λ³€μˆ˜μ™€ 같은 μœ„μΉ˜μ— μ •μ˜ν•˜λ©° static μ˜ˆμ•½μ–΄λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•œλ‹€.

package innerclass;

class OutClass {
	private int num = 10;
	private static int sNum = 20;

	static class inStaticClass {     // 정적 λ‚΄λΆ€ 클래슀
		int inNum = 100;             // 정적 λ‚΄λΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
		static int sInNum = 200;     // 정적 λ‚΄λΆ€ 클래슀의 정적 λ³€μˆ˜
  
		void inTest() {  // 정적 λ‚΄λΆ€ 클래슀의 일반 λ©”μ„œλ“œ
			// num += 10;  ← μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μ‚¬μš©ν•  수 μ—†μŒ
			System.out.println("InStaticClass inNum = " + inNum + "(λ‚΄λΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ‚¬μš©)");
			System.out.println("InStaticClass sInNum = " + sInNum + "(λ‚΄λΆ€ 클래슀의 정적 λ³€μˆ˜ μ‚¬μš©)");
			System.out.println("OutClass sNum = " + sNum + "(μ™ΈλΆ€ 클래슀의 정적 λ³€μˆ˜ μ‚¬μš©)");
		}

		static void sTest() {  // 정적 λ‚΄λΆ€ 클래슀의 정적 λ©”μ„œλ“œ
			// num += 10;
			// inNum += 10;  ← μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ λ‚΄λΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” μ‚¬μš©ν•  수 μ—†μŒ
			System.out.println("OutClass sNum = " + sNum + "(μ™ΈλΆ€ 클래슀의 정적 λ³€μˆ˜ μ‚¬μš©)");
			System.out.println("InStaticClass sInNum = " + sInNum + "(λ‚΄λΆ€ 클래슀의 정적 λ³€μˆ˜ μ‚¬μš©)");
		}
	}
}

public class InnerTest {
	public static void main(String[] args) {
		OutClass.inStaticClass sInClass = new OutClass.inStaticClass();  // μ™ΈλΆ€ 클래슀λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  λ°”λ‘œ 정적 λ‚΄λΆ€ 클래슀 생성 κ°€λŠ₯
		System.out.println("정적 λ‚΄λΆ€ 클래슀 일반 λ©”μ„œλ“œ 호좜");
		sInClass.inTest();

		System.out.println();
		System.out.println("정적 λ‚΄λΆ€ 클래슀의 정적 λ©”μ„œλ“œ 호좜");
		OutClass.inStaticClass.sTest();
	}
}

<μ‹€ν–‰ κ²°κ³Ό>

 

정적 λ‚΄λΆ€ 클래슀 λ©”μ„œλ“œ

λ³€μˆ˜ μœ ν˜•

μ‚¬μš© κ°€λŠ₯ μ—¬λΆ€

일반 λ©”μ„œλ“œ

void inTest( )

μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(num)

X

μ™ΈλΆ€ 클래슀의 정적 λ³€μˆ˜(sNum)

O

정적 λ‚΄λΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

(inNum)

O

정적 λ‚΄λΆ€ 클래슀의 정적 λ³€μˆ˜(sInNum)

O

정적 λ©”μ„œλ“œ

static void sTest( )

μ™ΈλΆ€ 클래슀 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(num)

X

μ™ΈλΆ€ 클래슀의 정적 λ³€μˆ˜(sNum)

O

정적 λ‚΄λΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

(inNum)

X

정적 λ‚΄λΆ€ 클래슀의 정적 λ³€μˆ˜(sInNum)

O

-μ˜ˆμ œμ™€ ν‘œμ—μ„œ μ•Œμˆ˜μžˆλ“―μ΄ 정적 λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œκ°€ 정적 λ©”μ„œλ“œμΈ κ²½μš°μ—λŠ” μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ 정적 λ‚΄λΆ€ ν΄λž˜μŠ€μ— μ„ μ–Έλœ λ³€μˆ˜ 쀑 정적 λ³€μˆ˜λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.

​

​

​

*λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ 정적 λ‚΄λΆ€ 클래슀 μ‚¬μš©ν•˜κΈ°

정적 λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” μ™ΈλΆ€ 클래슀λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ λ‚΄λΆ€ 클래슀 μžλ£Œν˜•μœΌλ‘œ λ°”λ‘œ μ„ μ–Έν•˜μ—¬ 생성할 수 μžˆλ‹€.

또 정적 λ‚΄λΆ€ ν΄λž˜μŠ€μ— μ„ μ–Έν•œ λ©”μ„œλ“œ(정적 λ©”μ„œλ“œ 포함)λ‚˜ λ³€μˆ˜λŠ” private이 μ•„λ‹Œ κ²½μš°μ— λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œλ„ λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

λ”°λΌμ„œ λ‚΄λΆ€ 클래슀λ₯Ό λ§Œλ“€κ³  μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ λ¬΄κ΄€ν•˜κ²Œ λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œλ„ μ‚¬μš©ν•˜λ €λ©΄ 정적 λ‚΄λΆ€ 클래슀둜 μƒμ„±ν•˜λ©΄ λœλ‹€. ν•˜μ§€λ§Œ 정적 λ‚΄λΆ€ 클래슀λ₯Ό private으둜 μ„ μ–Έν–ˆλ‹€λ©΄ 이것 μ—­μ‹œ λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  수 μ—†λ‹€.

​

​

​

*지역 λ‚΄λΆ€ 클래슀

지역 λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” 지역 λ³€μˆ˜μ²˜λŸΌ λ©”μ„œλ“œ 내뢀에 클래슀λ₯Ό μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것을 λ§ν•œλ‹€. λ”°λΌμ„œ 이 ν΄λž˜μŠ€λŠ” λ©”μ„œλ“œ μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.

​

​

LocalInnerTest.java

package innerclass;

class Outer {
	int outNum = 100;
	static int sNum = 200;

	Runnable getRunnable(int i) {
		int num = 100;                          // 지역 λ³€μˆ˜

		class MyRunnable implements Runnable {  // 지역 λ‚΄λΆ€ 클래슀
			int localNum = 10;                  // 지역 λ‚΄λΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

			@Override
			public void run() {
				// num = 200;
				// i = 100;
				System.out.println("i = " + i);
				System.out.println("num = " + num);
				System.out.println("localNum = " + localNum);
				System.out.println("outNum = " + outNum + "(μ™ΈλΆ€ 클래슀 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜)");
				System.out.println("Outer.sNum = " + Outer.sNum + "(μ™ΈλΆ€ 클래슀 정적 λ³€μˆ˜)");
			}
		}
		return new MyRunnable();
	}
}

public class LocalInnerTest {
	public static void main(String[] args) {
		Outer out = new Outer();
		Runnable runner = out.getRunnable(10);  // λ©”μ„œλ“œ 호좜
		runner.run();
	}
}

<μ‹€ν–‰ κ²°κ³Ό>

-지역 λ‚΄λΆ€ 클래슀 MyRunnable을 μ„ μ–Έν–ˆμ§€λ§Œ, 이 클래슀 이름을 μ‚¬μš©ν•˜λŠ” 곳은 맨 λ§ˆμ§€λ§‰μ— 클래슀λ₯Ό μƒμ„±ν•˜μ—¬ λ°˜ν™˜ν•  λ•Œ 뿐이닀. κ·Έλž˜μ„œ λ‹€μŒ 예제처럼 이름을 μƒλž΅ν•œ Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ°”λ‘œ μƒμ„±ν•΄μ„œ λ°˜ν™˜ν•˜λŠ” 읡λͺ… 클래슀 ν˜•μ‹μœΌλ‘œ μƒˆλ‘­κ²Œ μ„ μ–Έν•œλ‹€.

​

​

​

*지역 λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ 지역 λ³€μˆ˜μ˜ μœ νš¨μ„±

지역 λ³€μˆ˜λŠ” λ©”μ„œλ“œκ°€ 호좜될 λ•Œ μŠ€νƒ λ©”λͺ¨λ¦¬μ— μƒμ„±λ˜κ³  λ©”μ„œλ“œμ˜ μˆ˜ν–‰μ΄ λλ‚˜λ©΄ λ©”λͺ¨λ¦¬μ—μ„œ 사라진닀.

run( ) λ©”μ„œλ“œλŠ” getRunnable( ) λ©”μ„œλ“œμ˜ 지역 λ³€μˆ˜ i와 num을 μ‚¬μš©ν•œλ‹€. 그런데 지역 λ‚΄λΆ€ 클래슀λ₯Ό 가지고 μžˆλŠ” getRunnable( ) λ©”μ„œλ“œ 호좜이 λλ‚œ 후에도 run( ) λ©”μ„œλ“œκ°€ μ •μƒμ μœΌλ‘œ ν˜ΈμΆœλœλ‹€. μ΄λŠ” getRunnable( ) λ©”μ„œλ“œ 호좜이 λλ‚˜κ³  μŠ€νƒ λ©”λͺ¨λ¦¬μ—μ„œ μ§€μ›Œμ§„ λ³€μˆ˜λ₯Ό 이후에 또 μ°Έμ‘°ν•  수 μžˆλ‹€λŠ” 것이닀. μ •λ¦¬ν•˜λ©΄, 지역 λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œμ˜ 지역 λ³€μˆ˜λŠ” λͺ¨λ‘ μƒμˆ˜λ‘œ 바뀐닀.

​

​

​

*읡λͺ… λ‚΄λΆ€ 클래슀

클래슀 이름을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 클래슀. 끝에 }; 을 μ“΄λ‹€.

package innerclass;

class Outer2 {
	Runnable getRunnable(int i) {
		int num = 100;

		return new Runnable() {          // 읡λͺ… λ‚΄λΆ€ 클래슀. Runnable μΈν„°νŽ˜μ΄μŠ€ 생성
			@Override
			public void run() {
				// num = 200;
				// i = 10;
				System.out.println(i);
				System.out.println(num);
			}
		};
	}

	Runnable runner = new Runnable() {   // 읡λͺ… λ‚΄λΆ€ 클래슀λ₯Ό λ³€μˆ˜μ— λŒ€μž…
		@Override
		public void run() {
			System.out.println("Runnable이 κ΅¬ν˜„λœ 읡λͺ… 클래슀 λ³€μˆ˜");
		}
	};
}

public class AnonymousInnerTest {
	public static void main(String[] args) {
		Outer2 out = new Outer2();
		Runnable runnerble = out.getRunnable(10);
		runnerble.run();
		out.runner.run();
	}
}

-읡λͺ… λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” 단 ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€ λ˜λŠ” 단 ν•˜λ‚˜μ˜ 좔상 클래슀λ₯Ό λ°”λ‘œ 생성할 수 μžˆλ‹€. 그런데 Runnable μΈν„°νŽ˜μ΄μŠ€λ₯Ό 생성할 수 있으렀면 μΈν„°νŽ˜μ΄μŠ€ λͺΈμ²΄κ°€ ν•„μš”ν•˜λ‹€.

-μ •λ¦¬ν•˜λ©΄ 읡λͺ… λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” λ³€μˆ˜μ— 직접 λŒ€μž…ν•˜λŠ” κ²½μš°λ„ 있고 λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 클래슀둜 κ΅¬ν˜„ν•˜λŠ” κ²½μš°λ„ μžˆλ‹€. μ΄λ•Œ μ‚¬μš©ν•˜λŠ” 지역 λ³€μˆ˜λŠ” μƒμˆ˜ν™”λ˜λ―€λ‘œ λ©”μ„œλ“œ 호좜이 λλ‚œ 후에도 μ‚¬μš©ν•  수 μžˆλ‹€.

​

​

​

*λ‚΄λΆ€ 클래슀 λ‚΄μš©

μ’…λ₯˜

κ΅¬ν˜„ μœ„μΉ˜

μ‚¬μš©ν•  수 μžˆλŠ”

μ™ΈλΆ€ 클래슀 λ³€μˆ˜

생성 방법

μΈμŠ€ν„΄μŠ€ λ‚΄λΆ€ 클래슀

μ™ΈλΆ€ 클래슀 멀버 λ³€μˆ˜μ™€ 동일

μ™ΈλΆ€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

μ™ΈλΆ€ μ „μ—­ λ³€μˆ˜

μ™ΈλΆ€ 클래슀λ₯Ό λ¨Όμ € λ§Œλ“  ν›„ λ‚΄λΆ€ 클래슀 생성

정적 λ‚΄λΆ€ 클래슀

μ™ΈλΆ€ 클래슀 멀버 λ³€μˆ˜μ™€ 동일

μ™ΈλΆ€ μ „μ—­ λ³€μˆ˜

μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ λ¬΄κ΄€ν•˜κ²Œ 생성

지역 λ‚΄λΆ€ 클래슀

λ©”μ„œλ“œ 내뢀에 κ΅¬ν˜„

μ™ΈλΆ€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

μ™ΈλΆ€ μ „μ—­ λ³€μˆ˜

λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ 생성

읡λͺ… λ‚΄λΆ€ 클래슀

λ©”μ„œλ“œ 내뢀에 κ΅¬ν˜„

λ³€μˆ˜μ— λŒ€μž…ν•˜μ—¬ 직접 κ΅¬ν˜„

μ™ΈλΆ€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

μ™ΈλΆ€ μ „μ—­ λ³€μˆ˜

λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μƒμ„±λ˜κ±°λ‚˜, μΈν„°νŽ˜μ΄μŠ€ νƒ€μž… λ³€μˆ˜μ— λŒ€μž…ν•  λ•Œ new μ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 생성

​

λ°˜μ‘ν˜•

λŒ“κΈ€