πŸ“œ MENTOR JAVA

Section#13 _ λ‚΄λΆ€ 클래슀

Joyfullyever 2025. 1. 20. 19:43

#1 λ‚΄λΆ€ ν΄λž˜μŠ€λž€?

: 클래슀 μ•ˆμ— λ§Œλ“€μ–΄μ§„ 또 λ‹€λ₯Έ 클래슀 == 쀑첩 클래슀

: 두 클래슀 멀버듀 간에 μ†μ‰½κ²Œ μ ‘κ·Ό κ°€λŠ₯

: λΆˆν•„μš”ν•œ 클래슀λ₯Ό 감좰 μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ 쀄일 수 있음

 

#2 λ‚΄λΆ€ 클래슀의 μ’…λ₯˜

: μ„ μ–Έλœ μœ„μΉ˜μ— 따라 κ΅¬λΆ„ν•˜λ©°, μΈμŠ€ν„΄μŠ€, 정적, μ§€μ—­, 읡λͺ… 클래슀둜 ꡬ뢄

λ©”μ„œλ“œ μ„€λͺ…
μΈμŠ€ν„΄μŠ€ μ™ΈλΆ€ 클래슀의 멀버 λ³€μˆ˜μ™€ 같은 μœ„μΉ˜μ— μ„ μ–Έ → μ™ΈλΆ€ 클래슀의 멀버 λ³€μˆ˜μ™€ κ΄€λ ¨λœ 직업에 μ‚¬μš©λ  λͺ©μ μœΌλ‘œ μ„ μ–Έ
정적 μ™ΈλΆ€ 클래슀의 클래슀 λ³€μˆ˜μ™€ 같이 static ν‚€μ›Œλ“œ λΆ€μ—¬
μ§€μ—­ μ™ΈλΆ€ 클래슀 λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œ μ„ μ–Έν•˜μ—¬ μ‚¬μš© → λ©”μ„œλ“œ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯

 

#2-1 μΈμŠ€ν„΄μŠ€ 클래슀

: μΈμŠ€ν„΄μˆ˜ λ³€μˆ˜μ™€ 같은 μœ„μΉ˜μ— μ„ μ–Έ, μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ©€λ²„μ²˜λŸΌ 닀루어짐

: 주둜 μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ 멀버듀과 κ΄€λ ¨λœ μž‘μ—…μ— μ‚¬μš©λ  λͺ©μ μœΌλ‘œ μ„ μ–Έ

: μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, 정적 λ³€μˆ˜λ‚˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 건 λΆˆκ°€λŠ₯

: μΈμŠ€ν„΄μŠ€ 클래슀 생성

class Outer{
	private String name;
...
	class Inner{
	private String name;
	}
}

: μΈμŠ€ν„΄μŠ€ 클래슀 μ„ μ–Έ → μ™ΈλΆ€ 객체가 μƒμ„±λœ μƒνƒœμ—μ„œ 객체 생성을 ν•  수 있음

Outer outer = new Outer();
Outer.Inner in = outer.new Inner();

#2-2 정적 λ‚΄λΆ€ 클래슀 (static class)

: static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ 클래슀λ₯Ό μ„ μ–Έν•œ ν›„ 정적 λ‚΄λΆ€ 클래슀 생성

: μ™ΈλΆ€ 클래슀의 static λ©”μ„œλ“œμ—μ„œ μ‚¬μš©λ  λͺ©μ μœΌλ‘œ μ„ μ–Έ

: ν΄λž˜μŠ€μ— μ†ν•˜μ§€λ§Œ λ…λ¦½μ μœΌλ‘œ 쑴재

: μ™ΈλΆ€ 클래슀의 μ‘΄μž¬μ™€ 상관없이 정적 λ³€μˆ˜ μ‚¬μš© κ°€λŠ₯ → μ™ΈλΆ€ 클래슀의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ or λ©”μ„œλ“œλ₯Ό  μ •적 λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš© λΆˆκ°€

: 정적 λ‚΄λΆ€ 클래슀 생성 → μΈμŠ€ν„΄μŠ€ 멀버와 λ™μΌν•œ μœ„μΉ˜

class Outer{
	private String name;
...
	static class Inner{
	private String name;
	}
}

: 정적 λ‚΄λΆ€ 클래슀 μ„ μ–Έ → μ™ΈλΆ€ 클래슀 객체λ₯Ό μ„ μ–Έν•˜μ§€ μ•Šμ•„λ„ μ„ μ–Έ κ°€λŠ₯

