인터페이스
일종의 추상 클래스이다. 추상클래스보다 추상화 정도가 높다.
변수는 (public static final) 접근제어자를 갖는다. 메서드는 (public abstract)를 갖는다.
변수와 메서드 앞에 해당 접근제어자를 생략해도 컴파일 시점에 컴파일러가 자동으로 추가한다.
JDK1.8버전부터 default method와 static method의 추가를 허용한다.
interface 정의
interface 인터페이스이름 {
public static final 변수;
public abstract 메서드이름();
}
default method
구현을 가지는 메서드이다. interface를 implements한 하위 class에서만 interface에서 선언
된 default method를 사용할 수 있고 재정의도 가능하다. interface 내부에서 쓰는 형식은 다
음과 같다.
default (반환하는 자료형) (메서드 이름) () {
(함수내용)
}
static method
인터페이스를 상속하지 않아도 또 인터페이스를 상속한 객체를 생성하지 않아도 interface 내에 구
현된 static method를 사용할 수 있다. interface.method(); 형태로 사용할 수 있다는 의미이다.
private method
private method는 interface 구현한 클래스에서 재정의할 수 없다.
인터페이스 내부에서만 사용하기 위해 구현하는 메서드이다.
default 메서드나 static 메서드에서 사용한다.
인터페이스 사용 안내문
인터페이스는 인터페이스를 다중상속 할 수 있으나 단일상속의 한계로 나타난 문법이기 때문에 다중
상속을 실제로는 잘 사용하지 않는다.
클래스가 인터페이스를 상속받을 때 인터페이스 안의 메서드를 구현한다고 해서 implements라는 단
어를 사용한다. 클래스를 상속받을 때 쓰는 extends와는 단어가 다르다.
만약 클래스가 인터페이스를 implements 할 때 인터페이스의 일부 메서드만을 구현 할 경우 해당 클
래스 앞에 abstract가 붙는다. 즉 추상메서드이다.
오버라이딩 할 때는 조상의 메서드보다 넓은 범위의 접근 제어자를 지정해야한다. 매개변수가 같아야
한다. 반환타입이 같아야한다.
인터페이스를 왜 씁니까? 그래서?
인터페이스가 하는 역할은 일종의 '명세'이다. 명세라 함은 인터페이스를 상속받아 구현한 클래스가 있을
때 해당 클래스를 사용하기 위한 설명서의 역할을 제공한다. 해당 메서드가 무슨 기능을 수행하는지 매개
변수로는 어떤 타입의 매개 변수가 들어가는지 어떤 형태의 자료형을 반환하는지 등이 이에 해당한다.
자 그럼 명세에 대한 개념을 알았으니 이제 해당 명세를 어떻게 이용하고 있는지를 알아야 한다. JDBC 인
터페이스가 좋은 예시이다. 자바를 통해 DB에 데이터를 적재하기 위해선 Connection 이라는 인터페이스를
중간에 두고 DB(Oracle, MySQL, ...) 등을 연결한다. 이 때 써드파티 사는 Connection의 명세를 보고
해당 기능들을 구현을 한다.
이때 개발하는 개발자 입장에서 중간에 Connection이라는 interface를 각 사가 명세를 통해 구현을 해
놓기에 내부 코드를 알 필요 없이 편하게(?) 메서드를 사용할 수가 있다.
또한 인터페이스를 상속받아서 구현한 각 회사의 객체 내부구조를 알 필요 없이 사용할 수 있다. 마지막으로
구현한 클래스가 업데이트 되었을 때 각 사는 서로 영향을 주지 않아 문제가 없고 사용자 입장에서도 가져다
쓰기 때문에 문제 될 것이 없다.
인터페이스를 공부하면서 객체지향이 가진 장점을 감정으로 느꼈던 순간이었다. 선택취사 가능