스택스/클래리티

[클래리티] 6. 맵

라이튼 2024. 8. 20. 17:20

이전글

 

[클래리티] 5. 변수와 상수2

이전글 [클래리티] 4. 변수와 상수1이전글 [클래리티] 3. 클래리티 기본 규칙이전글 [클래리티] 2. 히로 플랫폼(Hiro Platform)히로 플랫폼(Hiro Platform)  히로 플랫폼은 스택스 스마트 컨트랙트 개

kwjdnjs.tistory.com

 

 이번 글에서는 클래리티의 맵에 대해서 알아보겠습니다.

 

 맵은 변수와 상수처럼 데이터를 저장하는 방식 중 하나로 해시 테이블로도 불립니다. 즉, 맵은 키-값 쌍으로 저장하는 방식을 말합니다. 튜플도 키를 이용해 데이터를 저장하지만 맵은 튜플과 다르게 키 이름을 따로 입력하지 않습니다. 즉, 키-값 데이터를 연결만 하는 말 그대로 해시 테이블인 것입니다.

 

 맵은 다음과 같이 define-map, 맵 이름, 키 타입, 값 타입으로 정의할 수 있습니다.

 

(define-map balances principal uint)

 

 맵을 정의했다면 map-set을 이용해 값을 넣을 수 있습니다.

 

(map-set balances tx-sender u500)

 

 다음과 같이 튜플 등 여러 타입을 이용해 값을 저장할 수 있습니다.

 

(map-set orders u0 {maker: tx-sender, amount: u50})

(map-set orders u1 {maker: tx-sender, amount: u120})

 

 map-set은 이미 값이 있는 경우에도 값을 덮어씌워 저장합니다. 만약 값이 이미 존재할 경우에 값을 덮어씌우고 싶지 않다면 map-insert를 사용해야 합니다. map-insert는 이미 해당 키에 대한 값이 존재할 경우 값을 저장하지 않고 false를 반환합니다.

 

(map-insert scores tx-sender u100)

 

 맵에서 특정 키의 값을 얻고 싶다면 map-get? 을 이용하면 됩니다.

 

(map-get? balances tx-sender)

 

 map-get은 옵셔널 타입으로 값을 반환합니다. 만약 존재하지 않는 키에 접근하려고 한다면 none을 반환하기 때문입니다. 따라서 map-get으로 얻은 값 자체를 사용하고 싶다면 이전에 알아봤던 것처럼 옵셔널을 풀기 위한 함수인 unwrap-panic을 사용하면 됩니다.

 

 마지막으로 맵에서 값을 지우고 싶다면 map-delete를 이용하면 됩니다.

 

(map-delete scores tx-sender)

 

  참고로 맵은 키-값을 저장하는 방식이라 반복문을 사용할 수 없어 주의해야 합니다.

 

 

다음글

 

[클래리티] 7. 함수

이전글 [클래리티] 6. 맵이전글 [클래리티] 5. 변수와 상수2이전글 [클래리티] 4. 변수와 상수1이전글 [클래리티] 3. 클래리티 기본 규칙이전글 [클래리티] 2. 히로 플랫폼(Hiro Platform)히로 플랫폼

kwjdnjs.tistory.com