1. C++에서의 인터페이스
- C++에서는 클래스의 메소드 하나를 virtual로 붙여서 선언하고 {} 를 하면 순수 가상함수로 그 메소드가 속한 클래스는 추상 클래스가 된다.
- JAVA의 인터페이스는 C++에서 배운 추상 클래스의 상위개념이라고 볼 수 있다.
2. 인터페이스의 역할
- 객체 사용 설명서
- 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다.
개발 ----메소드 호출----> 인터 ---메소드 호출---> 객
코드 <--- 리턴값 -------- 페이스 <----리턴값------ 체
- 다형성을 극대화 하기 위해 만들어진 개념.
- 개발 코드에서 직접 메소드 호출하면 되는데, 중간에 인터페이스를 두눈 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다.
- 개발 코드 측면에서는 코드 변경 없이 실행 내용과 리턴값을 다양화할 수 있다는 장점을 갖고 있다.
3. 인터페이스 선언
public interface HyunndyInt
{
// 상수 필드
public int MAX_AGE = 100;
// 추상 메소드 -> 선언부만 작성
public void WakeUp();
// 디폴트 메소드
default void EatSomething() {}
// 정적 메소드
static void PlayGame() {}
}
- 인터페이스는 상수, 메소드만 구성멤버로 가진다.
- 인터페이스는 객체로 생성할 수 없기 때문에 생성자가 없다.
구성 멤버 | 설명 |
상수 필드 |
인터페이스는 객체 사용 설명서로, 런타임 시 데이터를 저장할 수 있는 필드는 만들 수 없다. 대신 고정된 상수 필드는 선언할 수 있다. |
추상 메소드 |
객체가 가지고있는 메소드를 설명한 것. 실제 실행부는 객체가 갖고 있다. |
디폴트 메소드 |
인터페이스에 선언되지만 객체가 가지고있는 인스턴스 메소드. 인터페이스에 실행부가 있지만, 구현 객체가 있어야 사용 가능하다.
기존 인터페이스를 확장해서 새로운 기능을 추가하기 위해 허용됨. Ex) 디폴트 메소드가 없었을 때 기존 MyInterface1와 이를 구현한 MyClass가 있었다. 시간이 흘러 MyInterface를 업데이트해야할 때, 추상 메소드를 추가하면 MyInterface와 MyClass를 둘 다 업데이트 해야한다. 이는 매우 비효율적이다. 따라서 인터페이스에 실행부가 있고, 구현 클래스를 수정할 필요가 없는 디폴트 메소드가 등장. |
정적 메소드 |
객체가 없어도 인터페이스만으로 호출이 가능하다. 실행부가 있다. |
4. 구현 클래스 생성 및 객체 생성
// 인터페이스
package Hyunndy_Toy_Package;
public interface HyunndyInt {
int MAX_AGE = 20;
void EatSomething();
}
// 구현 클래스
package Hyunndy_Toy_Package;
// 클래스 뒤에 implements [인터페이스이름]을 붙인다.
public class Hyunndy implements HyunndyInt{
public void Run()
{
System.out.println("현디");
}
// 인터페이스의 추상클래스를 재정의하지 않으면 Hyunndy 클래스는 자동으로 추상 클래스가 된다.
@Override
public void EatSomething() {
// TODO Auto-generated method stub
System.out.println("김치볶음밥먹는당");
}
public static void main(String[] args)
{
// ******* //
인터페이스 구현 객체를 사용하려면
1. 인터페이스 변수를 선언한다.
2. 구현 객체를 대입 한다.
이 방법을 따라야 한다.
인터페이스 변수는 "참조타입"이기 때문에 구현 객체가 대입될 경우 구현 객체의 번지를 저장한다.
// ******* //
HyunndyInt H1;
H1 = new Hyunndy();
H1.EatSomething();
}
}
5. 다중 인터페이스 구현 클래스
- 하나의 객체를 여러개의 인터페이스 타입으로 사용할 수 있다.
- 다중 인터페이스를 구현할 경우, 구현 클래스는 모든 인터페이스의 추상 메소드에 대해 실체 메소드를 작성해야 한다.
6. 인터페이스의 다형성
상속 | 인터페이스 |
같은 종류의 하위 클래스를 만드는 개념 | 사용 방법이 동일한 클래스를 만드는 개념 |
- 인터페이스를 이용해 다형성을 쓰면 프로그램 소스 코드는 변함이 없는데, 구현 객체를 교체함으로써 프로그램의 실행 결과가 다양해진다는것이 있다.
7. 인터페이스 상속
- 클래스와는 달리 인터페이스는 다중상속이 가능하다.
public interface HyunndyInt extends 상위인터페이스1, 상위인터페이스2 { ... }
하위인터페이스 변수 = new 구현클래스(..);
상위인터페이스1 변수 = new 구현클래스(..);
8. 익명 구현 객체 사용 예시
package Hyunndy_Toy_Package;
public class Hyunndy{
public static void main(String[] agrs)
{
Soundable s = new Soundable()
{
public String Sound()
{
return "꽥";
}
};
System.out.println(s.Sound());
}
}
'Deperecated > JAVA' 카테고리의 다른 글
JAVA - 예외 처리 (0) | 2020.01.10 |
---|---|
JAVA - 익명 구현 객체, 람다식 (0) | 2020.01.09 |
JAVA - 어노테이션 (0) | 2020.01.09 |
JAVA 기본서 공부 5 - 클래스 (0) | 2020.01.05 |
JAVA - 열거 타입 (0) | 2020.01.04 |