Java_15_인터페이스

OngTK·2025년 7월 21일

Java

목록 보기
15/35

1. 인터페이스


1) 정의

서로 다른 시스템이나 장치 사이에서 정보를 주고 받는 접점·경계면
인터페이스로부터 클래스가 메소드를 물려받고 이를 구현하는 행위

2) 인터페이스 예시

키보드 : 게임 시 기능 / 문서작업 시 기능 등 프로그램은 다르지만 하나의 키보드로 조작 가능
리모콘 : 서로 다른 모델/제조사의 TV를 하나의 리모콘으로 조작 가능
키오스크 : 식당/편의점/병원 등 사용처는 다르지만 동일한 기계로 사용은 가능

3) 목적

서로 다른 장치 사이에, 동일한 목적을 달성하기 위해, 서로 다른 기능을 작동하게 하는 것 (호환성)

4) 특징

  • 객채 간의 교환성(호환성)을 높이고, 다형성을 구현
  • 서로 다른 클래스들 사이에 중간 매개체 역할
  • 인터페이스는 상수와 추상메소드를 갖음
  • 구현클래스/타입에서 인터페이스 타입으로 변환 가능

5) 선언

(1) 선언할 패키지 우클릭 > new > java class > Interface
(2) 첫글자를 대문자로 하여 Interface 파일 생성

6) 인터페이스 타입의 멤버

※ 멤버변수, 생성자, 메소드 사용 불가능!!
(1) 상수

  • 반드시 초기값이 필요
  • 상수이므로 public static final 키워드가 필요하나 자동으로 포함되므로 생략 가능

(2) 추상메소드

  • 실행문{}이 없는 메소드
  • abstract 키워드가 필요하나 자동으로 포함되므로 생략 가능
  • 추상메소드의 실행문은 implements·구현 class 에서 작성

(3) 확인 방법

  • 객체 instanceof 타입 >> boolean으로 결과 반환

7) 구현 객체 (추상메소드 구현을 위한 class)

class 구현클래스 implements 인터페이스1, 인터페이스2{ }

8) 익명 구현체

  • 이름이 없는 구현체
  • Class 없이 객체 만들기
  • 타입 변수 = new 인터페이스(){}; // 객체 선언과 동시에 구현부를 작성
  • 저장이 필요없는·간단한·일회성 인터페이스 생성시 사용

2. 예시


[문제 1] 기본 인터페이스와 구현

1) "소리를 냅니다."라는 추상 메소드 makeSound()를 가진 Soundable 인터페이스를 정의하세요.
2) Soundable 인터페이스를 구현(implements)하는 Cat 클래스와 Dog 클래스를 만드세요.
3) 각 클래스에서 makeSound() 메소드를 오버라이딩하여, 각각 "야옹", "멍멍"을 출력하도록 구현하세요.
4) main 함수에서 Cat 객체와 Dog 객체를 생성하고, 각 객체의 makeSound() 메소드를 호출하여 결과를 확인하세요.

// 인터페이스 선언
interface Soundable {			
    void makeSound();		//실행문이 없는 추상메소드 makeSound()선언
}

// Soundable 인터페이스 구현을 위한 Cat class
class Cat implements Soundable {
    public void makeSound() {			//makeSound() 메소드 구현 
        System.out.println("야옹");
    }
}

// Soundable 인터페이스 구현을 위한 Dog class
class Dog implements Soundable {		
    public void makeSound() {			//makeSound() 메소드 overriding
        System.out.println("멍멍");
    }
}

public class Practice {
    public static void main(String[] args) {

        Cat cat = new Cat();
        Dog dog = new Dog();
        cat.makeSound();			// 출력 : 야옹
        dog.makeSound();			// 출력 : 멍멍

    }
}

[문제 2] 인터페이스 상수

1) RemoteControl 인터페이스를 만드세요.
2) 이 인터페이스 안에, public static final로 최대 볼륨 MAX_VOLUME = 10과 최소 볼륨 MIN_VOLUME = 0 상수를 정의하세요.
3) main 함수에서 객체를 생성하지 않고, RemoteControl.MAX_VOLUME과 같이 인터페이스 이름으로 직접 접근하여 두 상수를 출력하세요.

// RemoteControl 인터페이스 선언
interface RemoteControl {
    // 멤버변수
    // interface의 멤버변수는 `public static final`이 자동이므로 생략 가능
    int MAX_VOLUME = 10;
    int MIN_VOLUME = 0;
}

public class Practice {
    public static void main(String[] args) {
        System.out.println(RemoteControl.MAX_VOLUME);		// 출력 : 10 
        System.out.println(RemoteControl.MIN_VOLUME);		// 출력 : 0
        
        // RemotoeControl은 [인터페이스이]므로 
        // `RemotoeControl 변수 = new RemotoeControl()`와 같이 인스턴스 불가!!
        // `타입.메소드();`와 같이 바로 메소드 실행은 가능!!
    }
}

[문제 3] 다중 인터페이스 구현

1) "하늘을 납니다."를 출력하는 fly() 추상 메소드를 가진 Flyable 인터페이스를 만드세요.
2) "물에서 헤엄칩니다."를 출력하는 swimmable() 추상 메소드를 가진 Swimmable 인터페이스를 만드세요.
3) Duck 클래스가 Flyable과 Swimmable 두 인터페이스를 모두 구현하도록 작성하세요.
4) main 함수에서 Duck 객체를 생성하고, fly()와 swimmable() 메소드를 모두 호출하여 결과를 확인하세요.

// Flyable 인터페이스 선언
interface Flyable {
	// fly() 추상 메소드 선언
    void fly();
}

// Swimmalbe 인터페이스 선언
interface Swimmalbe {
    void swimmable();
}

// 상기의 두 인터페이스를 구현하는 Duck class
class Duck implements Flyable, Swimmalbe {
	// Flyable 인터페이스의 fly() 메소드를 overriding
    public void fly() {
        System.out.println("하늘을 납니다.");
    }
    
    // Swimmalbe 인터페이스의 swimmable() 메소드를 overriding
    public void swimmable() {
        System.out.println("물에서 헤엄칩니다.");
    }
}


public class Practice {
    public static void main(String[] args) {
        Duck duck = new Duck();
        duck.fly();
        duck.swimmable();
    }
}

[문제 4] 익명 구현 객체

1) "환영합니다."를 출력하는 welcome() 추상 메소드를 가진 Greeting 인터페이스를 만드세요.
2) main 함수에서, 별도의 클래스 파일을 만들지 않고, Greeting 인터페이스 타입의 변수를 선언하면서 익명 구현 객체를 생성하여 welcome() 메소드를 즉석에서 구현하고 호출하세요.
예] Greeting g = new Greeting() { ... };

interface Greeting{
    void welcome();
}
public class Practice {
    public static void main(String[] args) {

        Greeting greeting = new Greeting() {
            public void welcome() {
                System.out.println("환영합니다.");
            }
        };
        greeting.welcome();
    }
}

3. 상속 vs 구현


상속VS구현(인터페이스)
키워드extendsImplements
객체생성OX
상위하나의 상위클래스다수의 인터페이스
메소드선택적 오버라이딩필수적 오버라이딩
멤버멤버변수, 생성자, 메소드상수, 추상메소드
profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글