[JAVA] 쀑첩 ν΄λž˜μŠ€μ™€ 쀑첩 μΈν„°νŽ˜μ΄μŠ€

2021. 4. 10. 16:37Β·πŸ“ Language/✏ JAVA

쀑첩 ν΄λž˜μŠ€μ™€ μ€‘첩 μΈν„°νŽ˜μ΄μŠ€

ν΄λž˜μŠ€λ“€μ€ μ„œλ‘œ κΈ΄λ°€ν•œ 관계λ₯Ό λ§Ίκ³  μƒν˜Έμž‘μš©μ„ ν•œλ‹€.

ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ ν΄λž˜μŠ€μ™€ 관계λ₯Ό λ§ΊλŠ” κ²½μš°μ—λŠ” λ…λ¦½μ μœΌλ‘œ μ„ μ–Έν•˜λŠ” 것이 μ’‹μœΌλ‚˜
νŠΉμ • ν΄λž˜μŠ€μ™€ 관계λ₯Ό 맺을 κ²½μš°μ—λŠ” 클래슀 내뢀에 μ„ μ–Έν•˜λŠ” 것이 μ’‹λ‹€.

 

1. 쀑첩 클래슀

쀑첩 ν΄λž˜μŠ€λž€ 클래슀 내뢀에 μ„ μ–Έν•œ 클래슀λ₯Ό λ§ν•œλ‹€. μ€‘첩 클래슀λ₯Ό μ΄μš©ν•˜λ©΄ 두 클래슀의 멀버듀을 μ„œλ‘œ μ‰½κ²Œ μ ‘κ·Όν•  수 있고 μ™ΈλΆ€μ—λŠ” λΆˆν•„μš”ν•œ 관계 클래슀λ₯Ό 감좀으둜써 μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 μžˆλ‹€.

class ClassNameA {
	// 1. μΈμŠ€ν„΄μŠ€ 멀버 클래슀: A 객체λ₯Ό μƒμ„±ν•΄μ•Όλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” B 클래슀
	class NestedClassNameB {
		// μƒμ„±μž
		// μΈμŠ€ν„΄μŠ€ ν•„λ“œ, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
		// 정적 ν•„λ“œ, 정적 λ©”μ†Œλ“œ (λΆˆκ°€λŠ₯)
	}

	// 2. 정적 멀버 클래슀: A 클래슀둜 λ°”λ‘œ μ ‘κ·Όν•  수 μžˆλŠ” C 클래슀
	static class NestedClassNameC {
		// μƒμ„±μž
		// μΈμŠ€ν„΄μŠ€ ν•„λ“œ, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
		// 정적 ν•„λ“œ, 정적 λ©”μ†Œλ“œ
	}

	void method() {
		// μΈμŠ€ν„΄μŠ€ 멀버 클래슀 μ‚¬μš© μ‹œ: λŒ€λΆ€λΆ„ 클래슀 λ‚΄λΆ€μ—μ„œ μ‚¬μš©
		NestedClassNameB b = new NestedClassNameB();
		b.field = 1;
		b.method();

		// 3. 둜컬 클래슀: μƒμ„±μžλ‚˜ method()κ°€ 싀행될 λ•Œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” D 클래슀
		// 주둜 비동기 처리λ₯Ό μœ„ν•΄ μŠ€λ ˆλ“œ 객체λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©
		// μ ‘κ·Ό μ œν•œμž 및 static (λΆˆκ°€λŠ₯)
		class NestedClassNameD {
			// μƒμ„±μž
			// μΈμŠ€ν„΄μŠ€ ν•„λ“œ, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
			// 정적 ν•„λ“œ, 정적 λ©”μ†Œλ“œ (λΆˆκ°€λŠ₯)
		}

		// 둜컬 클래슀 μ‚¬μš© μ‹œ
		NestedClassNameD d = new NestedClassNameD();
		d.field = 1;
		d.method();
	}
}

// μΈμŠ€ν„΄μŠ€ 멀버 클래슀 μ‚¬μš© μ‹œ: μ™ΈλΆ€
ClassNameA a = new ClassNameA();
ClassNameA.NestedClassNameB b = a.new NestedClassNameB();
b.field = 1;
b.method();

// 정적 멀버 클래슀 μ‚¬μš© μ‹œ
ClassNameA.NestedClassNameC c = new ClassNameA.NestedClassNameC();
c.field = 1;
c.method();
ClassNameA.NestedClassNameC.field = 2;
ClassNameA.NestedClassNameC.method();

 

1) 쀑첩 클래슀의 μ ‘κ·Ό μ œν•œ

  • λ°”κΉ₯ ν•„λ“œμ™€ λ©”μ„œλ“œμ—μ„œ μ‚¬μš© μ œν•œ
    • μΈμŠ€ν„΄μŠ€ 멀버 ν΄λž˜μŠ€λŠ” λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€ ν•„λ“œμ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œ 객체λ₯Ό 생성할 수 μžˆμœΌλ‚˜ 정적 ν•„λ“œμ™€ 정적 λ©”μ„œλ“œμ—μ„œλŠ” 객체λ₯Ό 생성할 수 μ—†λ‹€.
    • 정적 멀버 ν΄λž˜μŠ€λŠ” λ°”κΉ₯ 클래슀의 λͺ¨λ“  ν•„λ“œμ™€ λ©”μ„œλ“œμ—μ„œ 객체λ₯Ό 생성할 수 μžˆλ‹€.
  • 멀버 ν΄λž˜μŠ€μ—μ„œ μ‚¬μš© μ œν•œ
    • μΈμŠ€ν„΄μŠ€ 멀버 ν΄λž˜μŠ€λŠ” λ°”κΉ₯ 클래슀의 λͺ¨λ“  ν•„λ“œμ™€ λ©”μ„œλ“œμ— μ ‘κ·Όν•  수 μžˆλ‹€.
    • 정적 멀버 ν΄λž˜μŠ€λŠ” λ°”κΉ₯ 클래슀의 정적 ν•„λ“œμ™€ 정적 λ©”μ„œλ“œμ—λ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.
  • 둜컬 ν΄λž˜μŠ€μ—μ„œ μ‚¬μš© μ œν•œ
    • final νŠΉμ„±μ„ κ°€μ§„ 맀개 λ³€μˆ˜λ‚˜ 둜컬 λ³€μˆ˜λ§Œ 둜컬 클래슀 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

