홍재민, 타입으로 견고하게 다형성으로 유연하게, 2023
— 독서
블로그를 꾸준히 쓴지 반 년이 되어 간다. 블로그 소개에 ‘웹 개발에 대한 기술적인 내용들을 포스팅한다’ 라고 아주 약간은 목표의 성격을 띈, 그리고 대부분은 반어적 농담인 문장을 적어두었는데 역시나 포스팅한 대부분의 내용이 읽고 본 문화컨텐츠에 대한 내용이다.
그런 중에 이 책은 실로 오랜만에 완독한 기술서적이다. 간단히 소개하면 이 책은 작년에 나온 국내 저자의 기술서적이며, 저자가 석박통합과정 중인 대학원생이고, 타입과 다형성이라는 한 가지 테마에 대해 재미있는 이야기들을 잔뜩 알려준다.
타입은 중요하고 또 편리하고, 타입을 편리하게 사용하는데 다형성이 중요하며, 그 다형성은 서브타입에 의한 다형성, 매개변수를 통한 다형성, 오버로딩을 통한 다형성 이렇게 세 가지가 있다고 소개한 다음 각각을 하나씩 소개하는 구성이다.
예를 들어 서브타입과 다형성에 대해서는 개발하다보면 많이 고민하는데, 최대 타입과 최소타입에 대해서는 아무래도 생각해보지 않게 된다. 그와 가장 가까운 고민이 아무거나 Object로 변환해서 사용하려고 드는 야만인 같은 짓을 할 때나 Void를 리턴하면서 이새끼는 대체 뭐지… 라고 생각할 때라고 볼 수는 있지만 Void는 참고로 최소 타입이 아님(Object는 최대 타입이 맞음). 최소 타입은 에러 등으로 인해 값을 리턴하지 못할 때 최소타입 Nothing이다. Void는 함수가 끝까지 실행되기 때문에 최소 타입이 아님.
매개변수에 의한 다형성은 거의 제네릭에 대한 내용이다. 여기도 대부분은 많이 사용하고 쉽게 이해할 수 있지만 무엇이든 타입이나 무엇인가 타입은 재미있었다. 복잡한 계산을 할 때 무엇이든 타입을 쓰면 좋고 라이브러리 같은 것을 만들 때는 무엇인가 타입으로 오용을 막을 수 있는 것도. 무엇이든 타입이 없어도 제네릭 메서드를 쓰면 똑같은 일을 할 수 있는 것도.
그리고 두 가지가 합쳐진 듯 한 제네릭 클래스의 상속에 대한 것도 재밌었다. List<Student>는 List<Person>의 서브타입인가? 에 대한 문제인데 그게 아니라는 것이다. List<T extends Person> 이라는 것이다. 이렇게 extends와 super로 입력과 출력을 위해 상한과 하한을 정하는게 자바 PECS라고 하고 이펙티브 자바에도 나오는데 이제야 조금 이해(후략)
본문에서 쓰는 수도 코드는 거의 자바라고 봐도 되는데 그 점이 내게는 좋았다 아무래도 익숙하니까 그 변주를 알아보기 쉬웠다. 뒤쪽에 같은 내용을 다른 언어로 풀어주는 구성도 좋았는데 깃허브 레포 주소와 스타 개수를 보여주는 표는 좀 오버한게 아닌가 싶기는 했다. 그리고 함수형 언어 공부도 해야겠다는 생각을 했다.
‘큐리 박사와 처르지’ 라는 장마다 삽입된 촌극은 연구실 형이 「괴델, 에셔, 바흐」처럼 그런 걸 넣어보라는 조언을 듣고 넣었다고 책의 끝에 소개한다. 뭐 있어도 좋고 없어도 좋은 내용이기는 한데 문득 새내기 때 읽다 말았던 「괴델, 에셔, 바흐」를 다시 읽어야겠다는 생각을 했다. 읽다 말았음에도 정말 좋은 책이었다는 기억이 남아있기 때문에.