diff --git a/2025/RobustWithTypeFlexibleWithPolymorphism/taehyoung/Chapter1.md b/2025/RobustWithTypeFlexibleWithPolymorphism/taehyoung/Chapter1.md new file mode 100644 index 00000000..2d7416da --- /dev/null +++ b/2025/RobustWithTypeFlexibleWithPolymorphism/taehyoung/Chapter1.md @@ -0,0 +1,44 @@ +1장 타입 검사 훑어 보기 + +# 논의 내용 + +1. 동적 타입 언어와 정적 타입 언어를 사용해본 경험이 있다면, 어떤 장단점이 있었는지 얘기해보아요 +2. 정적 타입 언어를 현업에서 사용한다면, 타입 추론을 어떻게 활용하고 있는지, 어떻게 생각하는지 얘기해보아요 +3. 책 내용(57page) 중에, `널을 자유롭게 사용하고 싶다면 코틀린 대신 자바를 선택하는 게 나을 수 있다` 라는 말에 공감하면서 읽었는지 그렇지 않았는지 궁금하네요 + +# 키워드 + +1. 타입 검사기(type checker) + - 프로그램이 타입 오류를 일으키는지 자동으로 판단해주는 프로그램 +2. 타입 안전성(type safety) + - 타입 검사기를 통과 했다면, 프로그램을 타입 오류 없이 안전하게 실행할 수 있음 + - 타입 안전성이 높은 언어에서는 타입과 관련된 버그를 조기에 발견할 수 있어서, 런타임 오류를 줄일 수 있다 +3. 정적 타입 언어(statically typed language) + - 프로그램 실행 전에 타입이 올바르게 사용되었는지 확인하는 언어 +4. 동적 타입 언어(dynamically typed language) + - 프로그램 실행 중에 타입이 올바르게 사용되었는지 확인하는 언어 +5. 타입 추론 + - 타입 표시가 있을 때도 검사를 통과할 프로그램에 한해서 타입 표시를 생략하게 해준다 + +# 내 생각 + +1. 저는 동적 타입 언어로는 파이썬 2버젼, 정적 타입 언어로는 자바, 정적 타입 언어는 아니지만, type hint를 사용할 수 있는 파이썬 3버전 with mypy(타입 체커)를 사용해보았습니다. 개인적으로 파이썬 2버전을 사용할 때는 동적 타입이 불편하다는 것에 대해서는 별로 느끼지 못했고, 타입 체크를 런타임에서밖에 못 한다는 단점보다도 빠르게 개발할 수 있고, 코드도 간결하게 작성할 수 있는 장점이 더 와닿았던 것 같습니다. + +그런데, type hint를 사용할 수 있는 파이썬 3버전과 mypy라는 타입 체커를 같이 사용하면서, 180도 바뀌게 되었는데, 이전과 비교해서 런타임 이전에 미리 타입을 체크하고 버그가 날 수 있는 부분을 체크한다는 장점이 너무 좋았고(이로 인해서 확실히 버그가 줄었습니다), type hint로 필요한 곳에 타입을 optional하게 적을 수 있게 됨으로써 오히려 코드 가독성이 좋아지는 경험을 해보았습니다. + +자바의 경우는 정적 타입 언어로 책에서 말한 정적 타입 언어의 장점에 대부분 동의하지만, 빌드 타임에 null pointer exception을 타입 체크로 판단하지 못한다는 것과 타입 네이밍이 길어질 경우 코드가 장황해지는 부분은 좀 아쉽다고 느껴졌습니다. + +2. 파이썬3 with mypy의 경우, 기본적으로 타입 추론을 한다고 전제하고, 명시적으로 타입을 기입하는 게 가독성에 더 도움이 된다고 판단될 때, 타입을 추가합니다. 물론 함수의 input 인자 값과 output인 return 값 등에는 필수적으로 타입을 추가하는 게 사실상 관례입니다. 그러다 보니 타입 추론에 대해서 거부감이 없는 편인데, 제 주변 피셜 기존부터 정적 타이핑 언어를 사용한 개발자분들의 경우는 타입 추론에 대해서 좋은 기능이라고 생각하기보다는 굳이 쓸 필요 없는 기능으로 보시고, 타입을 명시적으로 표시해주길 원하시는 분들이 좀 더 많았던 것 같습니다. + +3. 빌드타임에 null 안전성을 보장받기 위해서 자바 대신에 코틀린을 사용하는 것이고, 빌드 타임에 null 안전성을 보장하지 못하는 자바는 문제가 있다고 생각하는데, null을 자유롭게 사용하기 위해서 자바를 사용하라는 말은 뭔가 모순 처럼 느껴졌습니다 + +4. 실제로, 파이썬3 with mypy를 사용할 때, 문제 없는 코드인데, 타입체크 결과는 문제가 있다고 나오는 경우가 있었습니다. 책에서는 코틀린을 예로 `!!` 을 말하는데, mypy 에서는 주석으로 `# type: ignore` 를 추가하는 방법으로 해결 가능 합니다. +책에서 나온내용과 같이, 타입체크가 실패하는 사유가 실제문제가 있어서 실패하는 것인지 문제가 없는데도 실패하는 것인지를 잘 파악해서 무시하도록하는 처리를 적절히 잘 해주는것이 중요하다고 생각합니다 + +5. 책에서 말하는 정적 타이핑 언어의 장점을 봤을 때, 대규모 프로젝트에 분명히 사용하기 좋은 것이 맞다고 생각합니다. 한국에서 대부분의 웹 백엔드의 기술 스택으로 자바와 스프링이 사용되는 이유 중에 한가지도 자바라는 정적 타이핑 언어를 사용하고 있는 것일 겁니다 + +다만, 파이썬에 type hint가 추가되고, mypy, pyright 같은 python 진영과 테크 기업에서 거의 official 관리되고 있는 타입체커가 생기면서, 파이썬 또한 정적타이핑 언어의 장점을 그대로 가져와서 적용할 수 있고, 실제로 저희 회사에서는 잘 사용하고 있습니다. + +제가 회사에서 자바 스프링을 개발하면서 느끼는 한가지는 타입과 관련해서는 이전에 파이썬 환경에서 개발했을 때와 비교해서 크게 다른 점을 못느끼겠다는 점 입니다. 정적타이핑 언어로써 가지고 있던 자바의 장점은 파이썬이 type hint와 mypy를 사용하는게 활성화되면서 사실상 상쇄화 되었다고 봅니다. 오히려 저는 파이썬이 유연하게 type을 도입하도록 한 것이 제 스타일에는 훨씬 더 맞았던거 같고, 앞서 언급되었던 동적,정적 타이핑의 단점들을 잘 피해갈 수 있도록 해준다고 생각합니다. 자바의 경우도 타입추론을 할 수 있도록, var 같은 키워드를 제공해주고 있는데, 자바 개발자분들(저희회사기준)은 사용을 지양하도록 하셔서 개인적으로는 좀 아쉬웠습니다 + +현대 개발언어들은 현재 단점을 줄여나가는 방향으로, 새롭게 언어(코틀린)가 만들어지거나, 새로운 개념(type hint 추가 및 동적 타이핑 언어에 타입체커 추가)들을 추가하고, 서로 다른 언어들의 장점인 부분들을 가져와서 적용하면서 발전해 나가고 있는 것으로 보입니다. 개발자들도 이에 맞춰서, 고정관념에서 벗어나, 좀 더 유연하게 받아들이면 어떨까라는 생각이 들었습니다 \ No newline at end of file