-
8주자 과제: 인터페이스 #8JAVA 기본 2021. 2. 24. 00:29728x90
목표
자바의 인터페이스에 대해 학습하세요.
학습할 것 (필수)
- 인터페이스 정의하는 방법
- 인터페이스 구현하는 방법
- 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
- 인터페이스 상속
- 인터페이스의 기본 메소드 (Default Method), 자바 8
- 인터페이스의 static 메소드, 자바 8
- 인터페이스의 private 메소드, 자바 9
인터페이스 정의하는 방법
인터페이스(interface)란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다.
자바에서 인터페이스를 선언하는 방법은 클래스를 작성하는 방법과 같습니다.
인터페이스를 선언할 때에는 접근 제어자와 함께 interface 키워드를 사용하면 됩니다.
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
...
public abstract 메소드이름(매개변수목록);
...
}
단, 클래스와는 달리 인터페이스의 모든 필드는 public static final이어야 하며, 모든 메소드는 public abstract이어야 합니다.
인터페이스 구현하는 방법
인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수는 없습니다.
따라서 인터페이스가 포함하고 있는 추상 메소드를 구현해 줄 클래스를 작성해야만 합니다.
자바에서 인터페이스는 다음과 같은 문법을 통해 구현합니다.
class 클래스이름 implements 인터페이스이름 { ... }
인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 == 사용해봐라
레퍼런스 = 참조, 구현체 = 인터체이스를 구현한 클래스
//인터페이스 선언
interface Animal { public abstract void cry(); }
//구현1
class Cat implements Animal {
public void cry() {
System.out.println("냐옹냐옹!");
}
}
//구현2
class Dog implements Animal {
public void cry() {
System.out.println("멍멍!");
}
}
public class Polymorphism03 {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
d.cry();
}
}
인터페이스 상속
상속과 구현을 동시에 할 수 있다.
class 클래스이름 extend 상위클래스이름 implements 인터페이스이름 { ... }
+자바 다중상속
인터페이스는 인터페이스로부터만 상속을 받을 수 있으며, 여러 인터페이스를 상속받을 수 있습니다.
+문제점
같은 내용을 상속받았을 떄 어떤 클래스의 상속인지 모름
하지만 인터페이스는 실제로 구현하는것이 아니라
이후 부분은 추후에 다시 공부할것
인터페이스의 기본 메소드 (Default Method), 자바 8
기본메소드란
메소드 선언이 아니라 구현체를 제공하는 방법=구현을 포함하는 메소드를 포함한 인터페이스를 정의
과거와의 차이
과거에는 필요한 메소드만 구현하라고 사용
인터페이스 a,b,c
↑
추상클래스 a,b,c
↑↑↑
a, b, c
하지만 현제는 추상 메소드가 없이도 원하는대로 개발 할 수 있게 되었다.
인터페이스 default a,default b,default c
↑↑↑
a, b, c
결론적으로 상소에대해 자유로워지게 되었다.
인터페이스의 static 메소드, 자바 8
Java 8부터 인터페이스에 static 메서드 추가가 가능해졌다. 클래스에서 작성하는 방법과 동일하게 작성할 수 있고, 접근 제어자는 항상 public이며 역시 생략이 가능하다.
static 메서드는 오버라이딩이 불가능하다.
인터페이스의 private 메소드, 자바 9
Java 9부터 사용할 수 있게된 private 메서드는 다음과 같은 특성을 가지고 있다.
- 메서드의 몸통 { }이 있고 abstract이 아니다.
- 구현체에서 구현할 수 없고 자식 인터페이스에서 상속이 불가능하다.
- static 메서드도 private이 가능하다.
private 메서드는 private, abstract, default 또는 static 메서드를 호출할 수 있다. private static은 static 및 static private 메서드만 호출 할 수 있다.
'JAVA 기본' 카테고리의 다른 글
10주차 과제: 멀티쓰레드 프로그래밍 #10 (0) 2021.02.28 9주차 과제: 예외 처리 #9 (0) 2021.02.27 7주차 과제: 패키지 #7 (0) 2021.02.23 6주차 과제: 상속 #6 (0) 2021.02.23 5주차 과제: 클래스 #5 (0) 2021.02.22