πŸ’»

Java ν”„λ‘œκ·Έλž˜λ° - μΈν„°νŽ˜μ΄μŠ€(interface), μ ‘κ·Όμ œν•œμž(public, private, protected, default) λ³Έλ¬Έ

KITRI/JAVA

Java ν”„λ‘œκ·Έλž˜λ° - μΈν„°νŽ˜μ΄μŠ€(interface), μ ‘κ·Όμ œν•œμž(public, private, protected, default)

λ˜νš¨λ‹ˆ 2020. 5. 8. 13:43

μΈν„°νŽ˜μ΄μŠ€(interface)

 

: μΈν„°νŽ˜μ΄μŠ€λž€? μΌμ’…μ˜ μΆ”μƒν΄λž˜μŠ€μ΄λ‹€. μΈν„°νŽ˜μ΄μŠ€λŠ” μΆ”μƒν΄λž˜μŠ€μ²˜λŸΌ μΆ”μƒλ©”μ„œλ“œλ₯Ό κ°–μ§€λ§Œ μΆ”μƒν΄λž˜μŠ€λ³΄λ‹€ 좔상화 정도가 λ†’μ•„μ„œ μΆ”μƒν΄λž˜μŠ€μ™€ 달리 λͺΈν†΅μ„ κ°–μΆ˜ 일반 λ©”μ„œλ“œ λ˜λŠ” λ©€λ²„λ³€μˆ˜λ₯Ό κ΅¬μ„±μ›μœΌλ‘œ κ°€μ§ˆ 수 μ—†λ‹€. 였직 μΆ”μƒλ©”μ„œλ“œμ™€ μƒμˆ˜λ§Œμ„ λ©€λ²„λ‘œ κ°€μ§ˆ 수 있으며, κ·Έ μ™Έμ˜ λ‹€λ₯Έ μ–΄λ– ν•œ μš”μ†Œλ„ ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 

μΆ”μƒν΄λž˜μŠ€λ₯Ό λΆ€λΆ„μ μœΌλ‘œλ§Œ μ™„μ„±λœ 'λ―Έμ™„μ„± 섀계도' 라고 ν•œλ‹€λ©΄, μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„λœ 것은 아무 것도 μ—†κ³  λ°‘κ·Έλ¦Όλ§Œ κ·Έλ €μ Έ μžˆλŠ” 'κΈ°λ³Έ 섀계도' 라고 ν•  수 μžˆλ‹€.

 

- μžλ°”μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λŠ” 객체의 μ‚¬μš© 방법을 μ •μ˜ν•œ νƒ€μž…μ΄λ‹€.

- 객체의 κ΅ν™˜μ„±μ„ λ†’μ—¬μ£ΌκΈ° λ•Œλ¬Έμ— λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” μ€‘μš”ν•œ 역할을 ν•œλ‹€. 

- (ν΄λž˜μŠ€λŠ” ν•„λ“œ, μƒμ„±μž, λ©”μ†Œλ“œλ₯Ό ꡬ성 λ©€λ²„λ‘œ κ°€μ§€λŠ”λ°) μΈν„°νŽ˜μ΄μŠ€λŠ” μƒμˆ˜μ™€ λ©”μ†Œλ“œλ§Œμ„ κ΅¬μ„±λ©€λ²„λ‘œ 가진닀.

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

- μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑상속이 κ°€λŠ₯ν•˜λ‹€. (ν΄λž˜μŠ€λŠ” 닀쀑상속 λΆˆκ°€λŠ₯)

 

 

- μΈν„°νŽ˜μ΄μŠ€μ˜ μž₯점

1) 개발 μ‹œκ°„ λ‹¨μΆ•ν•œλ‹€.

2) ν‘œμ€€ν™”κ°€ κ°€λŠ₯ν•˜λ‹€.

3) μ„œλ‘œ κ΄€κ³„μ—†λŠ” ν΄λž˜μŠ€λ“€μ—κ²Œ 관계λ₯Ό 맺어쀄 수 μžˆλ‹€. 

