4~5장 정리(재상)

  1. Generic 타입: 기존 C++ template, golang generic과 동일 임의의 타입을 변수처럼 취급해놓고, 타입을 지정하는 순간 해당 타입으로 실체화, 컴파일
  1. null 대신 None, 기존 null보다 좀 더 안전한가봄. 근데 진짜 enum union 계속 쓰는건가? nullable type 표현용이 아니라면 정떨어지는데… Nullable Type을 표현하기 위한 방법으로 Option<T> 가 기본제공됨.
  1. 언어가 기본 제공하는 Generic type 중 Result<T, E>가 있음. 함수의 수행 결과가 정상적이면 TOk() 로 호출, 아니면 Err()를 호출 참고로 main()Result<T, E> 를 반환할 수 있음 (return 1 느낌인듯)
  1. 함수 호출 뒤에 ? 를 붙임으로서 Graceful Error Handling이 가능하다. (이게 Graceful?) Result 타입으로 반환하는 함수를 호출할 때, 정상적이면 바로 expression으로 취급할지, 아님 해당 함수에서 Err를 반환할지 결정 가능하다.
  1. Option, Result를 사용하면 .unwrap() 으로 값과 결과를 바로 가져올 수 있음.
  1. 기존 C++ vector와 동일한 방식으로 Vec 을 사용할 수 있음. 선언과 동시에 값을 집어넣고 싶으면 vec![] 으로 선언하면 됨. iteration은 벡터에 .iter() 으로 for문을 돌리면 됨
 
  1. 변수를 초기화하고 바인딩을 하면 내부적으로 메모리를 할당하게 된다. 이 때, 바인딩 된 변수를 리소스의 owner라 한다.
  1. 변수의 수명은 보통 괄호가 기준이고, 괄호가 넘어가면 수명이 종료된다. (이걸 drop된다 한다.) 러스트는 GC가 없으며, 변수 선언과 자원 할당이 동시에 이뤄지는 C++의 RAII와 같다.
  1. 구조체 drop의 순서는 밖에서 안으로 들어간다. (구조체 밖이 먼저 해제, 멤버가 그 다음에)
  1. 함수 호출할 때 인자를 전달하게 되면, 인자로 전달한 ownership이 함수로 넘어간다. (move)
  1. 함수 내부에서 외부로 호출하면 ownership을 caller로 넘긴다.
  1. ownership을 완전히 넘기는게 아니라, 빌리고 싶다면, & 으로 레퍼런스로 넘기면 된다.