OCamlμ—μ„œ ADT (Algebraic Data Type, λŒ€μˆ˜μ  데이터 νƒ€μž…)

**λŒ€μˆ˜μ  데이터 νƒ€μž…(ADT)**은 μ—¬λŸ¬ 개의 κ°’(데이터)을 μ‘°ν•©ν•˜μ—¬ μƒˆλ‘œμš΄ νƒ€μž…μ„ μ •μ˜ν•˜λŠ” 방식을 μ˜λ―Έν•©λ‹ˆλ‹€. OCamlμ—μ„œλŠ” type ν‚€μ›Œλ“œμ™€ | μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ ADTλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.


πŸ”Ή 1. Sum Type (Variant Type)

type color =
  | Red
  | Green
  | Blue
;;

let describe_color c =
  match c with
  | Red -> "λΉ¨κ°•"
  | Green -> "초둝"
  | Blue -> "νŒŒλž‘"
;;

print_endline (describe_color Red);; (* λΉ¨κ°• *)
print_endline (describe_color Green);; (* 초둝 *)

Sum Type 값은 μƒμ„±μžλ₯Ό μ“°λŠ” κ²ƒλ§ŒμœΌλ‘œ μ •μ˜ κ°€λŠ₯ (e.g. Red)

βœ… νŠΉμ§•:


πŸ”Ή 2. Product Type (Record Type)

type person = {
  name: string;
  age: int;
};;

let p = { name = "Alice"; age = 25 };;

Printf.printf "이름: %s, λ‚˜μ΄: %d\\n" p.name p.age;;
(* 좜λ ₯: 이름: Alice, λ‚˜μ΄: 25 *)

print_endline 말고 Printf.printfλ‘œλ„ ν‘œμ€€ 좜λ ₯ κ°€λŠ₯. %s, %d 지원.

nameκ³Ό ageλ₯Ό ν•„λ“œλ‘œ κ°€μ§„ λ ˆμ½”λ“œλ₯Ό μ •μ˜ν•˜λ©΄ μžλ™μœΌλ‘œ person νƒ€μž…κ³Ό λŒ€μ‘ν•œλ‹€.

βœ… νŠΉμ§•: