인터페이스

호떡·2022년 7월 31일
0

인터페이스 구현

개발 코드가 인터페이스 메소드를 호출하면 인터페이스는 객체의 메소드를 호출한다. 객체는 인터페이스에서 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가지고 있어야 한다. 이러한 객체를 인터페이스의 구현(implement) 객체라고 하고, 구현 객체를 생성하는 클래스를 구현 클래스라고 한다.


인터페이스 타입 변수와 추상 메소드 사용

인터페이스로 구현 객체를 사용하려면 인터페이스 변수를 선언하고 구현 객체를 대입해야 한다.

👉다형성1. 부모 타입에는 모든 자식 객체가 대입 가능 (타입 변환과 다형성)

구현 클래스가 작성되면 new 연산자로 객체를 생성할 수 있다. 문제는 어떤 타입의 변수에 대입하느냐이다. 다음과 같이 MovieManagerImpl 객체를 생성하고 MovieManagerImpl 변수에 대입한다고 인터페이스를 사용하는 것이 아니다.

private MovieManagerImpl instance = n	ew MovieManagerImpl();

인터페이스로 구현 객체를 사용하려면 다음과 같이 인터페이스 변수를 선언하고 구현 객체를 대입해야 한다. 인터페이스 변수는 참조 타입이기 때문에 구현 객체가 대입될 경우 구현 객체의 번지를 저장한다. IMovieManager 인터페이스로 구현 객체인 MovieManagerImpl를 사용하려면 다음과 같이 IMovieManager 타입 변수 instance를 선언하고 구현 객체를 대입해야 한다.

private IMovieManager instance = new MovieManagerImpl();

구현 객체가 인터페이스 타입에 대입되면 인터페이스에 선언된 추상 메소드를 개발 코드에서 호출할 수 있게 된다. 개발 코드에서 IMovieManager의 변수로 add() 또는 searchByTitle() 메소드를 호출하면 구현 객체의 add() 또는 searchByTitle() 메소드가 자동 실행된다.

👉 다형성2. 부모 메소드는 숨겨지는 효과 발생, 재정의된 자식 메소드 실행 (메소드 재정의 효과)

인터페이스에도 다형성을 구현하는 기술이 사용된다. 다형성은 하나의 타입에 대입되는 객체에 따라서 실행 결과가 다양한 형태로 나오는 성질을 말한다. 부모 타입에 어떤 자식 객체를 대입하느냐에 따라 실행 결과가 달라지듯이, 인터페이스 타입에 어떤 구현 객체를 대입하느냐에 따라 실행 결과가 달라진다. 상속은 같은 종류의 하위 클래스를 만드는 기술이고, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이라는 개념적 차이점은 있지만 둘 다 다형성을 구현하는 기술임에는 틀림없다.
프로그램을 개발할 때 인터페이스를 사용해서 메소드를 호출하도록 코딩을 했다면, 구현 객체를 교체하는 것은 매우 손쉽고 빠르게 할 수 있다. 프로그램 소스 코드는 변함이 없는데, 구현 객체를 교체함으로써 프로그램의 실행 결과가 다양해진다. 이것이 인터페이스의 다형성이다. [출처: 이것이 자바다 363쪽]


타입 변환과 다형성

인터페이스는 메소드의 매개 변수로 많이 등장한다. 인터페이스 타입으로 매개 변수를 선언하면 메소드 호출 시 매개값으로 여러 가지 종류의 구현 객체를 줄 수 있기 때문에 메소드 실행 결과가 다양하게 나온다. 이것이 인터페이스 매개 변수의 다형성이다.

강제 타입 변환(Casting)과 객체 타입 확인(instanceof)

인터페이스 타입에서도 사용할 수 있다.


인터페이스의 다중 상속

인터페이스는 다중 상속이 가능하므로 추상 클래스보다 활용도가 높다. 즉 인터페이스가 인터페이스를 상속하는 것으로 인터페이스들끼리의 다중 상속이 가능한 것이다.
인터페이스는 추상 클래스와 달리 모든 단계를 추상화해버린다. 또한 인터페이스로도 다형성이 적용가능하다.

0개의 댓글