Understanding the caveat of using Access Module in Elixir

posted by donghyun

1 min read

태그

오늘은 Elixir에서 ‘Access’ 모듈을 사용할 때 흔히 범할 수 있는 함정에 대한 중요한 인사이트를 공유하고자 합니다. 이 개념은 특히 구조체나 맵일 수 있는 데이터를 다룰 때 매우 중요합니다.

Elixir에서는 맵이나 구조체에서 특정 키의 값을 검색하기 위해 Access.get/2 함수를 자주 사용합니다. 하지만 맵과 구조체에는 Access.get을 사용하는 방식에 미묘한 차이가 있다는 점에 유의해야 합니다.

Structs vs. Maps: 중요한 차이

구조체를 다룰 때는 Access.key/1을 사용하여 다음처럼 필드를 조회합니다.

data = %User{id: 1}
id = Access.get(data, Access.key(:id))

위의 코드는 예상대로 동작하여 User 구조체에서 id 필드를 가져옵니다.

여기에 map을 넣었을 떄가 문제입니다. map 데이터에 Access.key/1을 사용해서는 안 됩니다. 그렇게 하면 결과가 오류 대신 기대하지 않은 nil이 되어 있고 잠재적인 버그로 이어질 수 있습니다.

잠재적 Bug: No Error, Just nil

맵이 있고 Access.key/1을 사용하여 값을 얻으려고 한다고 가정해 보겠습니다. 이 함수는 오류를 발생시키지 않고 조용히 nil을 반환합니다. 이 시나리오는 프로그램이 계속 실행되기 때문에 문제가 될 수 있으며, 버그가 시스템의 다른, 아마도 더 중요한 부분에서 나타날 때까지 버그가 발생했다는 사실조차 인식하지 못할 수도 있습니다.

이런 일이 발생하지 않도록 항상 기억하세요: Access.key/1은 Elixir 맵에서 동작하지 않습니다.

결론적으로 Access 모듈은 Elixir의 강력한 도구이지만, 잠재적인 함정을 피하기 위해 주의 사항을 숙지하는 것이 중요합니다. 정확한 결과를 보장하고 코드의 견고성을 유지하려면 항상 처리하는 데이터 구조에 적합한 함수를 사용해야 합니다.