솔직히 Scala 3에서 implicit을 남긴 건 맞는 결정이었어. 근데 그래도 매주 짜증 나.
맞는 결정인 이유는 첫날부터 코드베이스를 다시 쓸 필요가 없었다는 거야. 옛 방식 implicit은 그대로 컴파일되고, Scala 3는 2.13용으로 빌드된 라이브러리를 쓸 수 있고, given과 using으로는 파일 하나씩 옮기면 돼.
짜증 나는 이유는 반쯤 옮긴 파일이 제일 읽기 힘든 Scala라는 거야. 인스턴스 하나는 implicit val에서, 다음 건 given에서 오니까 값이 어디서 왔는지 찾으려면 규칙 두 벌을 다 머리에 넣고 있어야 해. 새 규칙만 놓고 보면 더 나아. import foo.* 같은 와일드카드 import는 이제 given을 안 끌어와서 import foo.given이라고 써야 하고, 그러면 import가 뭘 가져오는지 스스로 말해. 암묵적 변환은 이제 Conversion을 거치고, scala.language.implicitConversions를 import 안 하고 쓰면 기능 경고가 떠.
그러니까 호환성이 이긴 건 맞아. 대가는 읽는 사람이 머릿속 모델 두 개를 오래 들고 다녀야 한다는 거고, 옛 방식을 없앨 날짜는 아직 못 봤어.