Scala

Scala trait과 Java interface에서의 변수

partner_jun 2017. 2. 24. 21:51

자바는 자바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