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

[솔리디티] 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 함수, 서명검증, 가스최적화

* 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심가치 강의

 

블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심 가치 - 인프런 | 강의

블록체인 기획자,개발자,회사 대표라면 반드시 한번은 봐야 하는 강의입니다. 따로 공부할 시간이 없었다면, 이 요약본 강의를 통해서 비트코인,이더리움 백서의 핵심을 이해할 수 있습니다., -

www.inflearn.com

 

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/

 

블록체인 교육 문의는 아래 링크 참고 바랍니다. 

https://kimsfamily.kr/414

 

블록체인 교육 커리큘럼 및 프로필

안녕하세요 제 프로필을 간략하게 정리하였습니다. 비즈니스 문의는 dannykim@kakao.com 으로 연락주시기 바랍니다. 감사합니다. 프로필) 블록체인 강의 경력) 1. 블록체인 강의 (20년~현재) 2022년  -

kimsfamily.kr

 

반응형

댓글0