스택큐힙리스트

이더리움 솔리디티에서 "memory" 키워드의 목적은 무엇인가요? 본문

카테고리 없음

이더리움 솔리디티에서 "memory" 키워드의 목적은 무엇인가요?

스택큐힙리스트 2023. 9. 1. 18:23
반응형

샘플 계약을 살펴볼 때, 때로는 memory를 사용하여 메서드 안에서 배열을 선언하기도 하고 아닐 때도 있습니다. 그 차이점은 무엇인가요?

답변 1

당신은 컴퓨터 전문가입니다. 특수 기호를 그대로 유지하면서 번역하세요.

메모리 키워드 없이 Solidity는 변수를 스토리지에 선언하려고 시도합니다.

솔리디티 개발자 chriseth의 이야기: 스토리지는 가상적인 구조를 가진 큰 배열로 생각할 수 있습니다... 이는 런타임에서 변경할 수 없는 구조입니다 - 이는 계약의 상태 변수에 의해 결정됩니다.

이는 계약 생성 시 계약 레벨 변수 선언을 기반으로 저장소의 구조가 고정되며, 이후에 발생하는 메서드 호출에 의해 변경될 수 없습니다. 그러나 sendTransaction 호출을 통해 저장소의 내용을 변경할 수 있습니다. 이러한 호출은 상태를 변경하며, 이것이 계약 레벨 변수가 상태 변수라고 불리는 이유입니다. 따라서 계약 레벨에서 선언된 변수 'uint8 storage var;'는 uint8 (0-255)의 유효한 값으로 어떤 값이든 변경될 수 있으나, uint8 유형의 값을 위한 슬롯은 항상 존재할 것입니다.

만약 메모리 키워드 없이 함수 내에서 변수를 선언한다면, 솔리디티는 현재 컴파일은 되지만 예상치 못한 결과를 초래할 수 있는 스토리지 구조를 사용하려고 할 것입니다. 메모리는 변수를 메소드 실행 시간에 사용하기 위한 공간을 생성하도록 솔리디티에 지시하며, 해당 메소드에서 변수의 크기와 구조를 보장합니다.

메모리는 계약 레벨에서 사용할 수 없습니다. 메서드에서만 사용 가능합니다.

FAQ에서 'the entry What is the memory keyword? What does it do?' 를 찾아보세요. 제가 이곳에 인용해 드리겠습니다:

이더리움 가상 머신은 항목을 저장할 수 있는 세 가지 영역을 가지고 있습니다.

첫 번째는 저장소(storage)입니다. 여기에는 모든 계약 상태 변수가 저장됩니다. 각 계약은 자체 저장소를 가지고 있으며 함수 호출 사이에 영속적으로 유지되며 사용하기 비용이 많이 듭니다.

두 번째는 메모리입니다. 이는 일시적인 값을 저장하는 데 사용됩니다. (외부) 함수 호출 사이에서 지워지며 사용하기에 더 저렴합니다.

제3은 스택인데, 이는 작은 지역 변수를 보관하는 데 사용됩니다. 사용하는 데 거의 비용이 들지 않지만, 제한된 양의 값만 보관할 수 있습니다.

대부분의 유형에 대해서는 저장될 위치를 지정할 수 없습니다. 왜냐하면 사용될 때마다 복사되기 때문입니다.

기우리하고 하는 저장 장소가 중요한 유형은 구조체와 배열입니다. 예를 들어 함수 호출에서 이러한 변수를 전달하면, 데이터가 메모리에 남아 있거나 저장 장소에 남아 있을 수 있다면 복사되지 않습니다. 즉, 호출된 함수에서 내용을 수정할 수 있으며 이러한 수정 사항은 호출자에서 여전히 볼 수 있습니다.

변수 유형에 따라 저장 위치에 대한 기본값이 있습니다.

상태 변수는 항상 저장에 있습니다

함수 인수는 항상 메모리에 있습니다.

로컬 변수는 기본적으로 구조체, 배열 또는 매핑 유형에 대한 참조 저장을 나타냅니다.

