λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Programming/Java

19 Interface

by Dowon Kang 2024. 1. 20.

μΈν„°νŽ˜μ΄μŠ€(Interface)λŠ” κ°μ²΄ μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μΆ”상화λ₯Ό μœ„ν•œ μ€‘μš”ν•œ κ°œλ… μ€‘ ν•˜λ‚˜μž…λ‹ˆλ‹€. μ£Όλ‘œ μΆ”상 λ©”μ„œλ“œμ™€ μƒμˆ˜(static final λ³€μˆ˜)λ₯Ό μ •μ˜ν•˜λ©°, λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„(Implement)ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

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

 

1) 좔상 λ©”μ„œλ“œμ˜ 집합

μΈν„°νŽ˜μ΄μŠ€λŠ” μΆ”상 λ©”μ„œλ“œ(본체가 μ—†λŠ” λ©”μ„œλ“œ)λ₯Ό μ •μ˜ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ΄ λ©”μ„œλ“œλŠ” κ΅¬ν˜„이 μ—†κ³ , ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

2) κ΅¬ν˜„(Implement)
μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€λŠ” implements ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. ν΄λž˜μŠ€μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜ν•œ λͺ¨λ“  좔상 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ™μ‹œμ— κ΅¬ν˜„ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

 

3) 닀쀑 상속(Multiple Inheritance)
μΈν„°νŽ˜μ΄μŠ€λŠ” ν΄λž˜μŠ€μ™€ λ‹¬λ¦¬ μ—¬λŸ¬ κ°œμ˜ μΈν„°νŽ˜μ΄μŠ€λ‘œλΆ€ν„° μƒμ†λ°›μ„ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λ§Œμ„ μƒμ†λ°›μ„ μˆ˜ μžˆμ§€λ§Œ, μΈν„°νŽ˜μ΄μŠ€λŠ” μ—¬λŸ¬ κ°œλ₯Ό λ™μ‹œμ— μƒμ†λ°›μ„ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

4) Always constant variable in interface start public static final and method start public
μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜λœ μƒμˆ˜(static final λ³€μˆ˜)λŠ” κΈ°λ³Έμ μœΌλ‘œ public static final둜 μ‹œμž‘ν•˜λ©°, λ©”μ„œλ“œλŠ” public으둜 μ‹œμž‘ν•©λ‹ˆλ‹€. μΈν„°νŽ˜μ΄μŠ€λŠ” κΈ°λ³Έμ μœΌλ‘œ μ™ΈλΆ€μ—μ„œ μ ‘근이 κ°€λŠ₯ν•˜λ„λ‘ μ„€κ³„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

 

5) From JDK 1.8, constant variable and default method have added
JDK 1.8λΆ€ν„°λŠ” μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μƒμˆ˜(static final λ³€μˆ˜)와 λ””ν΄νŠΈ λ©”μ„œλ“œ(default method)λ₯Ό μ •μ˜ν•  μˆ˜ μžˆκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λ‘œμ¨ μΈν„°νŽ˜μ΄μŠ€μ—μ„œλ„ λ©”μ„œλ“œμ˜ κΈ°λ³Έ κ΅¬ν˜„을 μ œκ³΅ν•˜κ±°λ‚˜ μƒμˆ˜λ₯Ό μ„ μ–Έν•  μˆ˜ μžˆκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • 정적 λ©”μ„œλ“œ(Static Method): μ •μ  λ©”μ„œλ“œλ„ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •μ˜ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ΄ λ©”μ„œλ“œλŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ μΈμŠ€ν„΄μŠ€ μ—†μ΄ ν˜ΈμΆœλ©λ‹ˆλ‹€.

 

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

 

1. μ„ μ–Έ(껍데기,μΈν„°νŽ˜μ΄μŠ€)κ³Ό κ΅¬ν˜„(μ•Œλ§Ήμ΄) 뢄리 κ°€λŠ₯

더보기

public class Interface02 {
    public static void main(String[] args) {

        A a = new A();
        a.method(new C()); // κ°‘μžκΈ° Bν΄λž˜μŠ€κ°€ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€? μŒ‰κ°€λŠ₯
    }
}