4) 독립적인 ν”„λ‘œκ·Έλž˜λ° κ°€λŠ₯ν•˜λ‹€.

 

 

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

 

File> New> Interfaceλ₯Ό 선택

 

 

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

interface μΈν„°νŽ˜μ΄μŠ€λͺ…{

더보기

...

//μƒμˆ˜

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

(->public static final μƒλž΅ν•˜λ”λΌλ„ μžλ™μ μœΌλ‘œ 컴파일 κ³Όμ •μ—μ„œ λΆ™κ²Œλœλ‹€.)

 

// μΆ”μƒλ©”μ†Œλ“œ

[public abstract] νƒ€μž… λ©”μ†Œλ“œλͺ…(λ§€κ°œλ³€μˆ˜, ...);

(->public absract μƒλž΅ν•˜λ”λΌλ„ μžλ™μ μœΌλ‘œ 컴파일 κ³Όμ •μ—μ„œ λΆ™κ²Œλœλ‹€.)

 

//λ””ν΄λ“œλ©”μ†Œλ“œ

[public] default νƒ€μž… λ©”μ†Œλ“œλͺ…(λ§€κ°œλ³€μˆ˜, ...){ ... }

(->public μƒλž΅ν•˜λ”λΌλ„ μžλ™μ μœΌλ‘œ 컴파일 κ³Όμ •μ—μ„œ λΆ™κ²Œλœλ‹€.)

 

//μ •μ λ©”μ†Œλ“œ

[public] static νƒ€μž… λ©”μ†Œλ“œλͺ…(λ§€κ°œλ³€μˆ˜) { ... }
(->public μƒλž΅ν•˜λ”λΌλ„ μžλ™μ μœΌλ‘œ 컴파일 κ³Όμ •μ—μ„œ λΆ™κ²Œλœλ‹€.)

}

 

- λͺ¨λ“  λ©€λ²„λ³€μˆ˜λŠ” public static finalμ΄μ–΄μ•Όν•˜λ©°, 이λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.

- λͺ¨λ“  λ©”μ„œλ“œλŠ” public abstractμ΄μ–΄μ•Όν•˜λ©°, 이λ₯Ό μƒλž΅ν•  수 μžˆλ‹€. 

 

 

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

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

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

}

 

 

-ν΄λž˜μŠ€μ—μ„œ 클래슀 상속받을 λ•Œ -> extends

-μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받을 λ•Œ -> extends

-ν΄λž˜μŠ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받을 λ•Œ -> implements

-μΈν„°νŽ˜μ΄μŠ€μ—μ„œ 클래슀λ₯Ό 상속받을 λ•Œ -> (X) μ΄λŸ°κ²½μš°λŠ” μ—†λ‹€.

 

 

μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μΆ”μƒν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ„œ 자유둭게 μ“°κ³ , λ©€λ²„λ³€μˆ˜λ₯Ό μ“°λŠ” κ²½μš°λŠ” κ±°μ˜μ—†λ‹€. (static final둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” μΉ˜ν™˜μ΄ μ•ˆλ˜κΈ° λ•Œλ¬Έ)

 

 

ν•¨μˆ˜μ˜ λ¦¬ν„΄νƒ€μž…μ΄ void인 κ²½μš°μ—λŠ” μƒλž΅κ°€λŠ₯. μ™Όμͺ½, 였λ₯Έμͺ½ λ‘˜λ‹€κ°€λŠ₯

 

 

 

 

예제 1)

