defstruct 구문을 사용해요.
defstruct는 아톰 리스트(기본값이 nil인 경우) 또는 키워드 리스트(기본값을 지정하는 경우)를 받아요.
defmodule Plane do
defstruct [:engine, wings: 2]
end
plane = %Plane{}
# => %Plane{engine: nil, wings: 2}
맵과 함께 동작하는 대부분의 함수는 구조체에서도 동작해요.
구조체 필드에 접근할 때는 정적 접근 연산자 .를 사용하는 것이 좋아요.
필드 값을 가져오거나 조회하기:
plane = %Plane{}
plane.engine
# => nil
Map.fetch(plane, :wings)
# => {:ok, 2}
필드 값 업데이트하기
plane = %Plane{}
%{plane | wings: 4}
# => %Plane{engine: nil, wings: 4}
@enforce_keys 모듈 속성은 구조체를 만들 때 지정한 필드가 non-nil 값으로 초기화되어야 한다는 런타임 검사를 만들어요.@enforce_keys 뒤에는 필드 키 목록이 와요(필드 키는 아톰이에요).defmodule User do
@enforce_keys [:username]
defstruct [:username]
end
%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]