제거됨: 클래스 섀도잉

제거됨: 클래스 섀도잉 (Dropped: Class Shadowing)

Scala 2에서는 클래스가 같은 이름의 내부 클래스를 다시 정의(섀도잉)하는 패턴이 허용됐어요. Scala 3는 이것을 거부해요. 왜 거부하는지, 그리고 어떤 에러가 나는지 살펴볼게요.

출처: Scala 3 Reference

본문

Scala 2는 지금까지 이런 패턴을 허용했어요.

class Base {
  class Ops { ... }
}

class Sub extends Base {
  class Ops { ... }
}

Scala 3은 다음 에러 메시지와 함께 이것을 거부해요.

6 |      class Ops {  }
  |            ^
  |class Ops cannot have the same name as class Ops in class Base
  | -- class definitions cannot be overridden

문제는 두 Ops 클래스가 서로를 오버라이드하는 것처럼 보이는데, Scala 2에서는 클래스를 오버라이드할 수 없다는 거예요. 사물을 깔끔하게(그리고 내부 연산을 일관되게) 유지하기 위해, Scala 3 컴파일러는 이름이 서로 다르도록 내부 클래스의 이름을 바꾸도록 강제해요.

더 알아보기 (Learn more)