Outer.Inner in = new Outer.Inner();

#2-3 μ§€μ—­ 클래슀 (local class)

: μ™ΈλΆ€ 클래슀의 λ©”μ„œλ“œ λ‚΄μ—μ„œ μ„ μ–Έλ˜μ–΄ μ‚¬μš© → λ©”μ„œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯, λ©”μ„œλ“œμ˜ 싀행이 λλ‚˜λ©΄ ν•΄λ‹Ή ν΄λž˜μŠ€λ„ μ‚¬μš© μ’…λ£Œ

: μ ‘κ·Ό μ œν•œμžμ™€ static을 뢙일 수 μ—†μŒ

: μ§€μ—­ 클래슀 생성

class LocalClass{
	...
	void print(){
		...
		class A{
			...
		}
		A a = new A();
	}
}

#3 λ‚΄λΆ€ 클래슀의 μ ‘κ·Ό μ œν•œ

#3-1 μ ‘κ·Ό μ œν•œμž

: μ ‘κ·Ό μ œν•œμžλ₯Ό 톡해 μ™ΈλΆ€μ—μ„œμ˜ μ ‘κ·Ό μ œν•œ κ°€λŠ₯

: μΈμŠ€ν„΄μŠ€ 클래슀λ₯Ό private으둜 μ„ μ–Έ → getter & setterλ₯Ό 톡해 클래슀λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ œν•œ

#3-2 μ§€μ—­ 클래슀의 μ ‘κ·Ό μ œν•œ

: λ©”μ„œλ“œ λ‚΄μ—μ„œ μ„ μ–Έλ˜μ–΄ μ‚¬μš©

: μ§€μ—­ ν΄λž˜μŠ€μ—μ„œ λ©”μ„œλ“œ λ‚΄μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λ³€μˆ˜λ₯Ό 볡사해 μ‚¬μš© → ν•΄λ‹Ή λ³€μˆ˜κ°€ λ³€κ²½λ˜λ©΄ 였λ₯˜ λ°œμƒ

 

#4 읡λͺ… 클래슀

: 이름이 μ—†λŠ” 클래슀 → 클래슀 μ„ μ–Έκ³Ό 객체의 생성을 λ™μ‹œμ— 함 → 단 ν•œλ²ˆλ§Œ μ‚¬μš© κ°€λŠ₯ → ν•˜λ‚˜μ˜ 객체만 생성할 수 μžˆλŠ” 일회용

: μƒμ„±μž μ„ μ–Έ λΆˆκ°€λŠ₯, λ‘˜ μ΄μƒμ˜ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ λΆˆκ°€λŠ₯

: 단 ν•˜λ‚˜μ˜ 클래슀 상속 or ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

: μΈν„°νŽ˜μ΄μŠ€μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œ μ‚¬μš© → μΈν„°νŽ˜μ΄μŠ€λ₯Ό 읡λͺ… 클래슀둜 μ„ μ–Έν•˜μ—¬ κΈ°λŠ₯을 직접 κ΅¬ν˜„

: 좔상 클래슀 or μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속을 톡해 κ΅¬ν˜„ν•˜μ§€ μ•Šκ³  직접 κ΅¬ν˜„ν•  λ•Œ 주둜 μ‚¬μš©

→ 좔상 클래슀 or μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„λ˜μ§€ μ•Šμ€ 좔상 λ©”μ„œλ“œκ°€ 있기 λ•Œλ¬Έμ— 객체 μ„ μ–Έ λΆˆκ°€λŠ₯

: 읡λͺ… 클래슀 μ„ μ–Έ ν˜•μ‹μ„ μ΄μš©ν•˜μ—¬ 상속 없이 κ΅¬ν˜„

: 읡λͺ… 클래슀 μ„ μ–Έ → 클래슀 μƒμ„±μž 뒀에 μ½”λ“œ 블둝 μΆ”κ°€ → ν•΄λ‹Ή ν΄λž˜μŠ€κ°€ κ°€μ§„ λ©”μ„œλ“œλ“€μ„ Override ν•˜μ—¬ κ΅¬ν˜„

// 객체 생성
Person p = new Person();
	@Override
	void method(){
	}
	...
};

→ 클래슀 자체λ₯Ό μž¬μ •μ˜ν•˜μ—¬ κ΅¬ν˜„ : κ΅¬ν˜„λœ 문법 λ§ˆμ§€λ§‰μ— μ„Έλ―Έμ½œλ‘ (;)