🦁아기사자

[Java] 인터페이스

코딩하는 하마 2025. 3. 20. 00:46

 

인터페이스 정의하는 방법 

접근제어자 interface 인터페이스 이름 {
	public static final 타입 상수 이름 = 값;
    ...
    public abstract 메소드 이름 (매개변수 목록);
    ...
}

 

- 클래스와 달리 인터페이스의 모든 필드 -> public static final 이야 함

- 모든 메소드 -> public abstract 이어야 함

- 모든 인터페이스에 공통으로 적용되는 부분으로 이 제어자는 생략 가능 

 

인터페이스 구현하는 방법

class 클래스 이름 implements 인터페이스이름 {...}

만약 모든 추상 메소드를 구현하지 않는다면 abstract 키워드를 사용하여 추상 클래스로 선언해야 함 

ex)

interface Person { public abstract void say(); }

class Hong implements Person {
	public void say() {
    	System.out.println("안녕");
    }
 }
 
 class Jung implements Person {
 	public void say() {
    	System.out.println("안녕하세요");
    }
 }

 

인터페이스 래퍼런스를 통해 구현체를 사용하는 방법

인터페이스 참조 변수= new 구현클래스();

구현클래스.메소드();

 

interface Person { public abstract void say(); }

class Hong implements Person {
	public void say() {
    	System.out.println("안녕");
    }
 }
 
 class Jung implements Person {
 	public void say() {
    	System.out.println("안녕하세요");
    }
 }

public class Main {
 	public static void main(String [] args) {
    	Hong h = new Hong();
        Jung j = new Jung();
        
        h.say();
        j.say();
   }
}

 

 

 

인터페이스 상속

class 클래스이름 extends 상위 클래스 이름 implements 인터페이스이름 {...}
public interface 인터페이스명 extends 인터페이스1 , 인터페이스2 {...}

인터페이스는 인터페이스로부터만 상속을 받을 수 있으며, 여러 인터페이스를 상속 받을 수 있음

 

ex) 

interface Animal { public abstract void cry(); }
interface Pet { public abstract void play(); }

class Cat implements Animal, Pet {
    public void cry() {
        System.out.println("냐옹냐옹!");
    }

    public void play() {
        System.out.println("쥐 잡기 놀이하자~!");
    }
}

 
class Dog implements Animal, Pet {
    public void cry() {
        System.out.println("멍멍!");
    }

    public void play() {
        System.out.println("산책가자~!");
    }

}

 

public class Polymorphism04 {
    public static void main(String[] args) {
        Cat c = new Cat();
        Dog d = new Dog();

        c.cry();
        c.play();
        d.cry();
        d.play();
    }

}

 

인터페이스의 기본 메소드 (Default Method) , 자바 8

 default 메소드 -> 추상 메소드가 아니기 때문에 default 메소드가 새로 추가되어도 해당 인터페이스를 구현한 클래스 변경 필요 x 

default 반환타입 메소드명() {...}

 

인터페이스의 static 메소드 ,자바 8

static 메소드 -> 구현하는 클래스에서는 인터페이스의 static 메소드를 변경하는 것 불가능 , 인스턴스 생성 없이 '참조변수명.메소드()'를 통해 접근 가능 

static 반환타입 메소드명() {...}

 

인터페이스의 private 메소드 , 자바 9

private 메소드 -> 다른 인터페이스 , 클래스가 숨기길 원하는 메소드에 대한 접근 막을 수 있음 , 해당 메소드를 가진 인터페이스 내의 메소드들만 호출 가능 

private 반환 타입 메소드명() {...}
private static 반환타입 메소드명() {...}

'🦁아기사자' 카테고리의 다른 글

[Java] Enum  (0) 2025.03.26
[Java] 멀티스레드 프로그래밍  (0) 2025.03.25
[Java] 패키지  (0) 2025.03.19
[Java] 상속  (0) 2025.03.18
[Java] 클래스 (class)  (0) 2025.03.18