Java 무작정 따라하기
6. 알기 쉽게 설명하는 Java 인터페이스 정리!
- 인터페이스의 선언 방법을 배워봅니다.
- 인터페이스의 사용 방법을 배워봅니다.
1. Java 인터페이스
- 완벽한 추상 클래스를 인터페이스라고 할 수 있다.
- 일반 메소드를 포함하는 추상클래스와는 다르게 모든 메소드가 추상 메소드로 이루어져있다.
- public abstract method
- 데이터는 클래스 상수만 선언할 수 있다.
- public static final 자료형 상수명
- 객체 생성이 불가능하다.
- 클래스와 마찬가지로 참조 자료형으로 인식된다.
- 인터페이스의 이름을 지을때는 주로 형용사로 짓는다.
- Runnable , Comparable , Actionable 등
- 일반 메소드를 포함하는 추상클래스와는 다르게 모든 메소드가 추상 메소드로 이루어져있다.
2. Java 인터페이스의 정의
- 구현 방법은 클래스 정의와 유사하다.
- 정의할 때 키워드는 class 대신에 interface 키워드를 사용한다.
- 완벽한 추상 클래스이긴 하지만 abstract는 생략하는 것이 보통이다.
- 메소드는 자동으로 public abstract이 붙기 때문에 생략이 가능하다.
- 수행할 수 있는 기능의 형식만 나열한 것이다.
- default 메소드와 static 메소드도 선언 가능하다.
- 선언할 경우 몸체를 구현해야 한다.
- 자동으로 public이 붙는다.
- 필드는 자동으로 public static final 이 된다.
- 클래스 상수만 선언 가능하다.
3. Java 인터페이스의 사용
- 추상 클래스와 마찬가지로 자식 클래스에서 상속하여 사용할 수 있다.
- 인터페이스를 상속받는 자식 클래스는 모든 추상메소드를 구현해 주어야 한다.
- 의미적으로는 관련이 없으나 기능적으로 유사한 클래스들을 묶어 사용할 때 이용한다.
- 예시로 대소 비교가 가능한 객체들의 자료형을 묶을 떄 이용할 수 있다.
- 사각형 클래스, 텔레비젼 클래스, 농구선수 클래스 등 세개의 다른 클래스의 경우
- 사각형의 크기, 텔레비전의 크기, 농구선수의 키 크기 등 크기 를 비교하는것은 같음.
- 이럴 경우 크기의 비교에 대한 기능을 인터페이스로 구현할 수 있다.
- 인터페이스를 상속받아 자식 인터페이스를 정의할 수 있따.
- 이 경우를 인터페이스의 확장 또는 인터페이스를 확장한다 라고 얘기한다.
4. Java 인터페이스 상속 및 구현
- 인터페이스는 여러 인터페이스를 상속받는 다중 상속이 가능하다.
- 추상클래스는 하나의 클래스를 상속받는 단일 상속만 가능하다.
- 상속
- 자식 인터페이스가 부모 인터페이스를 상속받을 경우에 extends 키워드를 사용한다.
- 예) interface EX extends EXInterface { }
- 구현( 또는 상속이라고도 한다)
- 자식 클래스가 부모 인터페이스를 상속 받는 경우에
- 자식 클래스는 부모인터페이스가 나열한 모든 기능을 구현해야 하며 implements 키워드를 사용.
- 예) class RunnableCar implements Runnable{ }
interface Movable{
// 모든 메소드 앞에는
// public abstract 가 자동할당.
// 비어있어도 생략된 것이므로 알고있자
void moveUp();
void moveDown();
void moveLeft();
void moveRight();
}
public class MovableTest{
public static void main(String[] args){
Movable m = new MovablePoint(5,5);
System.out.print(m);
// Point at (5,5)
m.moveDown();
System.out.print(m);
// Point at (5,4)
m.moveLeft();
System.out.print(m);
// Point at (4,4)
}
}
class MovablePoint implements Movable{
private int x,y;
public MovablePoint(int x,int y){
this.x = x;
this.y = y;
}
public String toString(){
return "point at (" + x + "," + Y + ")";
}
public void moveUp(){ y++; }
public void moveDown(){ y--; }
public void moveRight(){ x++; }
public void moveLeft(){ x--; }
}
5. 인터페이스 디폴트 메소드
- 인터페이스에서 선언되는 메소드에 기본 구현을 넣을 수는 있다.
- 자식 클래스에서 그대로 사용하거나 몸체를 재정의 해 줄수도 있다.
- default 키워드를 사용하여 몸체를 구현해 준다.
- 인터페이스에 나열된 기능을 확장 할 때, 기존 코드의 수정을 피하고 싶을 떄 주로 이용된다.
- 추상 메소드가 추가된다면 기존 인터페이스를 구현한 클래스를 수정해 줘야 하는데
- 이를 방지하고자 할 때 주로 사용한다.
interface Dolt{
void doSomething(); // public abstract 이 생략
int doSomethingElse(Strings); // public abstract 이 생략
// 이 메소드를 새로 추가하면
// 원래는 몸체를 갖는 메소드를 구현하면 안되는데
// 귀찮으면 하지 말라! 하는 식으로 메소드를 구현할 수 있는데
// 그때는 무조건 default 라는 키워드를 이용한다.
// 기존에 있던 인터페이스에서 추상메소드 하나를 추가하면
// 상속받은 자식 클래스에서 전부 재정의를 해줘야하는 불필요성이 생기고
// 이를 피하기 위해 최근에 나온 기술이 디폴트 메소드.
default boolean didltWork(int i, String S){
}
}
6. 추상클래스,인터페이스,클래스의 형변환
- 인터페이스, 클래스 모두 사용자가 정의한 정의형태의 자료형이다.
- extends 및 implements에 따라 상-하위 자료형 관계가 설정된다.
- 상위 유형의 변수는 하위 객체의 참조값을 가질 수 있다.
- 상위 유형의 변수가 가리키는 객체의 실제 유형에 따라
- 수행되는 메소드가 결정되는데 이를 동적 바인딩 이라고도 한다.
- 변수의 선언 유형으로 지정하지 않는다.
- SpuerClass super = new SubClass();
- super.method(); // SubClass 에서 찾는다.
내용이 유익하셨다면 구독 및 좋아요 클릭 부탁드려요 :)
오늘 하루도 즐거운 하루 보내세요!
'Language > Java' 카테고리의 다른 글
[Java 무작정 따라하기] 8. Java 열거형 및 익명클래스 알아보기 (0) | 2020.04.28 |
---|---|
[Java 무작정 따라하기] 7. java 오버로딩, 오버라이딩 및 다형성과 형변환 학습하기 (0) | 2020.04.27 |
[Java 무작정 따라하기] 5. 자바 추상클래스 간단 정리 (0) | 2020.04.27 |
[Java 무작정 따라하기]4. 알기쉽게 설명한 자바 클래스 완벽 정리! (0) | 2020.03.19 |
[Java 무작정 따라하기]3. Java variable , 자바 변수란? (0) | 2020.03.19 |