/**

 * @Author : κΉ€μ†Œν˜„
 * @Date   : 2020. 5. 8.
 * @Description : μŠ€λ§ˆνŠΈν°μ˜ λͺ¨λΈ μŠ€νŽ™μ€ λ‹€μŒκ³Ό κ°™λ‹€.

 * @Description : μŠ€λ§ˆνŠΈν°μ˜ λͺ¨λΈ μŠ€νŽ™μ€ λ‹€μŒκ³Ό κ°™λ‹€.
 * μ œν’ˆλͺ…      μ „ν™”μ†‘μˆ˜μ‹       3G/LTE/5G         TV리λͺ¨μ»¨κΈ°λŠ₯
 * Lphone     κ°€λŠ₯               3G                    νƒ‘μž¬
 * Sphone     κ°€λŠ₯               LTE                   νƒ‘μž¬
 * Iphone      κ°€λŠ₯               5G                   λ―Ένƒ‘μž¬
 */

 

Phone.java , PhoneMain.java
IPhone.java, LPhone.java, SPhone.java

 

 

μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑상속이 κ°€λŠ₯ν•˜λ‹€. 

 

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

κ΅¬ν˜„ 클래슀λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” 것이 일반적이고, 클래슀λ₯Ό μž¬μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— νŽΈλ¦¬ν•˜μ§€λ§Œ, μΌνšŒμ„±μ˜ κ΅¬ν˜„ 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μ†ŒμŠ€ νŒŒμΌμ„ λ§Œλ“€κ³  클래슀λ₯Ό μ„ μ–Έν•˜λŠ” 것은 λΉ„νš¨μœ¨μ μ΄λ‹€. μž‘μžμ—μ„œλŠ” μ†ŒμŠ€ νŒŒμΌμ„ λ§Œλ“€μ§€ μ•Šκ³ λ„ κ΅¬ν˜„ 객체λ₯Ό λ§Œλ“€ 수 μžˆλŠ” 방법을 μ œκ³΅ν•˜λŠ”λ°, 그것이 읡λͺ… κ΅¬ν˜„ 객체이닀.

 

μž‘μ„± μ‹œ μ£Όμ˜ν•  점은 ν•˜λ‚˜μ˜ μ‹€ν–‰λ¬Έμ΄λ―€λ‘œ λμ—λŠ” μ„Έλ―Έμ½œλ‘ (;)을 λ°˜λ“œμ‹œ λΆ™μ—¬μ•Όν•œλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜ = new μΈν„°νŽ˜μ΄μŠ€(){

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

};

 

 


 

μ ‘κ·Όμ œν•œμž

  • public => λ‹€ κ°€λŠ₯ν•˜λ‹€.
  • private => λ‹€ λΆˆκ°€λŠ₯ν•˜λ‹€.
  • protected => μƒμ†ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. 
  • default => νŒ¨ν‚€μ§€κ°€ 같은 κ²½μš°μ— 자유둭게 μ“Έ 수 μžˆλ‹€. 
μ ‘κ·Ό μ§€μ •μž μ ‘κ·Ό λ²”μœ„ 동일 클래슀 동일 νŒ¨ν‚€μ§€ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ˜ μžμ‹ν΄λž˜μŠ€ λ‹€λ₯Έ νŒ¨ν‚€μ§€
public μ ‘κ·Ό μ œν•œ μ—†μŒ O O O O
protected 동일 νŒ¨ν‚€μ§€μ™€ 상속 받은 클래슀 λ‚΄λΆ€ O O O  
default 동일 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ O O    
private 동일 클래슀 λ‚΄μ—μ„œλ§Œ O      

 

- μ ‘κ·Ό μ œν•œμžλ₯Ό μ‚¬μš©ν•˜λŠ” 이유?

1) μ™ΈλΆ€λ‘œλΆ€ν„° 데이터λ₯Ό λ³΄ν˜Έν•˜κΈ° μœ„ν•΄μ„œ

2) μ™ΈλΆ€μ—λŠ” λΆˆν•„μš”ν•œ, λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” 뢀뢄을 감좔기 μœ„ν•΄μ„œ

=> privateλ₯Ό μ‚¬μš©ν•˜λŠ” 이유(μΊ‘μŠν™”)

 

 

 

 

λ°˜μ‘ν˜•
Comments