타입과 다형성을 잘 활용해야 하는 이유, 카이스트 전산학부 홍재민

구름은 한 달에 한 번 수요일에 기술, 개발, 성장, 조직 문화 등에 관한 이야기를 나누는 COMMIT 세미나를 진행하고 있습니다. COMMIT은 COMMUNICATION과 IT의 합성어로 개발자가 소스 코드를 커밋하듯 IT 업계를 이루는 분들의 역량을 COMMIT하고 있어요.

2024년 첫 번째 주제는 ‘타입과 다형성’입니다. 타입 검사(Type Checking)는 프로그램 실행 전에 문제가 없는지 컴퓨터가 자동으로 검사해 주는 편리한 기능이지만, 사용하기 까다로워 많은 분이 어려워하죠. 타입과 다형성을 잘 활용해야 하는 이유는 무엇일까요? 1월 COMMIT 발표자 홍재민 님과 나눈 이야기를 공유합니다.

🎤 홍재민 Jaemin Hong
KAIST 전산학부 석박사통합과정 재학


KAIST 전산학부 석박사통합과정 소속으로, 프로그래밍 언어 기술을 활용해 소프트웨어의 여러 문제를 해결하는 연구를 진행하고 있습니다. 요즘은 C 코드를 러스트로 자동 번역하는 것을 주로 연구하고 있어요. 학부생 시절부터 타입에 관심을 가지고 연구를 진행했고, 포트리스라는 언어의 타입에 관해 쓴 논문이 프로그래밍 언어 분야 최고의 국제 학술 대회에 채택되기도 했습니다.

안녕하세요, 재민 님! 간단하게 자기소개 부탁드립니다.

안녕하세요. 카이스트 대학원 프로그래밍 언어 연구실 소속 홍재민이라고 합니다. 코딩은 중학생 때부터 시작했고, 고등학생 때는 자바로 앱을 만들기도 했어요. 그때 다양한 타입 기능을 접하며 타입의 재미를 알게 돼 학부생 시절에는 연구실 인턴으로 타입 연구를 진행했습니다. 작년 10월에는 그동안 배운 내용을 정리해 ⟪타입으로 견고하게 다형성을 유연하게⟫를 출간했습니다. 

개발자의 길을 걷지 않고, 프로그래밍 언어를 연구하게 된 계기가 궁금해요.

프로그래밍 언어를 연구하는 코딩이 재미있었어요. 이를테면 이 코드가 어떤 성질을 갖고 있고, 어떤 동작을 하는지 분석하는 거죠. 주로 어떤 프로그램을 입력 받는 컴파일러나 인터프리터 같은 걸 만들면서요. 진로 측면에서도 개발자보다는 교수로 성장하는 데 뜻이 있어 대학원을 선택했습니다. 

‘타입’과 ‘다형성’, 두 가지 키워드를 강조하게 된 계기는 무엇인가요?

원래는 프로그래밍 언어 전반을 다룰 생각으로 출판을 준비하고 있었어요. 고민 끝에 타입으로 주제를 좁혔지만요. 첫 책은 제가 좋아하고 잘 아는 내용으로 써야 독자분들께 많은 도움을 드릴 수 있다고 생각했습니다. 워낙 타입에 관심이 많기도 했고, 공부를 많이 했기에 잘 알고 있는 분야였거든요.

현업 개발자나 개발을 공부하는 학생을 만나보면 타입을 사용하는 법을 잘 모르거나, 왜 필요한지 이해하지 못하는 경우가 많더라고요. 요즘은 프로그래밍을 시작할 때 파이썬이나 자바스크립트와 같이 타입 검사가 없는 언어를 선택하다 보니 나중에 타입 언어를 사용하려고 하면 더더욱 어려워지죠. 다형성은 타입을 이야기할 때 빼놓을 수 없는 개념이고요. 

타입과 다형성만 잘 이해해도 개발하는 데 큰 도움이 됩니다. 보다 많은 분이 타입과 다형성을 적재적소에 활용했으면 하는 바람에 책과 발표를 준비하게 되었어요.

예전에는 C나 자바 같은 정적 언어가 주류였다면 최근에는 배우고 쓰기 쉬운 파이썬이나 자바스크립트 같은 동적 언어가 인기를 얻고 있죠. 최근 프로그래밍 언어에서 타입 검사가 강화되고 있다고 하셨는데, 어떤 움직임이 있는지 궁금합니다. 

