[Android] 코틀린의 Interface 와 자바의 Interface차이
인터페이스(Interface)는 객체지향 프로그래밍에서 다양한 클래스가 공통적으로 가지는 메소드의 집합을 정의하는 추상회된 형식이다. 또한 다중 상속을 지원하기위한 메커니즘중 하나로 사용된다.
1 자바에서의 인터페이스 정의
javaCopy code
// ExampleInterface.java
public interface ExampleInterface {
void doSomething(); // 추상 메소드
int calculate(int x, int y); // 추상 메소드
}
위의 예제에서
ExampleInterface
는 두 개의 추상 메소드를 정의하고 있다.
1) 인터페이스를 구현하는 클래스
javaCopy code
// ExampleClass.java
public class ExampleClass implements ExampleInterface {
@Override
public void doSomething() {
System.out.println("Doing something!");
}
@Override
public int calculate(int x, int y) {
return x + y;
}
}
ExampleClass
는ExampleInterface
인터페이스를 구현하고 있다.
- 클래스에서는 반드시 인터페이스에 정의된 모든 메소드를 구현해야 한다.
- 여기서
@Override
어노테이션은 해당 메소드가 상위 클래스나 인터페이스에서 상속받은 것임을 나타낸다.
2) 인터페이스 활용
javaCopy code
// MainClass.java
public class MainClass {
public static void main(String[] args) {
ExampleClass example = new ExampleClass();
example.doSomething();
int result = example.calculate(3, 5);
System.out.println("Result: " + result);
}
}
MainClass
에서는ExampleClass
를 생성하고, 인터페이스에 정의된 메소드를 호출하는 예제이다.
인터페이스를 사용함으로써 다형성을 구현할 수 있다.
여러 클래스가 동일한 인터페이스를 구현하면, 해당 인터페이스를 사용하는 코드에서는 어떤 구현체를 사용하더라도 통일된 방식으로 메소드를 호출할 수 있다.
2 코틀린과 자바의 Interface차이
1) 자바에서의 인터페이스
a. 추상 메소드와 디폴트 메소드
추상 메소드 (Abstract Method): 자바 인터페이스에서는 기본적으로 모든 메소드가 추상 메소드이다. 구현이 없이 메소드 시그니처만을 가지고 있다.
// 자바 인터페이스 예제 public interface ExampleInterface { void abstractMethod(); // 추상 메소드 }
디폴트 메소드 (Default Method): Java 8부터 도입된 디폴트 메소드는 인터페이스에 메소드의 기본 구현을 제공할 수 있게 해준다. 구현체에서 이를 그대로 사용하거나 재정의할 수 있다.
// 자바 인터페이스에 디폴트 메소드 추가 public interface ExampleInterface { void abstractMethod(); // 추상 메소드 default void defaultMethod() { System.out.println("Default implementation"); } }
2) 코틀린에서의 인터페이스
a. 추상 메소드와 디폴트 구현
추상 메소드 (Abstract Method): 코틀린에서도 인터페이스는 추상 메소드를 가질 수 있다. 하지만 인터페이스의 메소드는 항상 기본적으로 추상적이며, 명시적으로
abstract
키워드를 사용하지 않는다.// 코틀린 인터페이스 예제 interface ExampleInterface { fun abstractMethod() // 추상 메소드 }
디폴트 구현 (Default Implementation): 코틀린에서는 디폴트 구현이나 상태를 가진 메소드를 인터페이스에서 직접 정의할 수 있습니다.
// 코틀린 인터페이스에 디폴트 구현 추가 interface ExampleInterface { fun abstractMethod() // 추상 메소드 fun defaultMethod() { println("Default implementation") } }
b. 속성 (Properties)
속성 (Properties): 코틀린에서는 인터페이스에서 추상적인 프로퍼티(속성)을 정의할 수 있다. 이는 자바에서의 인터페이스에서는 불가능하다.
// 코틀린 인터페이스에 프로퍼티 추가 interface ExampleInterface { val property: Int // 추상 프로퍼티 }
이렇게 자바와 코틀린에서의 인터페이스는 몇 가지 차이점이 있다.
코틀린은 보다 간결하고 더 많은 기능을 지원하는 특성이 있으며, 특히 디폴트 메소드와 프로퍼티 등을 인터페이스에서 지원하는 것이 자바보다 다양한 활용을 가능케 한다.