프로그래밍 언어 속 타입
-
5.1 오버로딩프로그래밍 언어 속 타입 2022. 5. 17. 14:40
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 깍둑썰기 큐리 박사: 준비 끝! 이번에야말로 반드시 카레 가게를 성공시키겠어. 처르지: 그러길 바라. 준비는 철저히 했겠지? 큐리 박사: 물론. 새로운 기계도 준비했다고. 처르지: 오, 또 기계를 만들었나 보네. 이번에는 뭘 만든 거야? 큐리 박사: 지난번에 사과즙을 섞어서 카레를 만드는 “사과즙듬뿍카레자동조리기계”를 만들었잖아. 근데 생각을 좀 해보니까 사과를 넣을 때 꼭 즙을 낼 필요는 없겠더라고. 사과도 다른 재료들처럼 깍둑썰기를 해서 넣으면 어떨까 했지. 그래서 내가 찾은 최적의 크기로 사과를 썰어서 카레에 넣는 “사과깍둑카레자동조리기계”를 만들었어. 아삭아삭한 사과와 부드러운 카레의 조화가 기가 막..
-
4.3 가변성 - 사용할 때 가변성 지정하기프로그래밍 언어 속 타입 2022. 5. 16. 00:32
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 제네릭 타입을 사용할 때 가변성을 지정하는 경우, 제네릭 타입을 정의할 때는 가변성을 지정할 수 없다. 모든 제네릭 타입은 불변으로 정의되며 타입 매개변수를 아무데서나 사용할 수 있다. 따라서 다음처럼 제약 없이 리스트를 만드는 것이 가능하다. abstract class List { Int length(); T get(Int idx); void add(T t); } List가 불변이므로 B가 A의 서브타입이더라도 List는 List의 서브타입이 아니다. 제네릭 타입을 사용할 때 가변성을 불변 대신 공변이나 반변으로 지정하려면 새로운 종류의 타입을 사용해야 한다. 새롭게 등장하는 타입들은 타입 인자 앞에 ou..
-
4.3 가변성 - 정의할 때 가변성 지정하기프로그래밍 언어 속 타입 2022. 5. 16. 00:27
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 가변성은 각 제네릭 타입의 고유한 속성이다. 따라서 제네릭 타입을 정의할 때 가변성을 지정하는 게 가장 직관적이다. 개발자는 제네릭 타입의 각 타입 매개변수에 가변성을 표시함으로써 공변, 반변, 불변 중 하나를 고를 수 있다. 만약 아무런 표시도 붙이지 않을 시 기본으로 불변이 선택된다. 예를 들어 다음과 같이 불변인 리스트를 정의할 수 있다. abstract class List { Int length(); T get(Int idx); void add(T t); } 불변인 타입 매개변수는 입력과 출력에 모두 사용할 수 있다. 따라서 위의 List 정의에서 T가 메서드 매개변수 타입과 결과 타입에 모두 사용될..
-
4.3 가변성프로그래밍 언어 속 타입 2022. 5. 16. 00:19
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 게시판 처르지: 오랜만에 학교를 산책해 볼까? 오, 이게 뭐지? 게시판에 새로 붙은 게 있네. 재학생 음식 취향 설문 조사 결과? 별 걸 다 조사하네. 각 음식을 좋아하는 학생들의 명단도 읽을 수 있구나. 어, 카레를 좋아하는 학생들의 명단도 있네. 큐리가 좋아하겠는걸? 당장 알려 주러 가야겠다. 잠시 후 처르지: 큐리, 내가 학교에서 뭘 봤는지 알아? 카레를 좋아하는 사람들의 명단이 게시판에 붙어 있지 뭐야. 네가 알면 좋아할 거 같아서 알려 주러 왔어. 큐리 박사: 오, 정말 고마워. 이걸로 뭘 할 수 있을까? 망해 버린 내 카레 가게를 되살릴 수 있으려나? 그래, 카레 시식회를 열고 그 사람들을 초대해..
-
4.2 타입 매개변수 제한 - 재귀적 타입 매개변수 제한프로그래밍 언어 속 타입 2022. 5. 16. 00:04
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 타입 매개변수가 자기 자신을 제한하는 데 사용될 수 있다. 이를 재귀적 타입 매개변수 제한F-bounded quantification이라 부른다. 재귀 함수가 자기 자신을 호출하는 함수인 것과 비슷하다. 재귀 함수의 필요성은 이미 잘 알지만, 아직 재귀적 타입 매개변수 제한이 필요한 이유는 감이 오지 않는다. 하지만 재귀적 타입 매개변수 제한은 굉장히 중요하고 유용한 기능이다. 예시와 함께 어떤 경우에 필요한지 알아보자. 다음 sort 함수는 정수 리스트를 인자로 받아 정렬한다. void sort(List lst) { ... if (lst.get(i) > list.get(j)) { ... } ... } 삽입..
-
4.2 타입 매개변수 제한프로그래밍 언어 속 타입 2022. 5. 15. 23:57
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 달달한 과일 찾기 큐리 박사: 음, 이걸 여기에 연결하고……. 처르지: 큐리, 뭐 하고 있어? 큐리 박사: 내가 지난번에 “완전똑똑자동선택기계” 만든 거 기억해? 처르지: 물론이지. 과일 무게를 비교해서 더 무거운 거를 매대 위에 올려 주잖아. 과일을 넣기 전에는 무슨 과일을 넣을지 종이에 적어서 기계한테 줘야 하고. 큐리 박사: 맞아. 잘 기억하는구나? 처르지: 그럼. 내 제일 친한 친구가 하는 일인데 다 기억하지. 큐리 박사: 하하, 고마워. 근데 “완전똑똑자동선택기계”를 사용하다 보니까 좀 문제가 있더라고. 과일이 무겁다고 손님들이 무조건 좋아하는 게 아니었어. 좀 가볍더라도 달달한 과일이 더 잘 팔리..
-
4.1 제네릭 클래스와 상속프로그래밍 언어 속 타입 2022. 5. 15. 23:46
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 상자, 상자, 상자 처르지: 이야, 이 많은 상자는 다 뭐야? 큐리 박사: 내가 팔다 남은 과일을 상자에 넣어서 보관한다고 한 거 기억해? 처르지: 맞아, 그랬지. 큐리 박사: 계속 과일이 남다 보니까 상자가 부족하더라고. 그래서 마을을 돌면서 버려진 상자들을 잔뜩 주워 왔지. 처르지: 엄청 많은걸? 큐리 박사: 하하, 꽤 힘들었다고. 처르지: 수고했어. 내가 과일 넣는 거 도와 줄까? 큐리 박사: 그러면 고맙지. 우선 이 종이 상자에 사과를 넣자. 잠시 후 큐리 박사: 됐다! 처르지: 이건 이제 사과가 든 종이 상자네? 종이 상자도 상자니까 사과가 든 상자라고 해도 되겠지? 큐리 박사: 맞아. 무슨 과일이..
-
3.4 무엇인가 타입프로그래밍 언어 속 타입 2022. 5. 13. 01:10
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 사과즙 카레 처르지: 큐리, 표정이 안 좋네. 무슨 일이야? 큐리 박사: 에휴. 친척 한 명이 맛있는 카레를 먹고 싶다고 하더라고. 그래서 카레 만드는 기계를 보내 줬지. 처르지: 우와 좋은 일 했네. 근데 뭐가 문제야? 큐리 박사: 들어 봐. 친척이니까 신경을 좀 더 썼단 말이야. 그래서 그냥 평범한 카레 기계도 아니고 무려 내가 특별 제작한 “사과즙듬뿍카레자동조리기계”를 보내 줬어. 내가 찾은 가장 좋은 비율로 사과즙과 다른 재료를 섞어서 훌륭한 풍미의 카레를 만드는 기계지. 근데 맛있는 카레를 만들려면 아무 사과나 써서는 안 돼. 내가 뒷동산에서 직접 재배한 “향도최고맛도최고사과”를 써야지만 좋은 맛이..