프로그래밍에 입문할 때는 타입 검사가 없는 파이썬이나 자바스크립트를 쓰는 게 맞다고 생각합니다. 그럼에도 타입 검사가 없는 언어로 큰 프로그램을 개발할 때 어려움이 생기다 보니 자바스크립트에 타입 검사를 추가한 타입스크립트 같은 언어가 만들어졌고, 많은 기업에서 타입 검사를 추가하기도 하죠. 파이썬 같은 경우도 언어 자체에 타입 검사가 있는 건 아니지만, 최근 버전에서는 서드 파티(3rd-party) 검사기를 사용할 수 있게 됐어요. 처음 개발할 때는 동적 언어가 편하지만, 규모가 큰 프로그램을 개발하다 보면 타입 검사의 필요성을 느낄 수 밖에 없습니다.

동적 언어가 주류가 되면서 서비스나 프로젝트 규모가 커질 때마다 타입때문에 다양한 문제가 생기는데요. 타입과 다형성을 이해하고 적용하면 문제를 해결할 수 있을까요?

우선 타입 검사를 하면 발생할 수 있는 오류를 미리 찾아 실수를 예방할 수 있습니다. 코드의 성질을 잘 표현하는 타입을 붙이게 되면 코드를 보다 잘 이해할 수 있고요. 다양한 장점이 있습니다. 

트위터도 동적 언어인 루비에서 정적 언어인 스칼라로 옮겼다고 들었습니다. 이런 기업 사례를 보면 타입은 분명 큰 프로젝트를 만들고 관리하는 데 도움이 된다고 생각해요. 

홍재민
🎤 홍재민
© KAIST 전산학부 석박사통합과정 재학

타입 시스템은 견고함을, 다형성은 견고한 타입 체계를 유연하게 만들죠. 타입과 다형성은 어떤 시너지를 내는 건가요? 

타입을 사용하다 보면 코드를 제대로 짰는데도, 타입 검사가 그렇게 짜면 안 된다고 태클을 거는 상황이 생깁니다. 개발할 때 편하려고 타입 검사를 쓰는 건데, 오히려 코딩에 방해가 되니 불편하죠. 이때 다형성이 타입 검사기의 태클을 줄여주는 역할을 합니다. 원하는 코드를 짜면서 타입 검사기의 방해를 받지 않도록 도와주죠.

타입이라는 개념 자체는 어떻게 체계를 잘 만들 것인가에 가깝습니다. 다만 체계가 너무 굳어지다 보면 불편하니 이를 유연하게 풀어주는 기능이 있는 거죠. 대표적인 게 다형성이고요. 

재민 님의 이야기를 듣다 보니 타입과 다형성이 많은 장점을 갖고 있는 것 같아요. 그럼에도 어렵고 까다로운 건 사실이고요. 개발자분들이 이를 극복하고 타입과 다형성을 잘 활용하려면 어떻게 하면 좋을까요? 

사람마다 배우는 방법이 다르긴 하지만, 개인적으로 코딩을 많이 해보는 게 큰 도움이 됐습니다. 저도 러스트라는 언어를 2~3년 전에 처음 쓰게 됐는데, 다른 타입 언어와 달라 배워야 하는 부분이 많았어요. 왜 에러가 나고, 왜 에러가 나지 않는지 이해하기 어려웠죠. 일단 코딩을 많이 하면서 감을 쌓으려고 노력했습니다. 일단 잘 되든 안 되든 해보면서 어느 정도 직관을 만들고 나니 공부할 때 이해가 더 잘 되더라고요. 

언어 공식 문서도 많이 참고했습니다. 타입스크립트 같은 경우도 공식 문서가 자세해 참고하기 좋았어요. 공식 문서는 언어를 만든 사람이 작성했다 보니 기능을 넣은 이유가 가장 잘 기술되어 있어요. 무엇보다 가장 정확한 정보고요. 

2024년 1월 COMMIT에서는 어떤 이야기를 들려주실 예정인가요?

타입스크립트의 다형성을 잘 사용할 수 있는 방법과 언제 어떤 다형성 기능을 사용해야 하는지에 초점을 맞추고 있어요. 타입스크립트를 사용하며 기본적인 기능은 이해했지만, 복잡한 기능은 언제 사용해야 할지 모르겠는 분에게 추천해요.

나중에 타입스크립트가 아닌 다른 언어를 사용하게 되더라도 적용할 수 있는 부분이 많으니 타입스크립트를 사용하지 않아도 타입에 관심이 있다면 들어보시면 좋겠습니다. 

더 자세한 이야기는 1월 17일 수요일 오후 7시에 열리는 COMMIT에서 들을 수 있습니다. 


Posted by
goorm

ANYONE CAN DEVELOP