인터페이스란?
인터페이스는 일종이 추상클래스다
추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 가질수 없다
- 모든 멤버변수는 public static final이어야 하며,이를 생략할수 있다
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할수 있다.
- 인터페이스는 인터페이스로부터 상속받을 수 있으며, 클래스와는 달리 다중상속,즉 여러개의 인터페이스로부터 상속받을수 있다
다중 상속 단점
- 두 조상으로부터 상속받는 자손클래스는 어느 조상의 것을 상속받게 되는 것인지 알 수 없다. 어느 한 쪽으로부터의 상속을 포기하던가 이름이 충돌하지 않도록 조상클래스르 변경하는 수 밖에없다
- 인터페이스는 static상수만 정의할 수 있으므로 클래스 이름을 붙여서 구분이 가능하다
- 리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다
추상클래스와 인터페이스 차이
추상클래스는 생성자 및 인터페이스를 가질수 있지만 인터페이스는 구현된것이 아무것도 없는것이다 추상메서드만 가지고 있다
package ch07;
abstract class Unit2 {
int x, y;
abstract void move(int x, int y);
void sto() {
System.out.println ( "멈춥니다" );
}
}
interface Fightable{ //인터페이스의 모든 메서드는 public abstract 예외없이
void move(int x, int y); //public abstract 생략됨
void attack(Fightable f); // public abstract 생략됨
}
class Fighter extends Unit2 implements Fightable {
//오버라이딩 규칙: 조상보다 접근제어자가 좁으면 안된다
public void move(int x, int y){
System.out.println ("["+x+","+y+"]");
}
public void attack(Fightable f){
System.out.println (f+"를 공격");
}
}
public class FighterTest {
public static void main(String[] args) {
Fighter f = new Fighter ();
f.move ( 100, 200 );
Fighter f2 = new Fighter ();
f.attack ( f2 );
}
}
인터페이스의 장점
- 개발시간을 단축시킬 수 있다
인터페이스가 작성되면, 이를 사용해서 프로그램을 작성하는 것이 가능하다. 메서드를 호출하는 쪽에서는 메서드의 내용에관계없이 선언부만 알면 되기 때문이다
그리고 동시에 다른 한쪽에서는 인터페이스를 구현하는 클래스를 작성하도록 하여, 인터페이스를 구현하는 클래스가 작성될 떄까지 기다리지 않고도 양쪽에서 동시에 개발을 진행 할 수 있다
- 표준화가 가능하다
프로젝트에 사용되는 기본 틀을 인터페이스로 작성한 다음, 개발자등에게 인터페이스를 구현하여 프로그램을 작성하도록 함으로써 보다 일관되고 정형화된 프로그램의 개발이 가능하다
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다
서로 상속관계에 있지도 않고 같은 조상클래스를 가지고 있지 않은 서로 아무런 관계도 없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어 줄 수있다
- 독립적인 프로그래밍이 가능하다
인터페이스를 이용하면 클래스를 선언과구현을 분리시킬 수 있기 때문에 실제구현에 독립적인 프로그램을 작성하는 것이 가능하다. 클래스와 클래스간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다
인터페이스의 이해
- 클래스를 사용하는 쪽(User)과 클래스르 제공하는 쪽(Provider)이 있따
- 메서드를 사용(호출) 하는 쪽(User)에서는 사용하려는 메서드(Provider)의 선언부만 알면된다(내용은 몰라도된다)
SCRIPT
인터페이스란? 하나의 약속이라고 생각한다. 인터페이스안에 선언되어있는 추상메서드는 건들지말고 각자 알아서 인터페이스를 가져다가 사용하는대신에 인터페이스안에 선언된 추상메서드는 모두 구현해주어야한다.
인터페이스를 사용할때는 implement를 사용해야한다.
'Language > Java' 카테고리의 다른 글
java.lang패키지와 유용한 클래스 (0) | 2021.10.03 |
---|---|
예외 처리 (0) | 2021.09.27 |
내부 클래스 (0) | 2021.09.25 |
싱글톤 (0) | 2021.09.19 |
오버로딩 vs 오버라이딩 (0) | 2021.09.19 |