Solidity 문법 - (14) Array

2023. 5. 30. 20:57BlockChain/Solidity 깨부수기 ( 유투브 강의 )

목차
1. Array
2. Array 예제코드

 

1. Array

 

 

다른 언어들과 마찬가지로 length를 구할 수 있고, 또한 for loop문을 통해 배열안의 값들을 순회할 수 있다.

 

솔리디티에서는 Array보다는 mapping을 선호하는데,

 

for loop문을 통해서 디도스 공격과 같은 것들이 들어올 수 있기 떄문이다.

 

Array는 다음과 같이 정의할 수 있다.

 

[타입] [ ] [접근 제한자] [변수명];

 

컨트랙트의 가장위의 변수로도 값을 넣어줄 수 있다.

 

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

contract ArrayExam {
    // 배열에 1, 2, 3, 4, 5를 넣어놓는 것.
    uint256[] public numArr = [1, 2, 3, 4, 5];
    
    // 배열의 length를 5로 제한하고 있는 것.
    string [5] public a
}

 

 

배열에 대한 특징은 예제코드를 보면서 알아보도록 하자.

 

 

 

 

2. Array 예제코드

 

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

contract ArrayExam {
    uint256[] public scoreList;

    function listLength() public view returns (uint256) {
        return scoreList.length;
    }

    function ScorePush(uint256 _score) public {
        scoreList.push(_score);
    }

    function ScoreGet(uint256 _index) public view returns (uint256) {
        return scoreList[_index];
    }

    function ScorePop() public {
        scoreList.pop();
    }

    function ScoreDelete(uint256 _index) public {
        delete scoreList[_index];
    }

    function ScoreChange(uint256 _index, uint256 _age) public {
        scoreList[_index] = _age;
    }
}

 

listLength는 배열의 길이를 리턴하는 함수이다.

 

ScorePush는 마지막 인덱스에 값을 추가하는 함수이다.

 

ScoreGet은 인덱스에 따라 배열의 값을 출력하는 함수이다.

 

ScorePop은 배열의 마지막 인덱스에 있는 값을 추출(삭제)하는 함수이며, 배열의 길이 또한 짧아진다.

 

ScoreDelete는 index를 지정해서 배열의 값을 하나 삭제하는 함수이다. 다만, 배열의 길이는 짧아지지 않는다.

 

ScoreChange는 배열의 인덱스를 지정해 값을 바꾸는 함수이다.

 

remix IDE에서 하나하나 실행해보도록 하자.

 

 

Push를 10, 20, 30, 40, 50 진행한 후에 length를 출력해보았다.

 

 

 

다음은 Pop을 진행한 후에 length를 출력해보았다.

 

 

 

다음은 Delete를 이용해서 값을 삭제한 후 length를 보자.

 

length가 변하지 않은 것을 볼 수 있다.

 

Pop과 Delete의 차이점에만 주의하고 넘어가도록 하자.