목차
📁 프로그래밍 언어에서 type를 이해하는 방법
📌 타입(type)을 값(value)의 집합(set)으로 이해하기
예를 들면 다음과 같이 표현할 수 있다.
- value 3은 int 타입이다. ➡ 3은 int 집합의 원소이다.
- 변수 x는 char 타입이다. ➡ 변수 x는 char 집합의 원소를 담는 그릇이다.
- 표현식 (x + 1.2)는 float 타입이다. ➡ 표현식 (x + 1.2)의 연산결과는 float 집합의 원소이다.
- 함수 foo는 아무것도 반환하지 않는다. ➡ 함수 foo의 반환값은 공집합인 void의 원소이다.
📁 Unit 타입
📌 unit 타입은 "()" 하나로 구성된 singleton 집합이다.
unit 타입은 "아무것도 없음"을 나타내는 값이다.
OCaml의 모든 표현식은 반드시 값으로 계산되어야 하기 때문에, "()" 값을 통해 "없음"을 표현한다.
Python의 None, C/C++, Java의 void타입과 유사하다.
REPL에서 다음과 같이 표현된다.
# ();;
- : unit = ()
📁 int 타입
📌 int 타입은 모든 정수의 집합이다.
REPL에서 다음과 같이 표현된다.
# 2;;
- : int = 2;
int 타입 내장 연산자
Unary arithmetic(단항산술)로는 " - " (마이너스)가 있다.
Binary arithmetic(이진산술)로는 + (덧셈), - (뺄셈), * (곱셈), / (나눗셈), mod (나머지연산)이 있다.
Unary bitwise로는
📁 float 타입
📌 float 타입은 모든 실수의 집합이다.
REPL에서 다음과 같이 표현된다.
# 2.0;;
- : float = 2.
🔎 주의할 점.
OCaml에서는 int와 float 사이의 연산이 불가하므로, 반드시 타입 변환 후 연산해야한다.
# 2 + 3.0;;
Error: This expression has type float but an expression was expected of type int
# 2 + (int_of_float 3.0);;
- : int = 5
# (float_of_int 2) +. 3.0;;
- : float = 5.
📁 char 타입
📌 char 타입은 모든 문자의 집합이다.
Escape Sequence
앞에 ' / '(슬래쉬)를 붙여 프로그래밍 언어 특성상 표현할 수 없는 기능, 문자를 표현해준다.
- \\ : backslash character
- \' : single quote
- \" : double quote
- \t : tab
- \r : carrage return
- \n : line feed
- \b : backspace
- \space : space
- \ddd : the character with ASCII code ddd in decimal
- \xhh : the character with ASCII code hh in hexadecimal
- \o000 : the character with ASCII code 000 in octal
📁 string 타입
📌 string타입은 모든 문자열의 집합이다.
String 타입 내장연산자
연산자 ^는 두 문자열을 붙이는 역할을 한다. 다음과 같이 사용할 수 있다.
"Hello ' ^ 'world" ➡ "Hello world"
연산자 .[n]은 문자열에서 인덱스 n의 문자를 찾아 반환한다. 다음과 같이 사용할 수 있다.
"Hello".[1] ➡ 'e'
라이브러리 모듈 String
String.length는 문자열의 길이를 반환해준다.
String.length "Hello" ➡ 5
Stirng.sub는 서브문자열을 반환해준다.
String.sub "Hello" 2 3 ➡ "ll"
📁 bool 타입
📌 bool 타입은 true와 false로 이루어진 집합이다.
비교 연산자
모두 bool 값을 반환한다.
- x = y : x와 y가 같다. (structural equality)
- x <> y : x와 y가 다르다. (structural)
- x == y : x와 y가 동일하다. (physical equality)
- x != y : x와 y가 동일하지 않다. (physical)
- x < y : x가 y보다 작다.
- x <=y : x가 y보다 작거나 같다.
- x > y : x가 y보다 크다.
- x >=y : x가 y보다 크거나 같다.
REPL에서 다음과 같이 표현된다.
# 3 = 3;;
- : bool = true
# 3 == 3;;
- : bool = true
# [1;2] = [1;2];;
- : bool = true
# [1;2] == [1;2];;
- : bool = false