● 인터페이스(Interface)란
완전히 미완성된 채로 남겨져 인터페이스 안에 존재하는 그 어떤 메소드도 몸체(정의부)가 없기 때문에
실행 부분이 존재하지 않는다. 클래스를 위한 템플릿으로써의 기능을 수행하는 추상클래스의 한 종류이다.
● 인터페이스는 클래스와 달리 다중 상속이 가능하며 인터페이스 자체도 상속된다. 기존의 C++언어 등에서
지원되는 다중 상속이 사용 과정에서 많은 문제점들을 노출시켰기 때문에 자바에서는 다중 상속의 개념을
인터페이스라는 개념으로 변형하여 인터페이스를 통해 다중 상속을 구현하는 방법을 지원한다.
● 인터페이스는 상수와 추상 메소드만 가질 수 있으며 인터페이스 안의 메소드들은
접근제어지시자를 명시하지 않아도 『public』 으로 설정되어 클래스에서 구현(implements)함으로써
바로 접근이 이루어질 수 있다.
● 특징
- 추상 클래스의 일종으로 선언만 있고 정의가 없다.
- 『final』 변수는 가질 수 있다(상수의 개념).
- 인터페이스는 『public static final』 상수만 만들 수 있다.
- 인터페이스를 구현하기 위해서는 『extends』 대신에 『implements』 를 이용한다.
- 하나 이상의 인터페이스를 implements 할 수 있다.
- 인터페이스를 implements 한 클래스는 인터페이스의 모든 메소드를 Overriding 해야 한다.
그렇게 해야 해당 클래스를 기반으로 인스턴스 생성이 가능하다.
-인터페이스가 다른 인터페이스를 상속받을 수 잇으며 이때『 extends』 키워드를 사용한다.
또한, 클래스와 달리 인터페이스는 다중 상속이 가능하다.
interface Demo
{
public static final double PI=3.141592;
//인터페이스는 상수와 추상 메소드만 가질 수 있으며!!
//인터페이스의 멤버 변수는 『static final 을 별도로 명시하여 붙이지 않아도 자동으로 static final인 상태
public int a = 10;
//=public static final int a = 10;
// 변수 선언되어 있다고 생각하면 안된다.
/*
public void print()
{
System.out.println("인터페이스 print() 메소드...");
}
*/
// 인터페이스의 메소드는 선언만 가능(정의불가)
// 자동으로 『abstract』 인 상태
// public abstract void print();
public void print();
}//end Demo
//Demo 인터페이스를 구현하는 (추상)클래스
/*abstract*/ class DemoImpl implements Demo
{
public void write()
{
System.out.println("클래스에 정의된 메소드....");
}
@Override //오버라이드 함으로써 abstract 뗄 수 있음
public void print()
{
System.out.println("인터페이스 메소드 재정의...");
}
}
// main() 메소드를 포함하고 있는외부의 다른 클래스
public class Test112
{
public static void main(String[] args)
{
//Demo ob = new Demo();// DemoImpl 기반으로는 가능하지만 오버라이드 했다고 해서 이렇게는 불가능하다
// 인터페이스를 대상으로는 인스턴스 생성이 불!가!
//DemoImpl obTemp = new DemoImpl();
// Demo 인터페이스의 모든 메소드를 재정의한 DemoImpl 클래스는
// 더이상 추상 클래스가 아니기 때문에 인스턴스 생성이 가능하다.
//Demo ob = (Demo)obTemp; 되는 경우!
// 인터페이스 객체는 상위 객체
Demo ob = new DemoImpl(); //업캐스팅 (Demo ob = (Demo)obTemp; 와 같은 뜻)
ob.print();
//-==>> 인터페이스 메소드 재정의...
((DemoImpl)ob).write(); //다운캐스팅
//-==>> 클래스에 정의된 메소드....
System.out.println(Demo.PI); // 상속관계에 있는문법이아니죠? static 접근방법 클래스변수
//-==>> 3.141592
System.out.println(Demo.a);
// -==>> 10 둘다 『static』 이기 때문에 가능
//Demo.a = 30; // 이 경우에는 에러발생. 『final』 이기 때문이다.
}
}
/*
인터페이스 메소드 재정의...
클래스에 정의된 메소드....
3.141592
10
계속하려면 아무 키나 누르십시오 . . .
*/
//
'📚Study Note > JAVA' 카테고리의 다른 글
[ JAVA ] 클래스 고급 - 인터페이스(Interface) ③ (0) | 2021.03.29 |
---|---|
[ JAVA ] 클래스 고급 - 인터페이스(Interface) ② (0) | 2021.03.29 |
[ JAVA ] 클래스 고급 - 상속 관계에 있는 클래스들 간의 캐스팅 ( 업 캐스팅, 다운 캐스팅 ) (0) | 2021.03.29 |
[ JAVA ] 클래스 고급 - 추상 클래스 (Abstract) (0) | 2021.03.29 |
[ JAVA ] 클래스 고급 - 상속 (Inheritance) ④ (0) | 2021.03.27 |