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

2021. 4. 2. 19:13Β·πŸ“ Language/✏ JAVA

1. 좔상 클래슀

객체λ₯Ό 직접 생성할 수 μžˆλŠ” 클래슀λ₯Ό 싀체 클래슀라 ν•œλ‹€λ©΄ 이 ν΄λž˜μŠ€λ“€μ˜ 곡톡적인 νŠΉμ„±μ„ μΆ”μΆœν•΄μ„œ μ„ μ–Έν•œ 클래슀λ₯Ό 좔상 클래슀라 ν•œλ‹€.

 

좔상 ν΄λž˜μŠ€μ™€ 싀체 ν΄λž˜μŠ€λŠ” μƒμ†μ˜ 관계λ₯Ό κ°€μ§€κ³  μžˆλ‹€. μΆ”상 ν΄λž˜μŠ€κ°€ λΆ€λͺ¨, 싀체 ν΄λž˜μŠ€κ°€ μžμ‹μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄ μ‹€μ²΄ ν΄λž˜μŠ€λŠ” 좔상 클래슀의 λͺ¨λ“  νŠΉμ„±μ„ λ¬Όλ €λ°›κ³  좔가적인 νŠΉμ„±μ„ κ°€μ§ˆ 수 μžˆλ‹€.

  • κ³΅ν†΅λœ ν•„λ“œμ™€ λ©”μ„œλ“œμ˜ 이름을 톡일할 λͺ©μ 
  • 싀체 클래슀λ₯Ό μž‘μ„±ν•  λ•Œ μ‹œκ°„ μ ˆμ•½: 곡톡적인 νŠΉμ„±μ€ 좔상 ν΄λž˜μŠ€μ— μ„ μ–Έν•˜κ³  λ‹€λ₯Έ 점만 싀체 ν΄λž˜μŠ€μ— μ„ μ–Έν•œλ‹€.

 

1) 좔상 클래슀 μ„ μ–Έ

  • new μ—°μ‚°μžλ₯Ό μ΄μš©ν•΄μ„œ 객체λ₯Ό λ§Œλ“€μ§€ λͺ»ν•˜κ³  상속을 톡해 μžμ‹ 클래슀만 λ§Œλ“€ 수 μžˆλ‹€.
  • 일반 ν΄λž˜μŠ€μ™€ λ™μΌν•˜κ²Œ ν•„λ“œ, μƒμ„±μž, λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•  수 μžˆλ‹€.
  • μžμ‹ 객체가 생성될 λ•Œ super()λ₯Ό ν˜ΈμΆœν•΄μ„œ 좔상 클래슀 객체λ₯Ό μƒμ„±ν•œλ‹€.
public abstract class μΆ”μƒν΄λž˜μŠ€ {
	// ν•„λ“œ
	// μƒμ„±μž
	// λ©”μ†Œλ“œ
}

 

2) 좔상 λ©”μ„œλ“œμ™€ μž¬μ •μ˜

λ©”μ„œλ“œμ˜ μ„ μ–Έλ§Œ λ™μΌν•˜κ³  μ‹€ν–‰ λ‚΄μš©μ€ 싀체 ν΄λž˜μŠ€λ§ˆλ‹€ 달라야 ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€. μ΄λŸ° 경우λ₯Ό μœ„ν•΄μ„œ 좔상 ν΄λž˜μŠ€λŠ” 좔상 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•  수 μžˆλ‹€. μΆ”상 λ©”μ„œλ“œλŠ” λ©”μ„œλ“œμ˜ μ„ μ–Έ λΆ€λ§Œ 있고 μ‹€ν–‰ λ‚΄μš©μΈ μ€‘κ΄„ν˜Έκ°€ μ—†λŠ” λ©”μ„œλ“œμ΄λ‹€.

[public | protected] abstract λ¦¬ν„΄νƒ€μž… λ©”μ†Œλ“œμ΄λ¦„(λ§€κ°œλ³€μˆ˜, ...);
  • 좔상 클래슀 섀계 μ‹œ ν•˜μœ„ ν΄λž˜μŠ€κ°€ λ°˜λ“œμ‹œ μ‹€ν–‰ λ‚΄μš©μ„ μ±„μš°λ„λ‘ κ°•μ œν•˜κ³  싢은 λ©”μ„œλ“œκ°€ μžˆμ„ 경우 μ‚¬μš©ν•œλ‹€.
  • μžμ‹ ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ 좔상 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•΄μ„œ μ‹€ν–‰ λ‚΄μš©μ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.
  • 좔상 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ§€ μ•ŠμœΌλ €λ©΄ μžμ‹ ν΄λž˜μŠ€λ„ 좔상 ν΄λž˜μŠ€κ°€ λ˜μ–΄μ•Ό ν•œλ‹€.

 

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

