News

2021년 Kotlin 기능 설문조사 결과

Read this post in other languages:

몇 달 전 JetBrains는 Kotlin에서 가장 기대하는 기능에 대한 설문조사를 두 번째로 실시했습니다. 이 조사는 향후 출시할 Kotlin 기능의 상대적 중요성 및 사용자 시나리오의 다양성에 대한 사용자의 의견을 확인하는 데 중점을 두었으며 장기적으로 언어 개발 계획의 우선순위를 설정하는 데 도움이 될 것입니다. 설문조사에 참여하고 질문에 답해주신 모든 분들께 감사드립니다!

설문조사 결과 및 가장 많은 표를 얻은 기능과 관련하여 Kotlin 프로젝트 팀장인 Roman Elizarov가 작성한 글을 아래에서 확인하실 수 있습니다. 자세한 정보는 기능 설명Roman Elizarov, Svetlana Isakova의 웨비나를 참조하시길 바랍니다. 

단, 설문조사에 모든 내용이 포함되지 않았다는 점에 유의해 주세요. 현재 개발 중인 기능은 설문조사에 포함되지 않았으며, 포함된 기능들도 여러 단계에서 개발되고 있습니다. 가장 많은 표를 얻은 기능이라도 Kotlin에 출시된다는 보장은 없습니다. 또한 사용자 투표는 장기 개발 대상의 우선순위를 정하는 데 도움이 되는 것이며, 1.6.x 버전에서 선보일 예정은 아닙니다.

설문조사에서 응답자를 대상으로 다음 3가지 요청을 드렸습니다.

  1. Kotlin에 추가되길 바라는 기능을 최대 3개까지 선택해 주세요(필수 선택).
  2. 구현을 바라지 않는 기능 하나를 알려주세요(선택 사항).
  3. Kotlin에서 해당 기능을 원치 않는 이유를 설명해 주세요(선택 사항).

또한 Kotlin 사용 기간, Kotlin 사용 목적, Kotlin으로 수행하는 소프트웨어 개발 유형에 대한 정보를 공유할 수 있는 옵션을 응답자에게 제공하여, 사용 사례의 특성을 더 명확히 이해할 수 있었습니다.

완료된 응답은 1,540개입니다. 결과를 자세히 살펴보시려면 익명 원시 데이터를 확인하세요.

가장 많은 요청을 받은 기능

다음은 가장 많은 요청을 받은 3가지 기능입니다.

  1. 다중 catch 및 공용체 타입(45%)
  2. 컬렉션 리터럴(32%)
  3. 확장 함수 및 프로퍼티의 다양한 리시버(30%)

그러나 다음 목록에서 4~9위로 선정된 기능들도 커뮤니티에서 많은 추천을 받았습니다. 한편, 하위 6개 기능은 모두 매우 적은 표를 얻었습니다. 그중 null 가능 및 기본 타입에 대한 Lateinit, I, &와 같이 오버로드 가능한 비트 연산자 등의 일부 기능은 가장 원치 않는 기능 상위 3위에 선정되기도 했습니다.

다중 catch 및 공용체 타입 기능을 구현하는 방식은 2가지 이상이므로, 가능한 2가지 구현 방식 중 선호하는 방식을 Kotlin 커뮤니티에 질문했습니다. 

  • 87%는 공용체 타입을 지지했습니다. 공용체 타입을 사용하면 전용 ParseResult 타입을 삽입하지 않고도 가능한 값 중 하나를 반환하는 함수를 선언할 수 있습니다.
  • 13%는 최신 Java API에서 예외가 남용되는 경우가 별로 없으므로(또한 오래된 Java API는 결국 대체될 것이므로), 예외에 한정된 변경 사항은 추가하지 않을 것을 제안했습니다. 또한 이러한 응답자는 Kotlin 스타일의 오류 반환 함수를 더 쉽게 작성할 수 있도록 sealed 클래스를 선언하는 간결한 열거형 구문을 더 선호합니다.

가장 원치 않는 기능

응답자들이 적극적으로 반대한 기능은 없었습니다. 40%는 목록에 포함된 기능을 구현해도 별로 상관하지 않는다고 응답했습니다. 그 외의 선택 결과는 다음과 같이 분포되며 상위 3개는 다음과 같습니다.

  • I, &와 같이 오버로드 가능한 비트 연산자 10%
  • package-private 가시성 7%
  • null 가능 및 기본 타입에 대한 Lateinit 6%

응답자 정보

응답자의 71%는 Kotlin을 2년 이상 사용한 경험이 있습니다.

85%는 프로덕션 코드에서 Kotlin을 사용합니다.

응답자들이 개발한 소프트웨어 유형도 확인할 수 있습니다.

Roman Elizarov의 결론 및 상태 업데이트

가장 많은 표를 받은 기능은 거의 모두 Kotlin 팀에서 다양한 연구 단계에 있습니다.

  • 다중 catch 및 공용체 타입(KT-13108)은 Kotlin에 추가될 수 있는 기능 중 가장 많은 표를 얻었지만, 통합하기 가장 복잡한 기능이기도 합니다. 이 기능을 구현하려면 코어 컴파일러 팀의 여러 전문가와 협업이 필요하므로, Kotlin 팀이 K2 컴파일러 프런트엔드를 프로덕션 단계로 개발하기까지 큰 개선 사항은 없을 것으로 예상됩니다. 하지만 릴리스 후에는 공용체 타입 개발을 적극적으로 추진할 예정입니다.
  • 컬렉션 리터럴(KT-43871)은 현재 공개된 로드맵에 포함되지 않았으나 최적의 설계 방식을 알아보기 위한 초기 프로토타이핑이 실제로 시작되었습니다.
  • 다양한 리시버(KT-10468)는 곧 테스트 버전으로 선보일 예정입니다. 곧 사전 릴리스 컴파일러 스위치를 통해 이용해보실 수 있습니다. 많은 관심 부탁드립니다!
  • 이름 기반 구조 분해(KT-19627)의 경우 구문에 논란의 여지가 있습니다. 따라서 Kotlin 개발자가 더 쉽게 이해할 수 있는 구문 옵션을 조사하기 위해 다양한 구문 옵션 UX 연구를 계획하고 있습니다.
  • ‘public’ 및 ‘private’ 프로퍼티 타입(KT-14663)은 새로운 K2 컴파일러 프런트엔드의 아키텍처에서 비교적 쉽게 구현할 수 있으며, 새 컴파일러에서 테스트 버전으로 지원될 예정입니다.
  • package-private 가시성(KT-29227)은 많은 요청을 받은 기능 중 하나였지만 ‘가장 원치 않는’ 기능 투표에서도 2위로 선정되었습니다. 이 기능은 다양한 설계 옵션이 있고, 그중 일부는 초보 개발자의 선택지를 늘리므로, Kotlin 학습의 부담을 가중할 수 있습니다. Kotlin 팀은 이 문제를 진지하게 고민하고 있습니다. Kotlin 가시성을 설계하는 기존 접근 방식과 마찬가지로, Kotlin 개발자의 코드베이스 구성 방법, Kotlin 철학에 부합하는 솔루션이나 디폴트 값의 유형, 편리한 시작을 지원하되 프로젝트의 복잡성이 증가해도 조정하고 사용자 지정할 수 있는 디폴트 값 등을 현재 실제 데이터에 기반하여 연구하고 있습니다.

게시물 원문 작성자

Jessie Cho

Alina Dolgikh

image description

Discover more