-
[Java 자바] 8. 인터페이스 ① 선언과 구현Programming/Java 2022. 8. 9. 00:24반응형
8-1. 인터페이스의 역할
인터페이스: 객체의 사용 방법을 정의한 타입
- 클래스는 다중 상속이 불가능하지만, 인터페이스는 다중 상속이 가능함
- 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스
- 오로지 추상메소드와 상수만 포함 가능8-2. 인터페이스 선언
8-2-1. 인터페이스 선언
[접근제한자] interface 인터페이스명 { // 상수, 선언되는 변수는 모두 상수로 적용되기 때문에 public static final과 같게 취급 데이터타입 상수명 = 값; (public static final)데이터타입 상수명 = 값; // 메소드, 선언되는 메소드는 모두 추상 메소드로 적용되기 때문에 public abstract와 같게 취급 반환값 메소드명() {...} public abstract 반환값 메소드명() {...} // 디폴트 메소드 default 데이터타입 메소드명() {...} // 정적 메소드 static 데이터타입 메소드명() {...}
8-2-2. 상수 필드 (Constant Field)
- 인터페이스에 고정된 값으로 런타임 시 데이터를 바꿀 수 없으며, 선언 시 반드시 초기값을 대입해야 함
(인터페이스는 객체 사용 설명서이므로 런타임 시 데이터를 저장할 수 있는 일반 필드는 선언이 불가)
- 인터페이스에 선언된 필드는 모두 public static final의 특성을 가지며, 생략하더라도 컴파일 과정에서 자동으로 붙음
- 상수명은 대문자로 작성하되, 단어 구분은 언더바(_)로 연결public interface Test { public int MAX_VALUE = 10; }
8-2-3. 추상 메소드 (Abstract Method)
- 객체가 가지고 있는 메소드를 설명한 것으로 호출할 때 어떤 매개값이 필요하고 리턴 타입이 무엇인지만 알려줌
- 실제 실행부는 구현 객체에서 작성 필요
- 인터페이스에 선언된 추상 메소드는 모두 public abstract의 특성을 갖기 때문에 생략하더라도 컴파일 과정에서 자동으로 붙음8-2-4. 디폴트 메소드 (Default Method)
- 인터페이스에 default 키워드로 메소드를 선언하면 메소드를 구현할 수 있음(선언부부터 구현부까지)
- public 특성을 갖기 때문에 생략하더라도 컴파일 과정에서 자동으로 붙음
- 해당 내용은 상속 받은 객체에서 따로 오버라이딩하지 않아도 사용이 가능하며, 오버라이딩해서 사용할 수도 있음8-2-5. 정적 메소드 (Static Method)
- 객체를 생성하지 않아도 인터페이스명.메소드명 으로 접근 가능
- public 특성을 갖기 때문에 이를 생략하더라도 컴파일 과정에서 자동으로 붙음//Calculator.java public interface Calculator { static int add(int x, int y) { return x + y; } } //CalcTest.java public class CalcTest { public static main(String[] args) { System.out.println(Calculator.add(20,30)); } }
8-3. 인터페이스 구현
8-3-1. 구현 클래스
- implements 키워드 사용
- 구현클래스는 인터페이스가 가지고 있는 추상 메소드에 대한 실체 메소드를 가지고 있어야 함
- 인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 갖기 때문에 public보다 낮은 접근 제한으로 구현 작성 불가
- 인터페이스에 선언된 추상 메소드에 대응하는 실체 메소드를 구현하지 않으면 구현클래스는 자동적으로 추상클래스가 됨[접근제한자] class 구현클래스명 implements 인터페이스명 { @Override // 인터페이스에 선언된 추상 메소드의 실체 메소드 선언 }
- 인터페이스로 구현 객체를 사용하려면 인터페이스 변수를 선언하고 구현 객체를 대입해야 함
- 인터페이스 변수는 참조 타입이기 때문에 구현 객체가 대입될 경우 구현 객체의 번지를 저장//RemoteControl.java public interface RemoteControl { public int MAX_VOLUME = 10; public void trunOn(); } //Television.java public class Television implements RemoteControl { @Override public void turnOn() { System.out.println("TV를 켭니다."); } } //RemoteControlTest.java public class RemoteControlTest { public static void main(String[] args) { Remotecontrol rc; rc = new Television(); } }
8-3-2. 익명 구현 객체
- 일회성으로만 사용할 구현 객체를 만들 수 있는 방법
- 컴파일하면 클래스명$1.class 형태로 클래스 파일이 만들어짐(생성 번호는 1부터 시작)public class RemoteControlTest { public static void main(String[] args) { RemoteControl rc = new RemoteControl() { public void turnOn() { */실행문/* } }; } }
8-3-3. 다중 인터페이스 구현 클래스
- 다중 인터페이스를 구현할 경우, 구현 클래스는 모든 인터페이스의 추상 메소드에 대해 실체 메소드를 작성해야 함
public class 구현클래스명 implements interfaceA, interfaceB { //interfaceA에 선언된 추상 메소드의 실체 메소드 선언 //interfaceB에 선언된 추상 메소드의 실체 메소드 선언 }
반응형'Programming > Java' 카테고리의 다른 글
[Java 자바] 9. 중첩 ① 중첩 클래스 (0) 2022.08.09 [Java 자바] 8. 인터페이스 ② 사용 방법, 인터페이스 상속, 디폴트 메소드 (0) 2022.08.09 [Java 자바] 7. 상속 ③ 추상클래스 (Abstract Class) (0) 2022.08.08 [Java 자바] 7. 상속 ② 타입 변환과 다형성, instanceof (0) 2022.08.07 [Java 자바] 7. 상속 ① 클래스 상속, super, 메소드 오버라이딩 (0) 2022.08.07