12. 인터페이스

12-1. 추상 클래스

클래스 이름 앞에 abstract를 붙인다

  • 객체 생성 불가!
  • 몸체 없는 메소드! ( = 추상 메소드 )
abstract class Vehicle
{
    //....
    
    // abstract 클래스의 메소드에는 "몸체 X"
    abstract void show();
}


추상 클래스 사용하기

그럼 왜 필요?

추상 클래스를 *상속받아서 서브클래스 생성 하기 위해! ( via extends )

“반드시 추상 메소드의 몸체를, 서브 클래스에서 오버라이딩해서 구현해야”

abstract class Vehicle
{
    //....
    
    // 추상 메소드 show()
    abstract void show();
}
class Car extends Vehicle
{
    //....
    
    public void show()
    {
        // 몸체 만들어야!
        System.out.println("차량 번호는"+num)
        System.out.println("연료 양은"+gas)
        System.out.println("속도는"+speed)
    }
}

class Plane extends Vehicle
{
    // 마찬가지로 show()메소드 오버라이딩
}


요약

  • 추상 클래스로 객체 생성은 불가
  • 클래스의 변수나 뱅열에, 서브 클래스의 객체를 담을순 O
  • 반드시 하위 클래스에서 오버라이딩 해야!
  • 장점 : 서브클래스들의 관리 용이


instanceof 연산자

많은 양의 서브클래스를 다뤄야할 경우, 편리!

  • “객체의 클래스”를 알아낼 수 있음
class Sample2
{
    public static void main(String[] args)
    {
        Vehicle[] vc;
        vc = new Vehicle[2];
        
        vc[0] = new Car(1234,20.5);
        vc[1] = new Plane(232);
        for(int i=0; i<vc.length; i++){
            // instanceof 사용통해 TRUE/FALSE 반환
            if(vc[i] instanceof Car)
                System.out.println((i+1)+"번째 객체는 자동차");
            else
                System.out.println((i+1)+"번째 객체는 자동차 아님");
        }
    }
}


12-2. 인터페이스

추상 클래스와 비슷한 역할을 하는 인터페이스(interface)

( 객체 생성 불가 ( new 등을 사용하여 ) )

인터페이스의 선언 ex)

interface iVehicle
{
    // 추상 메소드
    void show();
}
  • 필드 O
  • 메소드 O
  • 생성자 X


인터페이스의 멤버

  • 인터페이스의 멤버에는 어떠한 제한자도 X

    ( but,필드 앞에는 “public static final”, 메소드 앞에는 “abstract”를 붙인 것과 마찬가지1 )

    • 인터페이스의 필드 = 상수
    • 인터페이스의 메소드 = 추상 메소드
  • 즉, 필드 변경 불가 & 메소드에 몸체 생성 불가


인터페이스 구현하기

인터페이스는 클래스와 조합해서 사용해야! = called “인터페이스를 구현”

class Car implements iVehicle
{
    //...
}
  • Car class는 iVehicle이 가지고 있는 필드(상수)메소드 이름을 물려받음

  • Car class의 객체를 생성하기 위해서는…

    인터페이스의 메소드를 모두 정의해줘야!


12-3. 클래스 계층

다중 상속의 원리 이해하기

다수의 클래스/인스턴스를 조합해야 하는 상황…..

두 개 이상의 클래스 상속은 불가능!

BUT, 인터페이스를 사용하면, 다중 상속 메커니즘 일부 구현 가능!


2개 이상의 인터페이스 구현

interface iVehicle
{
    void vShow();
}

interface iMaterial
{
    void mShow();
}

class Car implements iVehicle, iMaterial
{
    public void vShow()
    {
        // 구현해야
    }
    
    public void mShow()
    {
        // 구현해야
    }
}


인터페이스 확장하기

서브 인터페이스 & 슈퍼 인터페이스 ( extends 사용하기 )

헷갈리지 말기!

  • extends : 인터페이스 확장할 때
  • implements : 인터페이스를 클래스로 구현할 때
interface iVehicle extends iMovable
{
    ...
}

class Car implements iVehicle
{
    ...
}


클래스의 계층 구조 설계하기

추상 클래스 & 인터페이스를 사용하면, 많은 클래스를 한번에 제어가능하다!

( 주로 대규모 프로그램 작성 시 사용됨 )


요약

추상 클래스

  • 객체 생성 불가
  • 추상 메소드 = 몸체 없는 메소드

인터페이스

  • 선언해서 클래스로 구현 가능
  • 필드 = 상수
  • 메소드 = 추상 메소드
  • 서브 인터페이스 선언 가능

Tags:

Categories:

Updated: