인터페이스 (Interface)
- 인터페이스란 객체와 객체 사이에서 일어나는 상호 작용의 매개로 쓰인다. (서로 이어주는 다리 역할과 프로젝트의 설계도로 생각하면 됩니다.)
모든 기능을 추상화로 정의한 상태로 선언만 합니다.
인터페이스는 예약어로 class 대신 "interface" 키워드를 사용하면 되며, 접근 제어자로는 public 또는 default를 사용합니다.
interface InterfaceName {
// ..
}
인터페이스는 추상 클래스와 같이 추상 메서드를 가지므로 추상 클래스와 매우 흡사합니다.
인터페이스도 추상 클래스처럼 인스턴스를 생설할 수 없고, 상속 받은 클래스에서 구현한 뒤 자식 클래스를 인스턴스하여 사용합니다.
다만, 추상 클래스와는 아래와 같은 차이점들이 있습니다.
- 추상 클래스는 일반 메서드와 추상 메서드 둘 다 가질 수 있다.
인터페이스는 오로지 추상 메서드와 상수만을 가집니다. (구현 로직을 작성할 수 없습니다.)
- 인터페이스 내에 존재하는 메서드는 무조건 public abstract로 선언되며, 이를 생략할 수 있습니다.
- 인터페이스 내에 존재하는 변수는 무조건 public static final로 선언되며, 이를 생략할 수 있습니다.
ex)
private int a = 1; // interface 의 제약 조건을 따르지 않았기 때문에 오류가 발생합니다.
public int b = 2; // 컴파일러가 자동적으로 public static final b = 2로 추가해줍니다.
static int c = 3; // 컴파일러가 자동적으로 public static final c = 3으로 추가해줍니다.
int d = 4; // 컴파일러가 자동적으로 public static final d = 4로 추가해줍니다.
- 인터페이스는 Java class의 다중 상속을 허용하지 않는 점을 보안하고자 다중 상속을 제공합니다. (implements를 사용.)
인터페이스의 사용 이유 (장점)
- 개발 시간을 단축 시킬 수 있습니다.
이러한 특징을 가진 인터페이스를 사용하면 다른 개발자들이 각각의 부분을 완성할 때 까지 기다리지 않고 서로 규약만 정해두어 각자의 부분만 따로 나눠서 작성된 코드를 컴파일 할 수 있습니다.
- 클래스간 결합도를 낮출 수 있습니다.
코드의 종속성을 줄이고 유지보수성을 높이도록 해줍니다.
- 표준화가 가능합니다.
클래스의 기본틀을 제공하여 개발자들에게 정형화된 개발을 강요할 수 있습니다.
'IT > JAVA' 카테고리의 다른 글
자바 생성자 (Constructor) (0) | 2018.01.03 |
---|---|
자바 this, this(), super, super() (0) | 2018.01.02 |
자바 접근제어자 (Access Modifier) (0) | 2017.12.29 |
추상 클래스(Abstract Class)와 추상 메서드(Abstract Method) (0) | 2017.12.29 |
자바(Java) final 키워드 (0) | 2017.12.28 |