μΈν„°νŽ˜μ΄μŠ€λŠ” κ°μ²΄μ˜ μ‚¬μš© 방법을 μ •μ˜ν•œ νƒ€μž…μœΌλ‘œ λ‹€μ–‘ν•œ 객체λ₯Ό λ™μΌν•œ μ‚¬μš© λ°©λ²•μœΌλ‘œ μ΄μš©ν•  수 μžˆλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€λŠ” κ°œλ°œ μ½”λ“œμ™€ 객체가 μ„œλ‘œ ν†΅μ‹ ν•˜λŠ” 접점 역할을 ν•œλ‹€. κ°œλ°œ μ½”λ“œκ°€ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€λŠ” 객체의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœμ‹œν‚¨λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 개발 μ½”λ“œλŠ” 객체의 λ‚΄λΆ€ ꡬ쑰λ₯Ό μ•Œ ν•„μš”κ°€ μ—†κ³  μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œλ§Œ μ•Œκ³  있으면 λœλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€ λ™μž‘ 방식

 

μ—¬κΈ°μ„œ 잠깐 개발 μ½”λ“œκ°€ 직접 객체의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ κ°„λ‹¨ν•œλ° μ™œ 쀑간에 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‘˜κΉŒ?

 

개발 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜λŠ” 객체λ₯Ό λ³€κ²½ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. μΈν„°νŽ˜μ΄μŠ€λŠ” μ—¬λŸ¬ κ°μ²΄μ—μ„œ μ‚¬μš©ν•˜λ―€λ‘œ 객체에 따라 μ‹€ν–‰ λ‚΄μš©κ³Ό 리턴 값이 달라진닀. λ”°λΌμ„œ 개발 μ½”λ“œ μΈ‘λ©΄μ—μ„œλŠ” μ½”λ“œ λ³€κ²½ 없이 μ‹€ν–‰ λ‚΄μš©κ³Ό 리턴 값을 λ‹€μ–‘ν™”ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

 

1) μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ

  • 객체 μ‚¬μš© 방법을 μ •μ˜ν•œ κ²ƒμ΄λ―€λ‘œ μ‹€ν–‰ μ‹œ 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” μΈμŠ€ν„΄μŠ€ λ˜λŠ” 정적 ν•„λ“œλ₯Ό μ„ μ–Έν•  수 μ—†λ‹€.
  • 객체둜 생성할 수 μ—†κΈ° λ•Œλ¬Έμ— μƒμ„±μžλ₯Ό κ°€μ§ˆ 수 μ—†λ‹€.
  • μƒμˆ˜ ν•„λ“œμ™€ 좔상 λ©”μ„œλ“œλ§Œμ„ ꡬ성 λ©€λ²„λ‘œ κ°€μ§„λ‹€.
    • μƒμˆ˜ ν•„λ“œ
      • λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€μ˜ ν•„λ“œλŠ” public static final νŠΉμ„±μ„ κ°–κ³  μƒλž΅ν•˜λ”λΌλ„ 컴파일 κ³Όμ •μ—μ„œ μžλ™μœΌλ‘œ λΆ™κ²Œ λœλ‹€.
      • μΈν„°νŽ˜μ΄μŠ€ μƒμˆ˜λŠ” μ‹€ν–‰ μ‹œ 값을 λ°”κΏ€ 수 μ—†κ³  μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°κ°’μ„ λ°˜λ“œμ‹œ μ§€μ •ν•΄μ•Ό ν•œλ‹€.
    • 좔상 λ©”μ„œλ“œ
      • μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œλŠ” μ‹€ν–‰ 블둝이 μ—†λŠ” 좔상 λ©”μ„œλ“œλ‘œ μ„ μ–Έν•œλ‹€.
      • 좔상 λ©”μ„œλ“œλŠ” public abstract νŠΉμ„±μ„ κ°–κ³  μƒλž΅ν•˜λ”λΌλ„ 컴파일 κ³Όμ •μ—μ„œ μžλ™μœΌλ‘œ λΆ™κ²Œ λœλ‹€.
[public] interface μΈν„°νŽ˜μ΄μŠ€ {
	// μƒμˆ˜
	[public static final] νƒ€μž… μƒμˆ˜μ΄λ¦„ = κ°’;
	// 좔상 λ©”μ†Œλ“œ
	[public abstract] νƒ€μž… λ©”μ†Œλ“œμ΄λ¦„(λ§€κ°œλ³€μˆ˜, ...);
}

 

2) μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

κ°μ²΄λŠ” μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜λœ 좔상 λ©”μ„œλ“œμ™€ λ™μΌν•œ 싀체 λ©”μ„œλ“œλ₯Ό κ°–κ³  μžˆμ–΄μ•Ό ν•œλ‹€. μ΄λŸ¬ν•œ 객체λ₯Ό μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„ 객체라고 ν•˜κ³  κ΅¬ν˜„ 객체λ₯Ό μƒμ„±ν•˜λŠ” 클래슀λ₯Ό κ΅¬ν˜„ 클래슀라 ν•œλ‹€.

// κ΅¬ν˜„ 클래슀
public class κ΅¬ν˜„ν΄λž˜μŠ€ implements μΈν„°νŽ˜μ΄μŠ€ {
	// μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ 좔상 λ©”μ†Œλ“œμ˜ 싀체 λ©”μ†Œλ“œ μ„ μ–Έ
}