// μΈν„°νŽ˜μ΄μŠ€ μž₯점 1: μ„ μ–Έ(껍데기,μΈν„°νŽ˜μ΄μŠ€)κ³Ό κ΅¬ν˜„(μ•Œλ§Ήμ΄) λΆ„리 κ°€λŠ₯
class A {
    public void method(I i) { // μΈν„°νŽ˜μ΄μŠ€ I κ΅¬ν˜„ν•œ λ„˜λ§Œ λ“œλŸ¬μ™€λΌ!!
        i.method();
    }
}
interface I {
    public void method();
}

class B implements I {
    public void method() {
        System.out.println("B ν΄λž˜μŠ€μ˜ λ©”μ„œλ“œ");
    }
}

class C implements I {
    public void method() {
        System.out.println("C ν΄λž˜μŠ€μ˜ λ©”μ„œλ“œ");
    }
}

 

2. μ„œλ‘œ λ¬Άμ–΄μ£Όκ³  μ‹Άμ€ ν΄λž˜μŠ€λ“€μ˜ κ΄€κ±”λ₯Ό λ§Ίμ–΄μ€„ μˆ˜ μžˆλ‹€

 

 

 

μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μƒμˆ˜μ™€ λ””ν΄νŠΈ λ©”μ„œλ“œ(default method)λ₯Ό ν—ˆμš©ν•˜κ²Œ 된 이유 

μžλ°”μ—μ„œ μΈν„°νŽ˜μ΄μŠ€μ— λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό λ„μž…ν•œ μ£Όλœ μ΄μœ λŠ” κΈ°μ‘΄μ˜ μΈν„°νŽ˜μ΄μŠ€μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ μˆ˜μ •ν•  λ•Œ λ°œμƒν•˜λŠ” λ¬Έμ œλ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€. μΈν„°νŽ˜μ΄μŠ€μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•˜λ©΄, ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œ μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λ‘œ μΈν•΄ κΈ°μ‘΄μ— κ°œλ°œλœ μ½”λ“œλ“€μ΄ μƒˆλ‘œμš΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ λ³€κ²½λ˜μ–΄μ•Ό ν•˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” μ΄λŸ¬ν•œ 문제λ₯Ό μ™„ν™”ν•˜κ³  κΈ°μ‘΄ μ½”λ“œμ˜ ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ μ§€ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•  λ•Œ 기본적인 κ΅¬ν˜„μ„ μ œκ³΅ν•  수 있기 λ•Œλ¬Έμ— ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ 되며, 이둜 인해 기쑴의 ν΄λž˜μŠ€μ—μ„œλŠ” ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ 컴파일 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ””ν΄νŠΈ λ©”μ„œλ“œμ˜ κ°€λŠ₯μ„± μžˆλŠ” 문제점
1. μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€κ°„μ— λ””ν΄νŠΈ λ©”μ„œλ“œ 좩돌 : μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ—μ„œ λ””ν΄νŠΈ λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©ν•œλ‹€.
2. λ””ν΄νŠΈ λ©”μ„œλ“œμ™€ 쑰상 클래슀 λ©”μ„œλ“œκ°„μ˜ 좩돌 : 쑰상 클래슀의 λ©”μ„œλ“œκ°€ μƒμ†λ˜κ³ , λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” λ¬΄μ‹œλœλ‹€. 

 

 

 

 

μΈν„°νŽ˜μ΄μŠ€μ™€ μΆ”μƒν΄λž˜μŠ€μ˜ 차이점

-→ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜(IV), μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ(IM), μƒμ„±μž(Constructor)의 유무

 

  • 좔상 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ, μƒμ„±μžλ₯Ό κ°€μ§ˆ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€λŠ” κΈ°λ³Έμ μœΌλ‘œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ, μƒμ„±μžλ₯Ό κ°€μ§ˆ μˆ˜ μ—†μŠ΅λ‹ˆλ‹€. μΈν„°νŽ˜μ΄μŠ€μ—μ„œλŠ” μƒμˆ˜μ™€ μΆ”상 λ©”μ„œλ“œλ§Œμ„ μ •μ˜ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

 

 


An interface is a completely "abstract class" that is used to group related methods with empty bodies.

 

'Programming > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

21 Exception handling  (0) 2024.01.21
20 Exceptions  (0) 2024.01.21
18 Polymorphism  (0) 2024.01.20
17 Abstraction  (0) 2024.01.20
16 Composition relationship  (0) 2024.01.20

λŒ“κΈ€