코틀린은 왜 final이 기본으로 선택한건가요?
타입을 추론하면 final이 기본으로 붙고
상속도 기본으로 final이 붙어서 안되고
오버라이딩도 final이 기본으로 붙어서
설정을 해줘야합니다.
열려있는 자바와는 다르게 코틀린은 기본적으로 닫혀있다는걸 느꼈습니다.
이렇게 코틀린이 오버라이딩과 상속, 재할당금지를 선택하게하는 이유가 뭔지 궁금합니다
답변 1
2
정확한 것은 코틀린 언어 설계자들이 답변할 수 있겠습니다. 부정확할 수 있지만, 아는대로 답변드립니다.
코세라에 있는 코틀린 강의를 보면, 코틀린 설계자의 철학을 잠깐 언급해주는데요, 코틀린 언어의 타깃 사용자는 라이브러리나 프레임워크 개발자가 아닌 "일반 응용프로그래머"입니다. 범용적으로 사용되는 라이브러리 같은 경우에는 확장성을 주요 목표로 가져가서 상속에 열려있어야 하는 걸 기본으로 선택할 수 있겠습니다만, 일반 응용프로그래머 입장에서는 닫혀있는 게 낫겠습니다.
꼭 확장을 해야하는 부모 클래스의 경우에만 명시적으로 open을 선언하는 게 더 나은 선택일 수 있다고 생각해요.
또, 변수의 경우에도, 이제 불변 데이터의 장점을 강조하는 분위기이니, final이 기본인 게 좋은 디자인이라고 봅니다. 자바스크립트로 예로 들면, let과 const의 차이가 있는 건데, const를 주로 활용하는 것이, 문맥 중간에 값이 바뀔 수 있는 let보다 더 명쾌하다고 볼 수도 있고요.
러스트같은 경우에도, 그냥 let으로 변수를 선언하면 기본은 final이라서 값을 바꿀 수 없고, let mut이라고 mut이라는 키워드를 추가로 붙여줘야 값을 바꿀 수 있습니다.
어느 쪽이든 디폴트를 뭘로 가져가냐의 차이인데, 디폴트는 "권장"할만한 안전한 것을 기본으로 가져가고, 필요에 따라 "위험"한 선택을 하는 경우에는 불편을 주는 것이 나은 디자인이 되겠습니다. 애써 불편을 감수할 만큼 꼭 필요한 경우에만 쓰라는 거죠.
자바 같은 경우는 워낙 오래된 언어라, 요즈음의 선택과는 조금 다른 편인 것 뿐입니다. 이제와서 자바의 디폴트를 바꿀 수도 없고요.
3강 질문
0
12
1
강의 듣는 중인데,
0
23
1
36강 오탈자가 있는 거 같습니다.
0
18
2
Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문
0
14
1
2강 nodejs 3단계 설명 질문
0
31
1
Sequence 관련 질문
1
29
2
Image Only Query
1
29
2
라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항
0
35
2
DDD 는 마이바티스와 잘 맞지 않는건가요?
0
46
1
스프링부트 버전 문의드립니다.
0
38
1
6강에 비디오가 이상해요
0
25
1
Json 요청 처리
1
33
2
진입 여부 판단 기준 질문
0
71
3
피그마 first draft 기능 질문
0
45
3
gRPC 실무에서 질문
0
35
2
upup 질문
0
55
2
data.ai 필터링 검색이 안됩니다!
0
45
1
다양한 관점의 코드 경험을 위해 개선하지 않은 코드
1
47
1
앱 리텐션에 대한 질문
0
48
2
[건의][6장][작전1] deprecated 메소드
1
48
2
[예제][3장][작전2] windows 에서 마지막 예제
0
38
1
Null 안정성 관련 질문
0
43
1
중위함수, to/onto
1
377
1
맵 Map, 변환 map 강의가 동일합니다. 확인부탁드립니다.
2
396
1





