인프런 커뮤니티 질문&답변

kamser님의 프로필 이미지

작성한 질문수

예제로 뿌수는 코틀린 Kotlin 76제

클래스 상속 | 클래스 상속으로 기능 확장

코틀린은 왜 final이 기본으로 선택한건가요?

해결된 질문

23.10.12 18:49 작성

·

352

1

타입을 추론하면 final이 기본으로 붙고

상속도 기본으로 final이 붙어서 안되고

오버라이딩도 final이 기본으로 붙어서

설정을 해줘야합니다.

열려있는 자바와는 다르게 코틀린은 기본적으로 닫혀있다는걸 느꼈습니다.

이렇게 코틀린이 오버라이딩과 상속, 재할당금지를 선택하게하는 이유가 뭔지 궁금합니다

답변 1

2

김대현님의 프로필 이미지
김대현
지식공유자

2023. 10. 13. 09:47

정확한 것은 코틀린 언어 설계자들이 답변할 수 있겠습니다. 부정확할 수 있지만, 아는대로 답변드립니다.

코세라에 있는 코틀린 강의를 보면, 코틀린 설계자의 철학을 잠깐 언급해주는데요, 코틀린 언어의 타깃 사용자는 라이브러리나 프레임워크 개발자가 아닌 "일반 응용프로그래머"입니다. 범용적으로 사용되는 라이브러리 같은 경우에는 확장성을 주요 목표로 가져가서 상속에 열려있어야 하는 걸 기본으로 선택할 수 있겠습니다만, 일반 응용프로그래머 입장에서는 닫혀있는 게 낫겠습니다.

꼭 확장을 해야하는 부모 클래스의 경우에만 명시적으로 open을 선언하는 게 더 나은 선택일 수 있다고 생각해요.

또, 변수의 경우에도, 이제 불변 데이터의 장점을 강조하는 분위기이니, final이 기본인 게 좋은 디자인이라고 봅니다. 자바스크립트로 예로 들면, let과 const의 차이가 있는 건데, const를 주로 활용하는 것이, 문맥 중간에 값이 바뀔 수 있는 let보다 더 명쾌하다고 볼 수도 있고요.

러스트같은 경우에도, 그냥 let으로 변수를 선언하면 기본은 final이라서 값을 바꿀 수 없고, let mut이라고 mut이라는 키워드를 추가로 붙여줘야 값을 바꿀 수 있습니다.

어느 쪽이든 디폴트를 뭘로 가져가냐의 차이인데, 디폴트는 "권장"할만한 안전한 것을 기본으로 가져가고, 필요에 따라 "위험"한 선택을 하는 경우에는 불편을 주는 것이 나은 디자인이 되겠습니다. 애써 불편을 감수할 만큼 꼭 필요한 경우에만 쓰라는 거죠.

자바 같은 경우는 워낙 오래된 언어라, 요즈음의 선택과는 조금 다른 편인 것 뿐입니다. 이제와서 자바의 디폴트를 바꿀 수도 없고요.

 

kamser님의 프로필 이미지
kamser
질문자

2023. 10. 13. 17:53

답변 감사합니다 !

kamser님의 프로필 이미지

작성한 질문수

질문하기