일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Eclipse
- 7kyu
- JavaScript
- 중첩쿼리
- Python
- SQL
- https
- Oralce
- Linux
- monthPicker
- 멀티쓰레드프로그래밍
- CentOS
- 서울에어비앤비
- java
- 서울복층에어비앤비
- 남산타워뷰
- Codewars
- 이것이리눅스다
- class파일바로보기
- 파이썬
- 사용자변경
- 8kyu
- 6kyu
- 주민번호마스킹
- 시즌1
- VMware
- CentOS8
- 오류
- 이클립스
- 자바기초스터디
- Today
- Total
보통사람
[Study-8주차] 인터페이스 본문
-
목표
-
자바의 인터페이스에 대해 학습하세요.
-
-
학습할 것 (필수)
-
인터페이스 정의하는 방법
-
인터페이스 구현하는 방법
-
인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
-
인터페이스 상속
-
인터페이스의 기본 메소드 (Default Method), 자바 8
-
인터페이스의 static 메소드, 자바 8
-
인터페이스의 private 메소드, 자바 9
-
1. 인터페이스를 정의하는 방법
-
interface 키워드를 이용
-
접근 제어자로 public 또는 default만 가능함
-
추상 메소드와 상수만을 멤버로 가질 수 있음
-
모든 멤버 변수는 public static final 이어야 하며 생략할 수 있음
-
default 메소드와 static 메소드를 제외한 모든 메소드는 public abstract 이어야 하며 생략할 수 있음
-
default 메소드와 static 메소드는 Java 1.8에 추가되었음
-
-
접근 제어자는 편의상 생략하는 경우가 많으며 컴파일 시 컴파일러가 자동으로 추가해줌
interface 인터페이스명 {
// 멤버 정의
}
public interface Cat {
public static final String myName = "Cat"; // 멤버 변수
public abstract void printName(); // 추상 메소드
}
interface Cat {
String myName = "Cat"; // == public static final String myName = "Cat";
void printName(); // == public abstract void printName();
}
2. 인터페이스를 구현하는 방법
-
추상 클래스처럼 인스턴스를 생성할 수 없음
-
implements 키워드를 이용해서 구현함
-
일부만 구현할거라면 추상 클래스로 선언해야 함
-
class 클래스명 implements 인터페이스명 {
}
public interface Cat {
String myName = "Cat";
void printName();
}
public class CatImpl implements Cat {
@Override
public void printName() {
System.out.println("CatImpl");
}
}
3. 인터페이스 상속
-
인터페이스로부터만 상속받을 수 있음(extends)
-
여러 개의 인터페이스 상속 가능
-
클래스와 달리 최상위 부모가 없음
public interface Dog extends Animal, Cat {
}
4. 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
-
추상 클래스처럼 인스턴스를 생성할 수 없으며 인터페이스 구현체에서 인스턴스를 생성해야 함
-
상속(extends)과 구현(implenents)을 동시에 할 수도 있음
-
인터페이스 타입의 참조 변수로 구현체의 인스턴스를 참조할 수 있음
package com.study.halle.s1.week08;
public class CatImpl implements Cat {
@Override
public void printName() {
System.out.println("Cat 인터페이스에 있는 메소드");
}
public static void main(String[] args) {
// 구현체의 인스턴스를 통해서 메소드 호출
CatImpl c = new CatImpl();
c.printName();
// Up-casting
Cat cat = new CatImpl();
cat.printName();
}
}
5. 인터페이스의 기본 메소드 (Default Method), 자바 8
-
Java 1.8에서 추가되었으며 default 키워드를 이용함
-
접근 제어자는 public 이며 생략 가능함
-
기존에 있는 인터페이스를 유지하면서 새 기능을 넣을 수 있음
-
메소드 구현부까지 있어야 하므로 인터페이스 구현체에서 런타임 시 에러가 발생할 수도 있음 때문에 @implSpec 태그를 이용해서 해당 메소드의 기능을 적어주는 것이 좋음
-
구현 받는 쪽에서 오버 라이딩(재정의)도 가능함
-
Object 클래스에서 제공하는 메소드는 기본 메소드로 할 수 없음(추상 메소드는 가능함)
-
인터페이스끼리 기본 메소드가 중복된다면 인터페이스 구현체에서 오버 라이딩(재정의) 해야 함
default 메소드 선언부 {
// 코드 내용
}
default void printDefault() {
System.out.println("기본 메소드");
}
6. 인터페이스의 static 메소드, 자바 8
- Java 1.8에서 추가되었으며 static 키워드를 이용함
- 기본 메소드와 마찬가지로 접근 제어자가 public 이며 생략 가능함
static 메소드 선언부 {
// 코드 내용
}
static void printStatic() {
System.out.println("static 메소드");
}
public interface Car {
default void printDefault() {
System.out.println("기본 메소드");
}
static void printStatic() {
System.out.println("static 메소드");
}
}
public class MyCar implements Car {
public static void main(String[] args) {
Car car = new MyCar();
car.printDefault(); // 기본 메소드 호출
Car.printStatic(); // static 메소드 호출
}
}
[실행결과]
기본 메소드
static 메소드
7. 인터페이스의 private 메소드, 자바 9
-
Java 9에서 추가되었으며 private 메소드와 private static 메소드를 인터페이스에서 사용 할 수 있음
-
구현체에 상속되지 않음
-
인터페이스내의 다른 메소드에서 private 메소드를 사용 할 수 있음
private 메소드 선언부 {
// 코드 생략
}
private static 메소드 선언부 {
// 코드 생략
}
※ 참조
Java의 정석
www.tcpschool.com/java/java_polymorphism_interface
howtodoinjava.com/java9/java9-private-interface-methods/
'Study' 카테고리의 다른 글
[Study-11주차] Enum (0) | 2021.01.26 |
---|---|
[Study-9주차] 예외 처리 (0) | 2021.01.12 |
[Study-7주차] 패키지 (0) | 2020.12.29 |
[Study-6주차] 상속 (0) | 2020.12.22 |
[Study-5주차] 클래스 (0) | 2020.12.13 |