// 닀쀑 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 클래슀
public class κ΅¬ν˜„ν΄λž˜μŠ€ implements μΈν„°νŽ˜μ΄μŠ€1, μΈν„°νŽ˜μ΄μŠ€2 {
	// μΈν„°νŽ˜μ΄μŠ€1에 μ„ μ–Έλœ 좔상 λ©”μ†Œλ“œμ˜ 싀체 λ©”μ†Œλ“œ μ„ μ–Έ
	// μΈν„°νŽ˜μ΄μŠ€2에 μ„ μ–Έλœ 좔상 λ©”μ†Œλ“œμ˜ 싀체 λ©”μ†Œλ“œ μ„ μ–Έ
}

// κ΅¬ν˜„ ν΄λž˜μŠ€κ°€ μž‘μ„±λ˜λ©΄ new μ—°μ‚°μžλ‘œ 객체λ₯Ό 생성할 수 μžˆλ‹€.
// κ·ΈλŸ¬λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•œ 것은 μ•„λ‹ˆλ‹€.
κ΅¬ν˜„ν΄λž˜μŠ€ λ³€μˆ˜ = new κ΅¬ν˜„ν΄λž˜μŠ€();

 

3) μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©

μΈν„°νŽ˜μ΄μŠ€λŠ” ν•„λ“œ, μƒμ„±μž λ˜λŠ” λ©”μ„œλ“œμ˜ 맀개 λ³€μˆ˜, μƒμ„±μž λ˜λŠ” λ©”μ„œλ“œμ˜ 둜컬 λ³€μˆ˜λ‘œ 선언될 수 μžˆλ‹€. μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„ 객체λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  κ΅¬ν˜„ 객체λ₯Ό λŒ€μž…ν•΄μ•Ό ν•œλ‹€. μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜λŠ” μ°Έμ‘° νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— κ΅¬ν˜„ 객체가 λŒ€μž…λ  경우 κ΅¬ν˜„ 객체의 λ²ˆμ§€λ₯Ό μ €μž₯ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜;
λ³€μˆ˜ = κ΅¬ν˜„κ°μ²΄;

μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜ = κ΅¬ν˜„κ°μ²΄;

 

κ΅¬ν˜„ 객체가 μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μ— λŒ€μž…λ˜λ©΄ μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ 좔상 λ©”μ„œλ“œλ₯Ό 개발 μ½”λ“œμ—μ„œ μ‚¬μš©ν•  수 있게 λœλ‹€. κ°œλ°œ μ½”λ“œλŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ 좔상 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³  μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ 객체의 μž¬μ •μ˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.

 

4) νƒ€μž… λ³€ν™˜κ³Ό λ‹€ν˜•μ„±

λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ©”μ„œλ“œ μž¬μ •μ˜μ™€ νƒ€μž… λ³€ν™˜μ΄ ν•„μš”ν•˜λ‹€. μΈν„°νŽ˜μ΄μŠ€ μ—­μ‹œ 이 두 κ°€μ§€ κΈ°λŠ₯이 μ œκ³΅λ˜λ―€λ‘œ 상속과 λ”λΆˆμ–΄ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 데 많이 μ‚¬μš©λœλ‹€. ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€ μ½”λ“œλŠ” 변함이 μ—†λŠ”λ° κ΅¬ν˜„ 객체λ₯Ό κ΅μ²΄ν•¨μœΌλ‘œμ¨ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ κ²°κ³Όκ°€ λ‹€μ–‘ν•΄μ§„λ‹€. μ΄κ²ƒμ΄ μΈν„°νŽ˜μ΄μŠ€μ˜ λ‹€ν˜•μ„±μ΄λ‹€.

 

μžλ™ νƒ€μž… λ³€ν™˜

κ΅¬ν˜„ 객체가 μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ λ³€ν™˜λ˜λŠ” 것은 μžλ™ νƒ€μž… λ³€ν™˜μ— ν•΄λ‹Ήλœλ‹€. μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 클래슀λ₯Ό μƒμ†ν•΄μ„œ μžμ‹ 클래슀λ₯Ό λ§Œλ“€μ—ˆλ‹€λ©΄ μžμ‹ 객체도 μžλ™ νƒ€μž… λ³€ν™˜ν•  수 μžˆλ‹€.

 

κ°•μ œ νƒ€μž… λ³€ν™˜

κ΅¬ν˜„ 객체가 μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ μžλ™ νƒ€μž… λ³€ν™˜ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. κ²½μš°μ— 따라 κ΅¬ν˜„ ν΄λž˜μŠ€μ— μ„ μ–Έλœ ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  κ²½μš°λ„ 생길 수 μžˆλ‹€. κ°•μ œ νƒ€μž… λ³€ν™˜μ„ 톡해 λ‹€μ‹œ κ΅¬ν˜„ 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•œ ν›„ κ΅¬ν˜„ 클래슀의 ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

if (vehicle instanceof Bus) {
	Bus bus = (Bus)vehicle;
}

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [JAVA] κΈ°λ³Έ API 클래슀
  • [JAVA] 쀑첩 ν΄λž˜μŠ€μ™€ 쀑첩 μΈν„°νŽ˜μ΄μŠ€
  • [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] 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€
μƒλ‹¨μœΌλ‘œ

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