제거됨: 클래스 섀도잉
제거됨: 클래스 섀도잉 (Dropped: Class Shadowing)
Scala 2에서는 클래스가 같은 이름의 내부 클래스를 다시 정의(섀도잉)하는 패턴이 허용됐어요. Scala 3는 이것을 거부해요. 왜 거부하는지, 그리고 어떤 에러가 나는지 살펴볼게요.
본문
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 컴파일러는 이름이 서로 다르도록 내부 클래스의 이름을 바꾸도록 강제해요.