[Java] 인터페이스 - 타입 변환

Bam·2024년 3월 5일
0

Java

목록 보기
42/98
post-thumbnail

인터페이스 타입 변환

인터페이스에서도 타입 변환이 이루어질 수 있습니다. 다만 인터페이스끼리 타입 변환이 이루어지는 것이 아닌 인터페이스와 구현 클래스 사이에서 타입 변환이 발생합니다.

이때 인터페이스 변수에 구현 객체를 넣으면 자동 타입 변환이 이루어지지만, 반대로 구현 객체 타입에 인터페이스 변수를 넣고자 한다면 강제 타입 변환을 사용해야 합니다.


자동 타입 변환

먼저, 인터페이스 변수에 구현 객체 타입을 대입할 때 발생하는 자동 타입 변환부터 알아보겠습니다.

다음과 같은 인터페이스를 하나 작성하고 해당 인터페이스 타입으로 변수를 하나 만들어줍니다.

public interface Fruit {}

그리고 이 Fruit 인터페이스를 구현한 구현 클래스 FruitImpl을 만들어줍니다.

public class FruitImpl implements Fruit{}

그리고 instanceof 연산자를 이용해서 FruitImpl 구현 객체 fruitFruit 타입인지를 확인하면 true라는 결과가 나타납니다.

public class Main {
    public static void main(String[] args) {
        Fruit fruit = new FruitImpl();

        System.out.println(fruit instanceof Fruit);
    }
}

이런 결과가 나온 이유는 구현 클래스 FruitImpl이 인터페이스 Fruit를 구현했기 때문에 FruitImpl에는 Fruit가 포함되어 있다고 할 수 있기 때문입니다.

이렇게 자동 변환된 객체는 인터페이스에 선언된 메소드들만 사용할 수 있다는 것을 주의해야합니다.

이 구현객체 FruitImpl의 자손들 또한 Fruit 인터페이스 타입이 포함되어 있습니다.


강제 타입 변환

인터페이스 타입을 구현 클래스로 변환시키고자 할 때는 강제 타입 변환을 사용합니다. 여느때와 마찬가지로 캐스팅 연산자(타입)을 이용해서 강제 타입 변환을 수행합니다.

public class Main {
    public static void main(String[] args) {
        Fruit fruit = new FruitImpl();
        
        FruitImpl fruitImpl = (FruitImpl) fruit;
    }
}

위에서 자동 변환된 객체는 인터페이스에 선언된 메소드만 사용할 수 있다고 했었는데요. 자동 변환된 객체에서 원래 객체의 메소드를 전부 사용하고 싶다면 이렇게 강제 타입 변환을 이용해서 다시 타입을 변환해주어야합니다.

0개의 댓글