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

8-1μΈν„°νŽ˜μ΄μŠ€(μΈν„°νŽ˜μ΄μŠ€)

μ‹œνλ¦¬ν‹°μ§€ν˜Έ 2023. 10. 11.

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

즉, 개발 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜λŠ” 객체λ₯Ό λ³€κ²½ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. λ”°λΌμ„œ 개발 μ½”λ“œ μΈ‘λ©΄μ—μ„œλŠ” μ½”λ“œ 변경없이 μ‹€ν–‰ λ‚΄μš©κ³Ό 리턴값을 λ‹€μ–‘ν™”ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

 

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

μΈν„°νŽ˜μ΄μŠ€ 선언은 class ν‚€μ›Œλ“œ λŒ€μ‹ μ— interface ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€,

[public] interface μΈν„°νŽ˜μ΄μŠ€μ΄λ¦„ {...}

 

*μΈν„°νŽ˜μ΄μŠ€ 이름은 클래슀 이름을 μž‘μ„±ν•˜λŠ” 방법과 λ™μΌν•˜λ‹€. μ˜μ–΄ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜λ©°, 첫 κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ ν•˜κ³  λ‚˜λ¨Έμ§€λŠ” μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•˜λŠ” 것이 관둀이닀.

 

μΈν„°νŽ˜μ΄μŠ€ ꡬ성

클래슀 : ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œ

μΈν„°νŽ˜μ΄μŠ€ : ν•„λ“œ, λ©”μ†Œλ“œ -> 객체λ₯Ό 생성할 수 μ—†κΈ° λ•Œλ¬Έμ— μƒμ„±μžλŠ” μ—†λ‹€.

 

μƒμˆ˜ ν•„λ“œ μ„ μ–Έ

μΈν„°νŽ˜μ΄μŠ€λŠ” 객체 μ‚¬μš© 방법을 μ •μ˜ν•œ κ²ƒμ΄λ―€λ‘œ μ‹€ν–‰ μ‹œ 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” μΈμŠ€ν„΄μŠ€ λ˜λŠ” 정적 ν•„λ“œλ₯Ό μ„ μ–Έν•  수 μ—†λ‹€. κ·ΈλŸ¬λ‚˜ μƒμˆ˜ ν•„λ“œλŠ” 선언이 κ°€λŠ₯ν•˜λ‹€. 단, μƒμˆ˜λŠ” μΈν„°νŽ˜μ΄μŠ€μ— κ³ μ •λœ κ°’μœΌλ‘œ μ‹€ν–‰ μ‹œμ— 데이터λ₯Ό λ°”κΏ€ 수 μ—†λ‹€.

 

*μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ ν•„λ“œλŠ” λͺ¨λ‘ public static final의 νŠΉμ„±μ„ κ°–λŠ”λ‹€. 이λ₯Ό μƒλž΅ν•˜λ”λΌλ„ 컴파일 κ³Όμ •μ—μ„œ μžλ™μœΌλ‘œ λΆ™κ²Œ λœλ‹€.

 

ex)

[public static final] νƒ€μž… μƒμˆ˜μ΄λ¦„ = κ°’;

 

*μƒμˆ˜ 이름은 λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λ˜, μ„œλ‘œ λ‹€λ₯Έ λ‹¨μ–΄λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμ„ κ²½μš°μ—λŠ” 언더바(_)둜 μ—°κ²°ν•˜λŠ” 것이 관둀이닀.

 

좔상 λ©”μ†Œλ“œ μ„ μ–Έ

μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ 좔상 λ©”μ†Œλ“œλŠ” λͺ¨λ‘ public abstract의 νŠΉμ„±μ„ κ°–κΈ° λ•Œλ¬Έμ— public abstractλ₯Ό μƒλž΅ν•˜λ”λΌλ„ 컴파일 κ³Όμ •μ—μ„œ μžλ™μœΌλ‘œ λΆ™κ²Œ λœλ‹€.

 

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

개발 μ½”λ“œκ°€ μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€λŠ” 객체의 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€. κ°μ²΄λŠ” μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜λœ 좔상 λ©”μ†Œλ“œμ™€ λ™μΌν•œ λ©”μ†Œλ“œ 이름, 맀개 νƒ€μž…, 리턴 νƒ€μž…μ„ κ°€μ§„ 싀체 λ©”μ†Œλ“œλ₯Όκ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€. μ΄λŸ¬ν•œ 객체λ₯Ό μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„ 객체 라고 ν•˜κ³ , κ΅¬ν˜„ 객체λ₯Ό μƒμ„±ν•˜λŠ” 클래슀λ₯Ό κ΅¬ν˜„ ν΄λž˜μŠ€λΌκ³ ν•œλ‹€.

 

κ΅¬ν˜„ 클래슀

κ΅¬ν˜„ ν΄λž˜μŠ€λŠ” λ³΄ν†΅μ˜ ν΄λž˜μŠ€μ™€ λ™μΌν•œλ°, μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŒμ„ μ•Œλ €μ£ΌκΈ° μœ„ν•΄ 클래슀 선언뢀에 implements ν‚€μ›Œλ“œλ₯Ό μΆ”κ°€ν•˜κ³  μΈν„°νŽ˜μ΄μŠ€ 이름을 λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.

 

ex)

public class κ΅¬ν˜„ν΄λž˜μŠ€μ΄λ¦„ implements μΈν„°νŽ˜μ΄μŠ€μ΄λ¦„ {

  //μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ 좔상 λ©”μ†Œλ“œμ˜ 싀체 λ©”μ†Œλ“œ μ„ μ–Έ

}

 

닀쀑 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 클래슀

κ°μ²΄λŠ” λ‹€μŒ κ·Έλ¦Όκ³Ό 같이 λ‹€μˆ˜μ˜ μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€ A와 μΈν„°νŽ˜μ΄μŠ€ Bκ°€ 객체의 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  수 있으렀면 κ°μ²΄λŠ” 이 두 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. 

 

ex)

public class κ΅¬ν˜„ν΄λž˜μŠ€μ΄λ¦„ implements μΈν„°νŽ˜μ΄μŠ€A, μΈν„°νŽ˜μ΄μŠ€B {

  //μΈν„°νŽ˜μ΄μŠ€ A에 μ„ μ–Έλœ 좔상 λ©”μ†Œλ“œμ˜ 싀체 λ©”μ†Œλ“œ μ„ μ–Έ

  //μΈν„°νŽ˜μ΄μŠ€ B에 μ„ μ–Έλœ 좔상 λ©”μ†Œλ“œμ™€ 싀체 λ©”μ†Œλ“œ μ„ μ–Έ

}

 

 

 

λŒ“κΈ€