프로그래밍 언어 속 타입
-
2.2 집합론적 타입 - 이면서 타입프로그래밍 언어 속 타입 2022. 5. 12. 00:40
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 이면서 타입은 다중 상속multiple inheritance을 다룰 때 유용하다. 다중 상속은 한 클래스가 여러 클래스를 직접 상속하는 것을 말한다. 예를 들면, Student 클래스와 Teacher 클래스가 있을 때, 학생 신분으로 강의를 돕는 조교를 나타내는 TA 클래스는 Student 클래스와 Teacher 클래스를 모두 상속하는 것이 자연스럽다. class Student { Grades grades; } class Teacher { String course; } class TA extends Student, Teacher { Int pay; } Student 클래스의 grades 필드는 해당 학생이 ..
-
2.2 집합론적 타입 - 이거나 타입프로그래밍 언어 속 타입 2022. 5. 12. 00:34
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 프로그래밍을 하다 보면 한 함수가 받는 인자의 타입이 여러 가지가 되어야 하는 경우가 종종 생긴다. 이거나 타입은 이런 상황에서 유용한 개념이다. 스프레드시트를 편집하는 프로그램을 만든다고 하자. 스프레드시트의 각 셀은 일반, 숫자, 회계 등의 데이터 형식을 가진다. 따라서 셀에 데이터를 쓸 때는 데이터의 타입에 맞게 셀의 형식을 설정해 주어야 한다. 셀에 쓸 때마다 매번 데이터 형식을 올바르게 설정하기는 번거롭다. 셀에 데이터를 쓰는 함수를 만들고 그 함수가 데이터 형식도 알아서 맞추도록 한 뒤, 그 함수를 호출하는 쪽이 편하다. 가장 먼저 시도할 수 있는 방법은 타입별로 함수를 하나씩 만드는 것이다. V..
-
2.2 집합론적 타입 - 최소 타입프로그래밍 언어 속 타입 2022. 5. 12. 00:30
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 예외exception는 개발자가 throw(일부 언어에서는 raise)를 통해 의도적으로 발생시킬 수 있는 오류다. 일종의 사용자 정의 오류라고 볼 수 있다. 예외가 발생하는 즉시 프로그램 실행이 해당 오류로 인해 그대로 종료된다. 예외 처리기exception handler를 통해 예외를 처리함으로써 예외가 발생해도 실행을 이어 나가는 방법이 있지만, 이야기를 간단하게 만들기 위해 예외 처리기는 다루지 않겠다. 즉, 예외가 발생하면 실행이 즉시 끝나는 것으로 간주하겠다. 일반적으로 예외로 인한 종료는 타입 오류로 분류하지 않는다. 다시 말해, 타입 검사를 통과한 프로그램이더라도 예외가 발생해 실행이 갑작스럽..
-
2.2 집합론적 타입 - 최대 타입프로그래밍 언어 속 타입 2022. 5. 12. 00:20
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 지금까지는 “아무 값이나 가능하다”라는 사실을 타입으로 표현할 방법이 없었다. 이는 여러 불편을 낳는다. 우선, 2장에서 본 true ? 1 : false가 있다. 이 코드는 아무런 오류를 일으키지 않음에도 1의 타입과 false의 타입이 다르다는 이유로 타입 검사를 통과하지 못한다. “이 부품의 결과는 아무 값이나 될 수 있다”를 표현하는 타입이 있다면 true ? 1 : false가 타입 검사를 통과할 것이다. 또, 아무 값이나 인자로 받을 수 있는 함수도 있다. 대표적인 예시가 print 함수다. 여러 언어에서 아무 값이나 출력할 수 있다. “아무 값이나 가능하다”를 표현하는 타입이 없다면 print ..
-
2.2 집합론적 타입프로그래밍 언어 속 타입 2022. 5. 12. 00:12
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 열리지 않는 상자 처르지: 큐리, 나 츄르가 먹고 싶어. 세상에서 제일 맛있는 츄르 좀 줄래? 큐리 박사: 세상에서 제일 맛있는 츄르? 그런 걸 내가 어떻게 만들어. 처르지: 나야 모르지. 너 똑똑하잖아. 만들어 줘. 큐리 박사: 음, 어떡한담. 아, 이렇게 하면 되겠군. 잠시 후 큐리 박사: 네가 원하던 걸 가져 왔어. 자, 받아. 세상에서 제일 맛있는 츄르야. 처르지: 뭐야 이게. 그냥 상자잖아. 큐리 박사: 그 안에 츄르가 있을 거야. 처르지: 그래? 어떻게 여는 건데? 어디에도 여는 손잡이가 없는 걸? 힘으로 뜯어야 하나? 으, 잘 안 되네. 이거 정말로 안에 뭐가 들어 있긴 한 거야? 큐리 박사: ..
-
2.1 객체와 서브타입 - 추상 메서드프로그래밍 언어 속 타입 2022. 5. 12. 00:03
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 이제 메서드에 관한 이야기를 조금 해 보자. 필드가 각 객체가 가지고 있는 데이터라면, 메서드는 각 객체가 제공하는 기능이다. 클래스에 메서드를 정의하는 방법은 동적 타입 언어에서나 정적 타입 언어에서나 비슷하다. 함수를 정의하는 것과 비슷하게 하되 클래스 안에 정의하면 된다. class Person { String name; String email; Int id; Void sendEmail(String title, String content) { String email = this.email; ... } } 아까는 함수로 정의했던 sendEmail을 이번에는 메서드로 정의했다. 함수에 타입 표시를 붙여야 ..
-
2.1 객체와 서브타입 - 구조에 의한 서브타입프로그래밍 언어 속 타입 2022. 5. 11. 23:49
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 이미 정의된 클래스를 수정할 수 없는 경우에는 이름에 의한 서브타입만으로는 부족할 수 있다. 그럴 때는 구조에 의한 서브타입이 필요하다. 구조에 의한 서브타입의 필요성을 알아보기 위해 다른 사람이 만든 라이브러리를 사용하는 경우를 생각해 보자. 사용할 라이브러리에는 Person 클래스가 있다. [라이브러리 1] class Person { String name; String email; Int id; } 이전과 동일하게 사람 객체는 이름, 메일 주소, 고유 번호 등의 정보를 가지고 있다. 따라서 사람을 인자로 받는 sendEmail 함수를 똑같이 정의할 수 있다. Void sendEmail(Person per..
-
2.1 객체와 서브타입 - 이름에 의한 서브타입프로그래밍 언어 속 타입 2022. 5. 11. 23:39
이 글은 인사이트 출판사의 제안으로 작성 중인 책 『프로그래밍 언어 속 타입』 원고의 일부입니다. 이름에 의한 서브타입을 사용하는 경우, 타입 검사기는 타입이 보여 주는 클래스의 이름과 클래스 사이의 상속 관계만을 고려한다. 해당 클래스가 어떻게 생겼는지, 즉 그 클래스에 어떤 필드와 메서드가 있는지는 전혀 신경 쓰지 않는다. 고려할 게 얼마 없는 만큼, 서브타입을 판단하는 규칙도 단순하다. 클래스 A가 클래스 B를 상속한다면 A가 B의 서브타입이다. 여기서 상속은 직접 상속direct inheritance과 간접 상속indirect inheritance을 모두 포함한다. 앞서 본 Student와 Person의 예시가 직접 상속에 해당한다. Student 클래스를 정의할 때 Person 클래스가 상속할 ..