프로그래밍 언어 속 타입
-
3.3 무엇이든 타입프로그래밍 언어 속 타입 2022. 5. 13. 00:54
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 기계 수집 위원회 처르지: 큐리, 뭘 보는 거야? 큐리 박사: “세계기계수집위원회”에서 낸 공고를 보고 있어. 처르지: 정말 별 위원회가 다 있구나. 그래서 무슨 공고인데? 큐리 박사: 음, 같은 종류의 아무 두 물체나 받아서 둘 중 하나를 고르는 기계를 수집한대. 고르는 기준은 뭐든 괜찮나 봐. 처르지: 그런 걸 모은다니 정말 특이한 곳이네. 너도 뭔갈 보내려는 거야? 큐리 박사: 응. 그럴까 생각 중이야. 내가 그동안 만든 거 중에 조건에 맞는 게 있지 않을까? 처르지: 음, 좀 생각해 볼까? 맞다! 네가 지난번에 만든 “완전똑똑자동선택기계”있잖아. 그걸 보내면 되지 않을까? 아무거나 두 개를 받아서 무..
-
3.2 제네릭 타입 - 제네릭 클래스프로그래밍 언어 속 타입 2022. 5. 13. 00:45
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 개발자가 자신만의 제네릭 타입을 직접 정의하고 싶은 경우도 종종 있다. 이런 이유로 대부분의 언어는 새로운 제네릭 타입을 정의할 수 있는 기능도 제공한다. 대표적인 기능이 제네릭 클래스generic class다. 제네릭 클래스는 타입 매개변수를 가진 클래스다. 정의할 때는 제네릭 함수와 비슷하게 타입매개변수를 명시해야 하고, 사용할 때는 제네릭 타입으로서 리스트나 맵과 비슷한 방식으로 사용된다. 이미 살펴본 개념들과 비슷하기에 별로 어려울 게 없다. 앞서 정의했던 choose 함수를 제네릭 클래스의 메서드로 만들어 보자. 목표는 사용자에게 같은 질문을 여러 번 물어 볼 때의 코드 중복을 최소화하는 것이다. ..
-
3.2 제네릭 타입프로그래밍 언어 속 타입 2022. 5. 13. 00:36
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 과일 상자 큐리 박사: 영차! 처르지: 큐리, 뭐하고 있어? 큐리 박사: 후, 안 팔리고 남은 과일을 나중에 내가 꺼내 먹을 수 있게 상자에 넣어 놓는 중이었어. 처르지: 오, 알뜰한데? 큐리 박사: 어쩔 수 없어. 과일 가게 장사가 생각만큼 안 돼서 조금이라도 아껴야 한다고. 처르지: 그렇구나. 큐리 박사: 그나저나 고민이야. 내가 과일별로 나눠서 상자에 넣는단 말이야. 사과만 들어 있는 상자가 있고, 또 복숭아만 들어 있는 상자도 있고, 그런 식이지. 근데 과일을 먹을 때 불편하더라고. 나는 그때그때 딱 먹고 싶은 과일이 있는데, 상자를 봐도 그 상자에 무슨 과일이 들어 있는지 모르니, 무슨 상자를 열어..
-
3.1 제네릭 함수 - 힌들리-밀너 타입 추론프로그래밍 언어 속 타입 2022. 5. 13. 00:27
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 대부분의 언어에서는 앞서 본 것처럼 제네릭 함수를 사용할 때 타입 추론을 해 타입 인자를 찾는다. 하지만 일부 언어에서는 여기서 더 나아가 제네릭 함수를 정의할 때조차 타입 추론을 한다. 이런 방식의 타입 추론을 힌들리-밀너 타입 추론Hindley-Milner type inference이라 부른다.* 타입 추론 알고리즘을 전산학자 힌들리Roger Hindley와 밀너Robin Milner가 독립적으로 발명했기에 붙은 이름이다. 어떤 사람들은 힌들리-밀너 타입 추론 대신 렛 다형성let polymorphism이라는 용어를 사용하는데, 이는 힌들리-밀너 타입 추론을 사용하는 대표적인 언어인 오캐멀(더 일반적으로..
-
3.1 제네릭 함수 - 타입 인자 추론프로그래밍 언어 속 타입 2022. 5. 13. 00:20
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 매개변수에 의한 다형성은 코드 중복을 크게 줄여 주는 대신 불편한 점이 있다. 꼬박꼬박 타입 인자를 써 줘야 한다는 점이다. 앞에서 그런 예시를 이미 보았다. choose(1, 2); choose("Korean", "Foreigner"); 중요한 것은 1과 2 중에 하나를 고르는 것이지 1과 2의 타입이 Int인 것이 아니다. 함수를 정의할 때는 choose를 한 번만 정의하면 된다는 점이 좋았지만, 호출할 때는 이래서야 chooseInt와 chooseString을 각각 정의하고 호출하는 것과 별반 다르지 않다. 이런 불편함을 해소하기 위해 매개변수에 의한 다형성을 제공하는 대부분의 언어는 타입 인자 추론을..
-
3.1 제네릭 함수 - 제네릭 메서드프로그래밍 언어 속 타입 2022. 5. 13. 00:15
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 제네릭 함수를 정의하고 사용한 것과 비슷하게 제네릭 메서드generic method를 정의하고 사용할 수 있다. 제네릭 메서드는 클래스 안에 정의된다는 점만 제외하면 제네릭 함수와 똑같다. 예를 들어 다음과 같이 choose를 제네릭 메서드로 정의하되 사용자에게 출력할 안내 문구를 객체의 필드에 저장하도록 할 수 있다. class Chooser { String msg; T choose(T v1, T v2) { print(v1); print(v2); print(this.msg); Int input = readInt(); return (input == 0) ? v1 : v2; } } 제네릭 함수를 호출할 때 타..
-
3.1 제네릭 함수프로그래밍 언어 속 타입 2022. 5. 13. 00:08
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 과일 고르기 처르지: 어이 큐리, 오늘 좀 바빠 보이네? 큐리 박사: 아, 응. 과일 가게를 새로 차리게 됐거든. 지난번에 카레 가게는 실패였지만, 이번에는 꼭 성공할 거라고! 처르지: 오, 그렇구나. 잘 되면 좋겠다. 큐리 박사: 내가 그동안 최고의 카레를 만들기 위해 카레에 들어갈 과일도 아주 유심히 봐 왔다고. 내 과일 보는 눈이라면 손님들한테 언제나 최고의 과일을 제공할 수 있을 거야. 그러니 실패할 리 없어. 며칠 후 처르지: 과일 가게는 잘 돼가? 큐리 박사: 그럭저럭 나쁘지 않아. 그보다 이걸 봐. 내가 만든 “사과자동선택기계”야. 사과 두 개를 넣으면 각각의 무게를 재서 더 무거운 사과만 사과..
-
2.3 함수와 서브타입프로그래밍 언어 속 타입 2022. 5. 12. 00:55
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 사람을 위한 카레 기계 큐리 박사: 어이 처르지, 내가 만든 기계 구경할래? 처르지: 오, 이 엄청난 건 뭐야? 큐리 박사: 하하, 이 몸의 위대한 발명품 “완전자동카레조리기계”지. 아무 사람이나 와서 자신의 정보를 입력하면, 그 사람에게 가장 잘 맞는 재료 배합을 선정해서 카레를 만들어 준다고. 저 앞 학교에서 급식 시간에 사용하겠다며 만들어 달라고 했어. 처르지: 이야, 대단한 걸? 큐리 박사: 그렇지? 이제 마무리 단계야. 며칠만 더 작업하면 기계를 완성해서 학교에 보낼 수 있어. 며칠 후 큐리 박사: 처르지, 큰일이야. 오늘 아침에 내 “완전자동카레조리기계”를 완성하고 나서, 그 소식을 전하러 학교에..