2. 쀑첩 μΈν„°νŽ˜μ΄μŠ€

쀑첩 μΈν„°νŽ˜μ΄μŠ€λŠ” 클래슀 내뢀에 μ„ μ–Έλœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§ν•œλ‹€. ν•΄λ‹Ή ν΄λž˜μŠ€μ™€ κΈ΄λ°€ν•œ 관계λ₯Ό λ§ΊλŠ” κ΅¬ν˜„ 클래슀λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν•œλ‹€.

class ClassNameA {
	NestedInterfaceName iface;	// μΈν„°νŽ˜μ΄μŠ€ νƒ€μž… ν•„λ“œ: κ΅¬ν˜„ 객체λ₯Ό λŒ€μž…ν•΄ μ‚¬μš©

	// 1. μΈμŠ€ν„΄μŠ€ 멀버 μΈν„°νŽ˜μ΄μŠ€
	interface NestedInterfaceNameB {
	}
	// 2. 정적 멀버 μΈν„°νŽ˜μ΄μŠ€
	static interface NestedInterfaceNameB {
	}
}

 

3. 읡λͺ… 객체

읡λͺ… κ°μ²΄λŠ” 클래슀 이름이 μ—†λŠ” 객체λ₯Ό λ§ν•˜λŠ”λ° μ–΄λ–€ 클래슀λ₯Ό μƒμ†ν•˜κ±°λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ•Όλ§Œ ν•œλ‹€.

// 상속: 이름 μ—†λŠ” μžμ‹ 객체 μ°Έμ‘°
λΆ€λͺ¨ν΄λž˜μŠ€ λ³€μˆ˜ = new λΆ€λͺ¨ν΄λž˜μŠ€() {};

// κ΅¬ν˜„: 이름 μ—†λŠ” κ΅¬ν˜„ 객체 μ°Έμ‘°
μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜ = new μΈν„°νŽ˜μ΄μŠ€() {};

 

1) 읡λͺ… μžμ‹ 객체

  • μžμ‹ ν΄λž˜μŠ€κ°€ μž¬μ‚¬μš©λ˜μ§€ μ•Šκ³  νŠΉμ • μœ„μΉ˜μ—μ„œλ§Œ μ‚¬μš©λ  경우 μ΅λͺ… μžμ‹ 객체λ₯Ό μƒμ„±ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.
  • ν•„λ“œ μ΄ˆκΈ°κ°’, λ©”μ„œλ“œ 둜컬 λ³€μˆ˜, λ©”μ„œλ“œ λ§€κ°œλ³€μˆ˜ λ“± μ—¬λŸ¬ κ³³μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
  • 읡λͺ… μžμ‹ 객체에 μƒˆλ‘­κ²Œ μ •μ˜λœ ν•„λ“œμ™€ λ©”μ„œλ“œλŠ” μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μ—†λ‹€.
λΆ€λͺ¨ν΄λž˜μŠ€ [ν•„λ“œ | λ³€μˆ˜] = new λΆ€λͺ¨ν΄λž˜μŠ€(μƒμ„±μžλ§€κ°œκ°’, ...) {
	// μƒμ„±μž (λΆˆκ°€λŠ₯)
	// ν•„λ“œ
	// λ©”μ†Œλ“œ
	// λΆ€λͺ¨ 클래슀 λ©”μ†Œλ“œ μž¬μ •μ˜
};

 

2) 읡λͺ… κ΅¬ν˜„ 객체

  • κ΅¬ν˜„ ν΄λž˜μŠ€κ°€ μž¬μ‚¬μš©λ˜μ§€ μ•Šκ³  νŠΉμ • μœ„μΉ˜μ—μ„œλ§Œ μ‚¬μš©λ  경우 읡λͺ… κ΅¬ν˜„ 객체λ₯Ό μƒμ„±ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.
  • ν•„λ“œ μ΄ˆκΈ°κ°’, λ©”μ„œλ“œ 둜컬 λ³€μˆ˜, λ©”μ„œλ“œ λ§€κ°œλ³€μˆ˜ λ“± μ—¬λŸ¬ κ³³μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
μΈν„°νŽ˜μ΄μŠ€ [ν•„λ“œ | λ³€μˆ˜] = new μΈν„°νŽ˜μ΄μŠ€() {
	// μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ 좔상 λ©”μ†Œλ“œμ˜ 싀체 λ©”μ†Œλ“œ μ„ μ–Έ
	// ν•„λ“œ
	// λ©”μ†Œλ“œ
};

 

3) 읡λͺ… 객체의 둜컬 λ³€μˆ˜ μ‚¬μš©

  • final νŠΉμ„±μ„ κ°€μ§„ 맀개 λ³€μˆ˜λ‚˜ 둜컬 λ³€μˆ˜λ§Œ 읡λͺ… 객체 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [JAVA] μŠ€λ ˆλ“œ
  • [JAVA] κΈ°λ³Έ API 클래슀
  • [JAVA] 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€
  • [JAVA] 상속
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[JAVA] 쀑첩 ν΄λž˜μŠ€μ™€ 쀑첩 μΈν„°νŽ˜μ΄μŠ€
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”