반응형
인터페이스(interface)란?
추상 메소드와 상수만 들어있는 기본 설계도
인터페이스의 역할
- 객체를 어떻게 구성해야 하는지 정리한 설계도
- 객체의 교환성(또는 다형성)을 높여준다.
- 구현 객체를 직접 몰라도 인터페이스 메서드만 알면 객체 호출이 가능하다.
- 객체가 인터페이스를 사용하면, 인터페이스 메서드를 반드시 구현해야 하는 제약을 건다.
인터페이스 선언
인터페이스의 모든 필드는 public static final 이어야한다.
모든 메소드는 public abstract 이어야 하고 생략 가능하며 생략한다면 컴파일러가 자동으로 붙여준다.
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값; // 반드시 초기화 해야한다.
// 상수의 네이밍은 모두 대문자로 구성되고 구분자는 "_"(언더바)로 표한한다.
public static final String FIRST_NAME = "Ryan";
...
public abstract 메소드이름(매개변수목록);
...
}
- 인터페이스는 객체로 생성할 수 없기 때문에, 생성자를 가질 수 없다.
인터페이스의 구현
클래스가 인터페이스로부터 메소드를 물려받아 실행구문을 붙여 재정의하는 행위
자신이 직접 인스턴스를 생성할 수 없고, 구현해 줄 클래스를 작성해야한다.
또한 클래스가 모든 추상메소드를 구현하지 않는다면, abstract 키워드를 사용하여 추상 클래스로 선언해야한다.
class 클래스이름 implements 인터페이스이름 { ... }
- 1개의 클래스가 여러개의 인터페이스를 구현할 수 있다.
인터페이스의 상속
인터페이스가 다른 인터페에스에게 멤버변수와 메소드를 물려주는 행위
인터페이스는 인터페이스로부터만 상속을 받을 수 있으며, 여러 인터페이스를 상속받을 수 있다.
클래스는 다중상속이 안되나요?
클래스를 이용하여 다중상속을할때 메소드의 이름이 겹칠경우 출처의 모호성 등의 문제가
발생 할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않는다.
자바에서는 상속과 구현을 동시에 할 수 있다.
class 클래스이름 extend 상위클래스이름 implements 인터페이스이름 { ... }
인터페이스 다중 상속시 변수명이 겹치는경우
클래스 입장에서 변수명이 겹치는경우 누구의 것인지 알 수 없기때문에 앞에 누구의 것인지 명시해줘야한다.
인터페이스명.변수명
인터페이스의 장점
- 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능
- 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있다.
- 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능
- 프로젝트 전체의 메소드 호출 규격을 만들어 유지 보수성을 높일 수 있다.
반응형