값 타입(즉, 배열, 구조체 또는 매핑이 아닌)의 지역 변수는 스택에 저장됩니다.

답변 2

이더리움 솔리디티에서 memory 키워드는 무엇을 의미하는 것일까요? 이에 대해 한국어로 SEO에 이취를 살려서 글을 작성해보겠습니다.

Title: 이더리움 솔리디티에서 memory 키워드의 목적과 활용 방법

Meta Description: memory 키워드는 이더리움 솔리디티에서 데이터 저장 및 처리를 위해 사용되며, 이에 대한 목적과 활용 방법을 알아봅시다.

이더리움은 스마트 컨트랙트를 구현하기 위한 프로그래밍 언어인 솔리디티(Solidity)를 제공합니다. 솔리디티는 이더리움 가상 머신(Ethereum Virtual Machine, EVM)에서 실행되며, 스마트 컨트랙트 운영에 필요한 데이터를 저장하고 처리할 수 있습니다. memory 키워드는 솔리디티에서 메모리 형태의 데이터를 선언할 때 사용되며, 이를 통해 데이터를 일시적으로 저장하고 처리할 수 있습니다.

메모리는 프로그램 실행 시 동적으로 할당되는 영역입니다. 솔리디티에서는 상수 및 변수를 저장하는 스토리지 영역과 계산 중에만 사용되는 메모리 영역으로 데이터를 구분합니다. 일반적인 변수 선언 시에는 스토리지 영역에 저장되지만, 어떤 함수에서만 사용되는 데이터는 메모리 영역에 저장함으로써 불필요한 영역 점유를 방지하고 실행 속도를 향상시킬 수 있습니다.

메모리 영역에 데이터를 저장하기 위해 memory 키워드를 사용합니다. 예를 들어, 다음과 같은 함수를 고려해봅시다:

function calculateSum(uint[] memory numbers) public pure returns (uint) {

uint sum = 0;

for (uint i = 0; i < numbers.length; i++) {

sum += numbers[i];

}

return sum;

}

위 예시에서 memory 키워드는 함수 파라미터인 numbers 변수를 메모리 영역에 저장하도록 지시합니다. 이렇게 배열을 이용하여 함수에 필요한 데이터를 메모리에 저장하면, 실행 중에만 사용되는 데이터이므로 스토리지에 데이터를 저장하는 것보다 효율적입니다. 또한, 함수 실행이 끝난 후에는 메모리에 저장된 데이터가 삭제되어 자원을 효과적으로 활용할 수 있습니다.

이와 같이 memory 키워드는 솔리디티에서 메모리 영역에 데이터를 임시로 저장하고 처리하기 위해 사용됩니다. 이를 통해 실행 성능을 향상시키고 자원을 효율적으로 관리할 수 있습니다. 따라서 이더리움 스마트 컨트랙트 개발 시 memory 키워드의 사용을 고려하여 최적화된 프로그램을 작성할 수 있습니다.

요약:

- 이더리움 솔리디티에서 memory 키워드는 메모리 영역에 데이터를 저장하기 위해 사용됩니다.

- 메모리는 프로그램 실행 시 동적으로 할당되는 영역입니다.

- memory 키워드를 사용하면 실행 중에만 필요한 데이터를 메모리에 저장하여 실행 속도를 향상시킬 수 있습니다.

- 함수 실행이 끝난 후에는 메모리에 저장된 데이터가 삭제되어 효과적인 자원 관리가 가능합니다.

- memory 키워드를 활용하여 이더리움 스마트 컨트랙트 개발 시 실행 성능을 향상시키고 자원을 효율적으로 관리할 수 있습니다.

이더리움 솔리디티에서 memory 키워드의 활용을 알면, 스마트 컨트랙트 개발에서 더욱 효율적이고 안정적인 프로그램을 작성할 수 있습니다. 하지만 memory 키워드를 적절하게 사용하기 위해서는 솔리디티 문법과 실행 원리에 대한 이해가 필요합니다.

반응형
Comments