Raku의 ASSIGN-KEY — 해시 키에 직접 값 넣기

Raku의 ASSIGN-KEY — 해시 키에 직접 값 넣기

%age<Claire> = 29처럼 해시에 값을 대입할 때, Raku는 내부적으로 특정 메서드를 호출해요. 그 기본 경로가 조금 비싸다고 느껴진다면, ASSIGN-KEY를 직접 구현해서 대입을 가볍게 만들 수 있어요. 다만 이건 선택(optional)이고, 조심해서 써야 하는 최적화예요.

multi method ASSIGN-KEY(::?CLASS:D: $key, $new)

$key에 연결된 요소를 $new 값으로 설정해야 해요. 이 메서드를 구현하지 않으면 Raku는 self.AT-KEY($key) = $new를 대신 사용해요. 구현한다면 반드시 같은 효과를 내야 해요.

이 메서드는 '선택형 성능 최적화(opt-in performance optimization)'로 설계됐어요. 덕분에 %age<Claire> = 29처럼 단순한 대입은 AT-KEY를 호출하지 않고 동작할 수 있어요. AT-KEY는 만들고 돌려주는 데 비용이 들 수 있는 컨테이너 객체를 생성해야 하기 때문이에요.

한 가지 꼭 기억할 점이 있어요. ASSIGN-KEY를 구현했다고 해서 AT-KEYrw 메서드로 만들지 않아도 되는 게 아니에요. %age<Claire>++처럼 덜 단순한 대입·수정은 여전히 AT-KEY를 사용하기 때문이에요.

출처: Raku 공식 문서 — ASSIGN-KEY

본문

  • $key에 연결된 요소를 $new로 설정하는 역할이에요.
  • 구현하지 않으면 self.AT-KEY($key) = $new로 대체되고, 구현하면 같은 효과를 보장해야 해요.
  • 단순한 대입이 비싼 컨테이너 객체를 만들지 않도록 돕는 선택형 최적화예요.
  • AT-KEYrw로 만드는 일은 여전히 필수예요. ++ 같은 수정 연산은 AT-KEY를 거치니까요.