[Scala] trait는 언제 사용하는 것이 좋을까

smlee·2023년 8월 16일
0

Scala

목록 보기
17/37
post-thumbnail

trait는 코드 재사용의 근간이 되는 것으로, Scala의 가장 강력한 도구 중 하나이다.
그렇다면 모든 곳에 trait를 사용해도 되는것인지, 아니면 때에 따라서는 class 하나로 구현해도 되는지 알아보았다.
확고한 규칙이 있는 것은 아니지만 여러 문서나 책에 나와 있는 가이드라인을 정리하였다.

1. 어떤 행위를 재사용할지 여부

만약 어떤 행위를 재사용하지 않을 것이면 클래스로 만들어야 한다.

2. 서로 관련이 없는 클래스에서 어떤 행위를 여러 번 재사용

위와 같은 경우에는 트레이트로 작성해야 한다. 클래스 계층의 각기 다른 부분에 미스인할 수 있는 것은 트레이트 뿐이다.

3. 스칼라에서 정의한 내용을 자바 코드에서 상속해야 한다면

추상 클래스를 사용하는 편이 낫다. 자바에는 코드가 들어있는 트레이트와 유사한 개념이 없으므로 자바 클래스에서 트레이트를 상속하기 애매한 경우가 많다.
대부분의 경우 스칼라 클래스를 자바 클래스가 상속하는 것은 자바 클래스를 상속하는 것과 같다. 다만, 구현 코드 없이 추상 메서드만 들어 있는 스칼라 트레이트는 내부적으로 자바 인터페이스를 만들어낸다. 따라서 이 경우에는 트레이트를 자바 코드에서 상속해도 좋다.

4. 컴파일한 바이너리 형태로 배포할 예정

컴파일한 바이너리 형태로 배포할 예정이고, 배포한 내용을 누군가가 상속해서 사용할 것 같다면, 추상 클래스를 더 많이 사용해야 한다.
특정 트레이트에 멤버를 추가하거나 제거하면 그 트레이트를 상속하는 모든 클래스는 자기 자신의 변경 여부와 관계없이 재컴파일이 필요하다.

5. 위의 내용을 고려하고도 판단이 안 서는 경우

언제든지 이를 바꿀 수 있으며 보통 트레이트가 더 많은 가능성이 있으므로 트레이트를 권장한다.

0개의 댓글