코틀린은 왜 final이 기본으로 선택한건가요?
타입을 추론하면 final이 기본으로 붙고
상속도 기본으로 final이 붙어서 안되고
오버라이딩도 final이 기본으로 붙어서
설정을 해줘야합니다.
열려있는 자바와는 다르게 코틀린은 기본적으로 닫혀있다는걸 느꼈습니다.
이렇게 코틀린이 오버라이딩과 상속, 재할당금지를 선택하게하는 이유가 뭔지 궁금합니다
回答 1
2
정확한 것은 코틀린 언어 설계자들이 답변할 수 있겠습니다. 부정확할 수 있지만, 아는대로 답변드립니다.
코세라에 있는 코틀린 강의를 보면, 코틀린 설계자의 철학을 잠깐 언급해주는데요, 코틀린 언어의 타깃 사용자는 라이브러리나 프레임워크 개발자가 아닌 "일반 응용프로그래머"입니다. 범용적으로 사용되는 라이브러리 같은 경우에는 확장성을 주요 목표로 가져가서 상속에 열려있어야 하는 걸 기본으로 선택할 수 있겠습니다만, 일반 응용프로그래머 입장에서는 닫혀있는 게 낫겠습니다.
꼭 확장을 해야하는 부모 클래스의 경우에만 명시적으로 open을 선언하는 게 더 나은 선택일 수 있다고 생각해요.
또, 변수의 경우에도, 이제 불변 데이터의 장점을 강조하는 분위기이니, final이 기본인 게 좋은 디자인이라고 봅니다. 자바스크립트로 예로 들면, let과 const의 차이가 있는 건데, const를 주로 활용하는 것이, 문맥 중간에 값이 바뀔 수 있는 let보다 더 명쾌하다고 볼 수도 있고요.
러스트같은 경우에도, 그냥 let으로 변수를 선언하면 기본은 final이라서 값을 바꿀 수 없고, let mut이라고 mut이라는 키워드를 추가로 붙여줘야 값을 바꿀 수 있습니다.
어느 쪽이든 디폴트를 뭘로 가져가냐의 차이인데, 디폴트는 "권장"할만한 안전한 것을 기본으로 가져가고, 필요에 따라 "위험"한 선택을 하는 경우에는 불편을 주는 것이 나은 디자인이 되겠습니다. 애써 불편을 감수할 만큼 꼭 필요한 경우에만 쓰라는 거죠.
자바 같은 경우는 워낙 오래된 언어라, 요즈음의 선택과는 조금 다른 편인 것 뿐입니다. 이제와서 자바의 디폴트를 바꿀 수도 없고요.
kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.
1
46
1
domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다
1
32
1
장치 의존성과 CSR
0
30
1
혹시 강의 내용하면서 실습했던 것을 개인 깃에다 올려도 될까요?
0
19
1
안드로이드 조직 계정 수익 인증 관련
0
32
2
아무도 모르게 책 내시면 모르실 줄 알고!!
1
43
2
Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면
1
60
1
스크립트에 대해 질문 있습니다.
1
54
1
같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!
2
61
1
nestjs 강의는 없나요??
1
40
2
11장 미션에 이메일 남기는걸 누락했어요.
0
40
1
PlatformTransactionManager, ResourcelessTransactionManager 질문
1
59
2
시퀀스다이어그램은 무슨툴로 그리신건가요?
0
39
2
AdMob 계정 승인이 1개월 이상 지연되고 있습니다. 앱 검토와 순서가 어떻게 되는 건가요
0
87
2
6번 문제 질문입니다.
0
78
2
구글 플레이 API 업데이트 관련 문의
0
67
2
SQS 노션 자료 내용
0
80
2
6장 ORM 에 관하여 질문
0
53
1
예전 로드맵과 현재 강의 순서
0
43
1
인덱스 강의 혹은 해당 강의 전 듣어야 하는 사전강의 문의
0
56
2
강의 목표
0
51
1
Null 안정성 관련 질문
0
62
1
중위함수, to/onto
1
400
1
맵 Map, 변환 map 강의가 동일합니다. 확인부탁드립니다.
2
417
1

