Search

쀑첩 클래슀

쀑첩 클래슀

클래슀 내뢀에 μ„ μ–Έν•˜λŠ” 클래슀
μ½”λ“œμ˜ 논리적 그룹화와 μΊ‘μŠν™”λ₯Ό κ°•ν™”ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

쀑첩 클래슀의 νŠΉμ§•

β€’
클래슀 내뢀에 μ„ μ–Έν•œ ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
β€’
νŠΉμ • ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” 클래슀λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
β€’
λ°”κΉ₯ 클래슀(Outer Class)와 λ‚΄λΆ€ 클래슀(Inner Class)둜 κ΅¬μ„±λ©λ‹ˆλ‹€.
β€’
각각 Outer/Inner 클래슀의 멀버에 μ‰½κ²Œ μ ‘κ·Ό κ°€λŠ₯ν•©λ‹ˆλ‹€.

쀑첩 클래슀의 λΆ„λ₯˜

β€’
멀버 클래슀
β—¦
μΈμŠ€ν„΄μŠ€ μ΄λ„ˆ 클래슀
β—¦
static μ΄λ„ˆ 클래슀
β€’
둜컬 클래슀
β—¦
λ©”μ†Œλ“œ μ΄λ„ˆ 클래슀
β—¦
읡λͺ… μ΄λ„ˆ 클래슀

1. 멀버 클래슀

멀버 ν΄λž˜μŠ€λŠ” 클래슀의 λ©€λ²„λ‘œ μ„ μ–Έλœ 클래슀둜, λ°”κΉ₯ 클래슀의 멀버 ν•„λ“œμ™€ 같은 μœ„μΉ˜μ— μ„ μ–Έλ©λ‹ˆλ‹€.

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

μΈμŠ€ν„΄μŠ€ μ΄λ„ˆ ν΄λž˜μŠ€λŠ” λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€μ— 쒅속적인 ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
β€’
λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ–΄μ•Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
β€’
λ°”κΉ₯ 클래슀의 λͺ¨λ“  멀버(private 포함)에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
β€’
static 멀버λ₯Ό μ„ μ–Έν•  수 μ—†μŠ΅λ‹ˆλ‹€(JDK 16λΆ€ν„°λŠ” κ°€λŠ₯).
class Outer { private int outerField = 10; class Inner { void method() { // λ°”κΉ₯ 클래슀의 private ν•„λ“œμ— μ ‘κ·Ό κ°€λŠ₯ System.out.println(outerField); } } } // μ‚¬μš© μ˜ˆμ‹œ Outer outer = new Outer(); Outer.Inner inner = outer.new Inner();
Java
볡사

static μ΄λ„ˆ 클래슀

static μ΄λ„ˆ ν΄λž˜μŠ€λŠ” λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€μ™€ λ…λ¦½μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 정적 멀버 ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
β€’
λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€ 없이도 μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
β€’
λ°”κΉ₯ 클래슀의 static λ©€λ²„λ§Œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
β€’
static 멀버λ₯Ό μ„ μ–Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.
class Outer { private static int staticOuterField = 20; private int instanceField = 10; static class StaticInner { void method() { // λ°”κΉ₯ 클래슀의 static λ©€λ²„μ—λ§Œ μ ‘κ·Ό κ°€λŠ₯ System.out.println(staticOuterField); // System.out.println(instanceField); // 였λ₯˜ λ°œμƒ } } } // μ‚¬μš© μ˜ˆμ‹œ Outer.StaticInner staticInner = new Outer.StaticInner();
Java
볡사

쀑첩 클래슀 객체 생성

2. 둜컬 클래슀

둜컬 ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œ λ‚΄λΆ€λ‚˜ νŠΉμ • 블둝 μ•ˆμ—μ„œ μ„ μ–Έλ˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
β€’
λ©”μ†Œλ“œ μ΄λ„ˆ 클래슀
β€’
읡λͺ… μ΄λ„ˆ 클래슀

λ©”μ†Œλ“œ μ΄λ„ˆ 클래슀

λ©”μ†Œλ“œ μ΄λ„ˆ ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ„ μ–Έλ˜κ³  μ‚¬μš©λ˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
β€’
λ©”μ†Œλ“œκ°€ 싀행될 λ•Œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
β€’
λ©”μ†Œλ“œμ˜ 지역 λ³€μˆ˜λ‚˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμœΌλ‚˜, 이듀은 final λ˜λŠ” effectively final이어야 ν•©λ‹ˆλ‹€.
β€’
λ©”μ†Œλ“œ μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.
class Outer { void method(final int param) { final int localVar = 30; class LocalInner { void innerMethod() { // λ©”μ†Œλ“œμ˜ λ§€κ°œλ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜ μ‚¬μš© κ°€λŠ₯ System.out.println(param); System.out.println(localVar); } } // λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ LocalInner local = new LocalInner(); local.innerMethod(); } }
Java
볡사

읡λͺ… μ΄λ„ˆ 클래슀

읡λͺ… μ΄λ„ˆ ν΄λž˜μŠ€λŠ” 이름이 μ—†λŠ” 둜컬 클래슀둜, μ„ μ–Έκ³Ό λ™μ‹œμ— μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
β€’
μΌνšŒμ„±μœΌλ‘œ μ‚¬μš©λ˜λŠ” 클래슀λ₯Ό κ°„νŽΈν•˜κ²Œ κ΅¬ν˜„ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
β€’
μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 클래슀λ₯Ό μ¦‰μ„μ—μ„œ κ΅¬ν˜„ν•  λ•Œ 주둜 μ‚¬μš©ν•©λ‹ˆλ‹€.
β€’
μƒμ„±μžλ₯Ό μ„ μ–Έν•  수 μ—†μŠ΅λ‹ˆλ‹€.
interface Clickable { void onClick(); } class Button { void setClickListener(Clickable clickable) { // 클릭 이벀트 처리 둜직 } } class Example { void example() { Button button = new Button(); // 읡λͺ… μ΄λ„ˆ 클래슀둜 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ button.setClickListener(new Clickable() { @Override public void onClick() { System.out.println("λ²„νŠΌμ΄ ν΄λ¦­λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); } }); } }
Java
볡사

쀑첩 클래슀 μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­

β€’
쀑첩 ν΄λž˜μŠ€λŠ” μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ κ³ λ €ν•˜μ—¬ 적절히 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
β€’
κ³Όλ„ν•œ 쀑첩은 μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ μ¦κ°€μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
β€’
λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 방지λ₯Ό μœ„ν•΄ λ‚΄λΆ€ ν΄λž˜μŠ€κ°€ μ™ΈλΆ€ 클래슀의 μ°Έμ‘°λ₯Ό λΆˆν•„μš”ν•˜κ²Œ 였래 μœ μ§€ν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
β€’
Java 8 μ΄ν›„μ—λŠ” λžŒλ‹€ ν‘œν˜„μ‹μ΄ 읡λͺ… 클래슀λ₯Ό λŒ€μ²΄ν•  수 μžˆλŠ” κ²½μš°κ°€ λ§ŽμœΌλ―€λ‘œ, 적절히 μ„ νƒν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.