본문 바로가기

JAVA

객프 13주차

<인터페이스>

자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가짐.

하지만 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원.

 

하지만 다중 상속의 이점을 버릴 수는 없기에 자바에서는 인터페이스라는 것을 통해 다중 상속을 지원.

인터페이스란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미.

 

자바에서 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함.

하지만 인터페이스(interface)는 오로지 추상 메소드와 상수만을 포함.

 

<인터페이스의 선언>

자바에서 인터페이스를 선언하는 방법은 클래스를 작성하는 방법.

인터페이스를 선언할 때에는 접근 제어자와 함께 interface 키워드를 사용.

단, 클래스와는 달리 인터페이스의 모든 필드는 public static final이어야 하며, 모든 메소드는 public abstract.

이 부분은 모든 인터페이스에 공통으로 적용되는 부분이므로 이 제어자는 생략.

이렇게 생략된 제어자는 컴파일 시 자바 컴파일러가 자동으로 추가.

 

<인터페이스의 구현>

인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수X

따라서 인터페이스가 포함하고 있는 추상 메소드를 구현해 줄 클래스를 작성.

interface Animal { public abstract void cry(); }

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

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();
    }
}
인터페이스는 인터페이스로부터만 상속을 받을 수 있으며, 여러 인터페이스를 상속
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();
    }
}

 

<인터페이스의 장점>

1. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능

2. 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축

3. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능

'JAVA' 카테고리의 다른 글

다형성 - 객지설 5주차  (0) 2024.05.04
랩퍼 클래스 - 객지설 4주차  (0) 2024.05.03
객프 11주  (0) 2023.11.21
객프 10주차  (0) 2023.11.14
객프 10주차  (0) 2023.11.06