구조

구조체 에서 Elixir

21개의 연습 문제

구조체 소개

구조체는 정해진 키 집합을 가진 특별한 맵이에요.

  • 구조체는 컴파일 시점 검사와 기본값을 제공해요.
  • 구조체는 정의된 모듈의 이름을 따서 이름 붙여요.
  • 구조체를 정의하려면 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]
GitHub에서 편집 링크가 새 창이나 탭에서 열려요

구조체 배우기

연습이 잠겨 있어요

구조체 개념을 연습하려면 연습 문제 9개를 더 잠금 해제해요