[Java] 인터페이스 활용(100% 다형성 보장!)
💡 1. 인터페이스의 경우 100% 다형성을 보장한다.
인터페이스는 모든 메서드가 추상 메서드로 이루어 져 있다.
구현 메서드를 가지고 있을 수 없다. 반드시 무조건 100% 추상 메서드로 구성해야 한다.
그리고 interface 는 class 형태가 아니다! 그래서 다중상속이 가능하다.
인터페이스는 메서드의 경우는 abstract 키워들 써주고(생략이 가능하다.)
클래스의 경우에는 interface를 써준다.
자식 객체의 경우 extends를 써주는 것이 아닌 implement 를 써준다.
자식 클래스의 경우도 마찬가지로 메서드들은 abstract를 생략해 줘도 된다.
❗ 인터페이스는 구현된 메서드를 가지고 있을 수 없다.
반드시 구현부가 없는 추상 메서드만 가지고 있어야 한다.
interface 클래스의 경우
abstract 를 생략해도 된다.
interface 클래스인 RemoCon 클래스를 상속받은 자식 클래스들은
반 드 시 !! 해당 추상메서드 들이 구현되어 있을 것이다.
반드시 부모클래스의 메서드들을 재정의를 해야하므로
chUp() chDown() internet() 의 추상 메서드들이 재정의 되어야 한다.
그 결과 구현된 클래스 들을 보면 TV와 Radio에 각 기능이 구현된것을 확인할 수 있다.
따라서 부모가 해당 메서드로 명령을 자식 클래스에 내렸을 때
반드시 동작한다. 즉 100% 다형성이 보장 된다.
추상 클래스와 인터페이스는 자식클래스와 반드시 연결지어 사용해야한다.
이 특징을 이용해서 외부의 API를 사용할 때 부모(추상or인터)를 이용해서 자식 클래스를 동작시킨다.
💡 2. 코드로 공부하는 interface!
인터페이스 내부의 메서드는 100% 추상 메서드이기 때문에 abstract 를 생략해도 된다.
추상 클래스와 마찬가지로 자기 자신 인터페이스의 객체를 선언할 수 없다.
그래서 반드시 자식클래스와 만나서 사용해야만 한다.
부모가 자식에게 명령을 내려서 다형성의 기능을 활용하는 것이 주 목적이다.
TV를 RemoCon 이라는 기능으로 구현(implements)하고자 하면
TV에서 빨간줄이 처진 곳에 마우스를 가져가면 Add를 통해 구현해야하는 추상 메서드들이 생긴다.
그러면 해당 추상 메소드들이 화면에 구현된다.
아니면 구현해야하는 빈 공간에 오른쪽 마우스 클릭 Source ➡ Override/Implement 클릭
이러한 방식으로도 화면에 구현이 가능하다.
메서드들이 화면에 구현되었으면 각 클래스의 특징에 맞게 재정의(override) 해주면 된다.
재정의 한 값들을 각각 실행시켜보면 서로 클래스에 맞게 재정의된 결과값이 나온다.
🔍 인터페이스는 추상 메서드 말고 다른 값은 못오나요?
상수를 선언이 가능하다.
인터페이스 내부에 변수값을 선언하면
public static final or public final static 이 생략되어있다.
보통은 final static 만 생략하기도 한다.
인터페이스는 기본적으로 객체를 생성할 수 없기 때문에
객체에 접근하지 않고 바로 데이터 값을 이용하는 방법???
➡ static 을 통한 접근 방법이 있다.
ex) RemoCon.MAXCH RemoCon.MINCH 등등
현재 채널이 70이고
40번의 chUp 메서드를 작동시킬 때 max 채널 까지만 채널을 작동시키기 위해 위와 같은 코드를 넣을 수 있다.
이때 최대 MAXCH 는 public final static int MaxCH 로 RemoCon 인터페이스에 선언된 변수이다.
이처럼 인터페이스의 기능을 구현하고 구현하는데 필요한 변수등을 static에 올려서 사용한다.
💡 3. 추상 클래스와 인터페이스
abstract class | interface | |
공통점 | 🔍 다형성을 보장하기 위해서 등장했다. 🔍 객체를 생성 할 수 없다.(new 불가능!) 🔍 하위클래스에 의해 구현되어야 한다.(override 재정의 필수) 🔍 부모(상위클래스)의 역할로 사용한다.(upcasting으로 객체를 생성) 🔍 추상 메서드를 가진다. |
|
차이점 | ⚡ 서로 기능이 비슷한 클래스의 공통 부분을 묶을때 사용한다. ⚡ 구현 메서드와 추상 메서드를 함께 가질 수 있다. ⚡ extends keyword를 사용한다. ⚡ 구현 메서드를 가질 수 있다. |
⚡ 서로 기능이 다른 클래스의 공통 부분을 묶을때 사용한다. ⚡100% 추상 메서드로 이루어진다. ⚡ implement keyword 사용한다. ⚡구현 메서드를 가질 수 없다. ⚡ 다중 상속 형태를 지원한다. ⚡ final static 멤버변수를 가질 수 있다. |
Java 관련 개념을 알려주실 때 그 내부 동작이 어떻게 구현되는지 자세하게 알수 있는 강의입니다.
출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)