자바는 자바8이 되며 default 키워드가 생겼고, 덕분에 인터페이스에도 메소드 바디 구현이 가능해졌다.
스칼라의 trait과 거의 같다고 볼 수 있게 된 것이다.
하지만 trait과 interface에는 아직 차이가 많다. 그 중 하나는 자바 인터페이스에서의 변수는 static final이라는 것이다.
interface DogImpl {
String color = "Black";
String bark();
}
class Dog implements DogImpl{
public String setColor(String newColor) {
color = newColor; // 에러
return color;
}
public String getColor() {
return color;
}
@Override
public String bark() {
return "bark! bark!";
}
}
System.out.println(DogImpl.color); // Black
하지만 스칼라에서는
trait DogTrait {
@BeanProperty
var color: String = "Black"
def bark: String = "Bark!"
}
class Dog extends DogTrait {
color = "White"
}
val dog = new Dog
dog.color = "Yellow"
println(dog.color) // Yellow
println(DogTrait.color) // 에러
이처럼 '규격'에 가까운 인터페이스보다는 클래스의 '일부분'에 가까운 사용이 가능하다.
'Scala' 카테고리의 다른 글
Scala로 만들어본 Merge Sort (0) | 2017.02.28 |
---|---|
Scala로 만들어본 Quick Sort (0) | 2017.02.28 |
Scala의 static, companion object (0) | 2017.02.24 |
Scala로 풀어본 개미수열(읽고 말하기 수열) (0) | 2017.02.15 |
Scala에서의 map/flatmap, for (0) | 2017.02.11 |