본문 바로가기
블록체인교육/솔리디티

[솔리디티] 6. 데이터 저장공간, 함수, (view,pure속성)

by Danny_Kim 2022. 6. 8.

[NEW] 누구나 쉽게 따라하는 솔리디티 강의(솔리디티 버전 0.8.13)

1. Helloworld, 카운터컨트랙트, 데이터타입

2. 변수, 상수, 불변, 상태변수 읽고 쓰기

3. 이더 단위, 가스와 가스가격

4. 조건문, 반복문, 맵핑(mapping)

5. 배열, 열거형(enum), 구조체(calldata,memory) 

6. 데이터 저장공간, 함수(view,pure 속성)

7. 에러(error), 함수수정자(modifier)

8. 이벤트(events), 생성자(constructor), 상속

9. 상속, 섀도잉,super키워드 함수 속성들

10. 인터페이스(interface), payable, 이더전송,받기 관련

11. Fallback, Call, Delegate(솔리디티 업그레이드 기법)

12. 함수 선택자(function selector), 다른 컨트랙트 사용 및 생성기법

13. Try Catch, Import(임포트), Library(라이브러리)

14. ABI 디코드, hash 함수, 서명검증, 가스최적화

 

 

1. 데이터 저장공간 - 스토리지(storage), 메모리(memory), 콜데이터(calldata)

 - 변수는 데이터의 저장위치를 명시적으로 지정하기 위해서 스토리지(storage), 메모리(memory), 콜데이터(calldata)의 세가지 영역으로 구분되어 선언된다.

 - storage(스토리지) : 변수는 상태변수(state variable)다. (블록체인에 저장됨)

 - memory(메모리) : 변수는 메모리에 존재하고 함수가 호출되는 동안 사용된다.

 - calldata(콜데이터) : 함수인자(function arguments)를 포함하는 특별한 데이터 영역

 

예제) storage 와 memory의 차이점.

예제) memory 와 calldata의 차이점

 

* 과제) memory와 calldata의 차이를 설명하고, calldata를 사용하여 가스비를 절감하는 함수를 작성해보세요!!!

 

2. 함수 (function)

2.1 함수들은 다양한 value의 리턴이 가능함.

  - uint형, bool형, uint형..등

2.2 리턴 value에 이름을 지정할 수 있음

2.3 Return value 로 이름을 지정할 수 있음.

      이러한 경우에 return을 생략할 수 있음.

2.4 구조분해 할당(destructuring assignment)

 

2.5 입력, 출력을 위해서 map을 사용할 수 없고, 배열 사용 가능

 

전체소스

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Function {
    // Functions can return multiple values.
    function returnMany()
        public
        pure
        returns (
            uint,
            bool,
            uint
        )
    {
        return (1, true, 2);
    }

    // Return values can be named.
    function named()
        public
        pure
        returns (
            uint x,
            bool b,
            uint y
        )
    {
        return (1, true, 2);
    }

    // Return values can be assigned to their name.
    // In this case the return statement can be omitted.
    function assigned()
        public
        pure
        returns (
            uint x,
            bool b,
            uint y
        )
    {
        x = 1;
        b = true;
        y = 2;
    }

    // Use destructuring assignment when calling another
    // function that returns multiple values.
    function destructuringAssignments()
        public
        pure
        returns (
            uint,
            bool,
            uint,
            uint,
            uint
        )
    {
        (uint i, bool b, uint j) = returnMany();

        // Values can be left out.
        (uint x, , uint y) = (4, 5, 6);

        return (i, b, j, x, y);
    }

    // Cannot use map for either input or output

    // Can use array for input
    function arrayInput(uint[] memory _arr) public {}

    // Can use array for output
    uint[] public arr;

    function arrayOutput() public view returns (uint[] memory) {
        return arr;
    }
}

 

3. View, Pure 함수속성

 - 함수 속성중에 view, pure가 있음

 - View : 상태변수가 변경되지 않음 (블록체인 데이터를 읽기만 함)

 - Pure : 상태변수가 변경되지 않거나 읽히지 않음. (블록체인 데이터를 읽지도 않음)

 (view, pure 뭐가 다르지? 이것도 헤깔리죵???)

예) addToX 함수의 경우, view 속성을 부여했고, x는 변경되지 않고 y값만 추가해서 return함.

     add 함수의 경우, pure 속성을 부여했고, i와 j를 추가하지만 상태로부터 수정, 읽는걸 하지 않음.

  * view의 경우 dapp에서 상태를 읽을 경우에 주로 사용됨.

  * pure의 경우 상태변수를 변경하지도 않고 읽지도 않음.

 

소스출처 : https://solidity-by-example.org/

반응형

댓글0