목록인터페이스 (4)
초보개발자 긍.응.성
4장 클래스, 객체, 인터페이스 💡 다루는 내용 클래스와 인터페이스 뻔하지 않은 생성자와 프로퍼티 데이터 클래스 클래스 위임 object 키워드 사용 4.1 클래스 계층 정의 코틀린 인터페이스 interface Clickable { fun click() // 일반 추상 메서드 fun showOff() = println("I'm clickable!") // 디폴트 메서드 } interface Focusable { fun setFocus(b: Boolean) = println("I ${if (b) "got" else "lost"} focus.") fun showOff() = println("I'm focusable!") } class Button: Clickable, Focusable { override f..
인터페이스의 역할 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 달리 말해, 클래스가 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에게 얘기해주는 것이다. 인터페이스는 오직 이 용도로만 사용해야 한다. 상수 인터페이스 위의 지침에 맞지 않는 예로 상수 인터페이스가 존재한다. 상수 인터페이스란 메서드 없이, 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스를 말한다. public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) static final doub..
인터페이스 설계에 주의할 점에 대하여 짚고 넘어가자 디폴트 메서드 자바 8 이전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었다. 자바 8에 와서 디폴트 메서드를 통해 기존 인터페이스에 메서드를 추가할 수 있게 되었지만, 이로써 발생할 수 있는 문제들 또한 존재한다. 디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게 되어있다. 디폴트 메서드는 구현 클래스에 대해 아무것도 모른채 무작정 '삽입'될 뿐이다. 그리고 이러한 디폴트 메서드의 삽입이 불변식을 깨트릴 수 있다. 디폴트 메서드의 추가로 생길 수 있는 문제 자바 8의 Collection 인터페이스에 removeIf 메서드와 이에 대한 디폴트 메서드가 ..
추상 클래스와 인터페이스의 차이 자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스가 존재한다. 이 둘의 가장 큰 차이점은 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 것이다. 자바는 단일 상속만을 지원하므로, 추상 클래스 방식은 새로운 타입을 정의하는데 큰 제약을 갖게 된다. 반면 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급받는다. 인터페이스의 장점 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. 인터페이스는 믹스인(mixin) 정의에 안성맞춤이다. 믹스인은 구현한 클래스에 원래의 '주된 타입' 외에도 특정한 선택적 행위를 제공한다고 선언하는 ..