Interface


πŸ”Ž μΈν„°νŽ˜μ΄μŠ€

μΈν„°νŽ˜μ΄μŠ€λž€?

πŸ”₯ 좔상 λ©”μ„œλ“œμ˜ 집합 πŸ”₯

  • κ΅¬ν˜„λœ 것이 μ „ μ—†λŠ” 섀계도. (껍데기-λͺ¨λ“  멀버가 public)

μΈν„°νŽ˜μ΄μŠ€λŠ” 개발 μ½”λ“œμ™€ 객체가 μ„œλ‘œ ν†΅μ‹ ν•˜λŠ” 접점 역할을 ν•œλ‹€.

개발 μ½”λ“œκ°€ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€ 객체의 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœμ‹œν‚¨λ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 개발 μ½”λ“œλŠ” 객체의 λ‚΄λΆ€ ꡬ쑰λ₯Ό μ•Œ ν•„μš”κ°€ μ—†κ³  μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ†Œλ“œλ§Œ

μ•Œκ³  있으면 λœλ‹€.

쀑간에 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‘λŠ” μ΄μœ λŠ” 개발 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜λŠ” 객체λ₯Ό λ³€κ²°ν•  수

μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œλ‹€.

πŸ“Œ μ•Œκ³  λ„˜μ–΄κ°€κΈ° πŸ“Œ

좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 차이점은 Interface Variabl을 κ°€μ§ˆμˆ˜ μžˆλƒ 없냐이닀.


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

public interface TestInterface {

}




public interface TestInterface {

    // μƒμˆ˜ ν•„λ“œ; public static μƒλž΅κ°€λŠ₯
    public int MAX_VOLUME = 10; //= public static final int MAX_VOLUME = 10;

    // 좔상 λ©”μ„œλ“œ; public static μƒλž΅κ°€λŠ₯
    String getNumber(); //= public static String getNumber();


}



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

μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 호좜된 λ©”μ†Œλ“œλŠ” μ΅œμ’…μ μœΌλ‘œ κ°μ²΄μ—μ„œ μ‹€ν–‰λœλ‹€.

λ”°λΌμ„œ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ†Œλ“œλŠ” μ‹€ν–‰ 블둝이 ν•„μš” μ—†λŠ” 좔상 λ©”μ†Œλ“œλ‘œ

μ„ μ–Έν•œλ‹€. 좔상 λ©”μ†Œλ“œλŠ” 리턴 νƒ€μž…, λ©”μ†Œλ“œ 이름, 맀개 λ³€μˆ˜λ§Œ 기술되고

μ€‘κ΄„ν˜Έλ₯Ό 뢙이지 μ•ŠλŠ” λ©”μ†Œλ“œλ₯Ό λ§ν•œλ‹€.

public abstract void method();

// 맀개 κ°’ ν•„μš”ν•œ 경우
public abstract void method2(int num); 


μ ‘κ·Ό μ œν•œ

μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  λ©”μ†Œλ“œλŠ” 기본적으둜 public μ ‘κ·Ό μ œν•œμ„ κ°–λŠ”λ‹€.



πŸ”Ž μΈν„°νŽ˜μ΄μŠ€ 상속

  • μΈν„°νŽ˜μ΄μŠ€μ˜ 쑰상은 μΈν„°νŽ˜μ΄μŠ€λ§Œ κ°€λŠ₯ν•˜λ‹€.

  • 닀쀑 상속이 κ°€λŠ₯ν•˜λ‹€. μ™œλƒλ©΄ μΆ”μƒλ©”μ„œλ“œλŠ” μΆ©λŒν•΄λ„ 문제 μ—†κΈ° λ•Œλ¬Έ.

public interface TestClass extends Interface1, Interface2 {}


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

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

πŸ”₯ μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ μΆ”μƒλ©”μ„œλ“œλ₯Ό μ™„μ„±ν•˜λŠ” 것 πŸ”₯

πŸ’‘ ν—·κ°ˆλ¦¬μ§€ 말기 : 좔상 ν΄λž˜μŠ€λŠ” 상속(extends)λ₯Ό ν†΅ν•΄μ„œ κ΅¬ν˜„ν•œλ‹€.

개발 μ½”λ“œκ°€ μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€λŠ” 객체의 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.

μ—¬κΈ°μ„œ 객체λ₯Ό μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„(implement) 객체 라고 ν•˜κ³ , κ΅¬ν˜„ 객체λ₯Ό μƒμ„±ν•˜λŠ”

클래슀λ₯Ό κ΅¬ν˜„ 클래슀라고 ν•œλ‹€.



κ΅¬ν˜„ 클래슀

κ΅¬ν˜„ ν΄λž˜μŠ€λŠ” λ³΄ν†΅μ˜ ν΄λž˜μŠ€μ™€ λ™μΌν•œλ°, μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŒμ„

μ•Œλ €μ£ΌκΈ° μœ„ν•΄μ„œ 클래슀 선언뢀에 implements ν‚€μ›Œλ“œλ₯Ό μΆ”κ°€ν•œλ‹€.

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

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


κ΅¬ν˜„ 객체

μΈν„°νŽ˜μ΄μŠ€λ‘œ κ΅¬ν˜„ 객체λ₯Ό μ‚¬μš©ν•˜λŸ¬λ©΄, μš°μ„  μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ 

κ΅¬ν˜„ 객체λ₯Ό λŒ€μž…ν•΄μ•Ό ν•œλ‹€. μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜λŠ” μ°Έμ‘° νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— κ΅¬ν˜„κ°μ²΄κ°€

λŒ€μž…λ  경우 κ΅¬ν˜„ 객체의 λ²ˆμ§€λ₯Ό μ €μž₯ν•œλ‹€.

public class RemoteControllerSample {

    public static void main(Strin[] args) {

        // 1. μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜ μ„ μ–Έ
        RemoteController rc;

        // 2. λ³€μˆ˜ = κ΅¬ν˜„κ°μ²΄;
        rc = new Television();
        rc = new Audio();

        // 1,2 λ²ˆμ„ ν•œ λ²ˆμ—
        // μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜ = κ΅¬ν˜„κ°μ²΄;
        // RemoteController rc = new Television();
    }   

}


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

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

}


πŸ”Ž μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©

클래슀λ₯Ό μ„ μ–Έν•  λ•Œ μΈν„°νŽ˜μ΄μŠ€λŠ” (ν•„λ“œ, μƒμ„±μž λ˜λŠ” λ©”μ†Œλ„)의 λ§€κ°œλ³€μˆ˜,

(μƒμ„±μž λ˜λŠ” λ©”μ†Œλ“œ)의 둜컬 λ³€μˆ˜λ‘œ 선언될 수 μžˆλ‹€.