무지개 곰
무지개곰의 성장이야기
무지개 곰
250x250
  • 분류 전체보기
    • 블록체인 공부
      • BlockChain
      • Ethereum
    • IT공부
      • Java
      • JavaScript
      • HTML + CSS
      • React
      • 프로그래머스 (TypeScript)
    • 독서
    • 영어 공부
      • 1일 1 작문
      • 영어 짧은 글
    • 홍보
hELLO · Designed By 정상우.
무지개 곰

무지개곰의 성장이야기

[Solidity] 배열의 선언과 호출, 종류, 함수
블록체인 공부/Ethereum

[Solidity] 배열의 선언과 호출, 종류, 함수

2022. 6. 10. 11:00
728x90

배열

  • 배열의 차원
  • 배열의 값 호출
  • 저장소 배열과 메모리 배열
  • 동적 배열과 정적 배열
  • 배열에서 지원하는 함수

배열의 차원

배열은 차원으로도 분류됩니다. 1차원 배열, 2차원 배열, 3차원 배열이 존재하며 각각의 선언 방식과 정리되는 방식을 예시를 보인다면 아래와 같습니다.

uint[3] arrayOne = [10,20,30];
uint[3][2] arrayTwo = [[1,2,3],[4,5,6]];
uint[3][2][2] arrayThree = [[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]];

1차원 배열의 예시는 arrayOne, 2차원 배열의 예시는 arrayTwo, 3차원 배열의 예시는 arrayThree입니다. 배열 저장된 값은 번호를 가지게 되는데 이것을 index라고 부르며 번호는 0번부터 시작하게 됩니다. arrayOne배열에 값과 index를 비교한다면 arrayOne [0] = 10, arrayOne [1] = 20, arrayOne [2] = 30의 값을 가집니다. 저장해둔 값을 호출을 할 때 이러한 index를 이용하여 호출을 하게 됩니다.


배열의 값 호출

위에서 배열을 선언하는 방법을 보았고 이번에는 선언한 값을 필요할 때 호출하는 방식을 설명드리겠습니다. 약간의 주의가 필요하여 따로 준비하였으니 꼭 확인하시기 바랍니다.

uint[3][2] arrayTwo = [[1,2,3],[4,5,6]];

위와 같은 2차원 배열의 값들이 정리가 되는 방식을 먼저 설명드리겠습니다. 위에 작성된 코드에 uint [3][2]는 해석을 한다면 uint [3]의 배열을 하나의 묶음으로 보고 그러한 묶음을 1차원 배열 uint [2]에 입력된다고 해석하시면 됩니다. 글로 설명하면 이해가 어려울 수 있어 아래에 코드로 작성하였습니다. 아래의 코드는 이해를 돕기 위한 코드이므로 실행되지 않습니다.

uint[3] a = [1,2,3];
uint[3] b = [4,5,6];
uint[2] arrayTwo = [a,b];
function print(uint _indexOne, uint _indexTwo) public returns(uint256){
    return arrayTwo[_indexOne][_indexTwo];
}

배열의 값을 호출하는 함수와 같이 설명을 한다면 _indexOne값에 들어가는 수는 arrayTwo 배열에서 a인지 b인지 선택을 하게 되고 _indexTwo값에 들어가는 수는 a혹은 b 배열에서 어떤 숫자를 선택할 것인지 정하는 값이 됩니다. 따라서 3이라는 값을 얻고 싶을 때는 _indexOne은 0을 _indexTwo는 2를 가지게 되고 6이라는 갑을 얻고 싶을 때는 _indexOne은 1을 _indexTwo는 2를 가지게 됩니다. 그렇기 때문에 호출 시 주의하시길 바랍니다.


저장소 배열과 메모리 배열

배열은 저장되는 위치에 따라 저장소에 저장이 되는 저장소 배열과 메모리에 저장되는 메모리 배열로 나눌 수 있습니다. 메모리에 저장된 데이터는 컨트랙트의 실행이 종료되면 지워지고 저장소에 저장된 데이터는 블록체인에 저장되어 영구히 저장됩니다.

uint[4] arrayOne = [1,2,3,4];

 

위와 같이 배열을 선언하였을 때 arrayOne이 1, 2, 3, 4의 값을 가지는 배열이 되고 arrayOne이라는 배열이 저장소에 저장되어 arrayOne은 저장소 배열이 됩니다. 하지만 우변의 [1, 2, 3, 4] 배열은 값을 넣어주기 위해 선언된 배열로써 메모리에만 저장되어 메모리 배열이 됩니다. 우변의 값은 날아가더라도 arrayOne에는 이미 각각의 값이 저장되어있으므로 문제가 없습니다.


동적 배열과 정적 배열

배열을 선언할 때 배열의 크기가 코드에 의하여 정해져 있는 배열을 정적 배열, 코드를 실행하여 값의 입력에 따라 크기가 변하는 것을 동적 배열이라고 합니다.

uint[4] arrayStatic = [1,2,3,4];
uint[] arrayDynamically;

arrayStatic의 경우 uint [4]를 통하여 크기를 4로 지정하였기 때문에 정적 배열입니다. arrayDynamically의 경우는 uint []에서 알 수 있듯 크기를 입력하지 않았기에 함수를 통하여 크기를 늘리거나 줄일 수 있습니다.


배열에서 지원하는 함수

배열에서 지원하는 함수로는 length, push, pop, delete이 있습니다. 각각 활용하는 방법을 예시로 보인다면 아래와 갔습니다.

 

① length

uint[] arrayOne;
function arrayLength() public returns(uint256){
	return arrayOne.length;
}

배열의 길이를 반환할 때 사용합니다.

 

② push

uint[] arrayOne;
function arrayPush(uint _indexOne) public{
	arrayOne.push(_index);
}

배열의 마지막에 값을 추가합니다.

 

③ pop

uint[] arrayOne;
function arrayPop() public{
	arrayOne.pop;
}

배열의 제일 최신 값 측 제일 마지막 index에 저장된 값을 삭제합니다. 따라서 배열의 길이도 삭제한 수만큼 줄어듭니다.

 

④ delete

uint[] arrayOne;
function arrayDelete(uint _indexOne) public{
	delete arrayOne[_index];
}

입력한 index에 저장된 데이터 값을 0으로 만듭니다. 배열의 길이에 변화는 없습니다.

728x90
저작자표시 비영리 변경금지 (새창열림)
    '블록체인 공부/Ethereum' 카테고리의 다른 글
    • [Solidity] 구조체 (struct)
    • [Solidity] 맵핑 (Mapping)
    • [Solidity] 형 변환
    • [Solidity] 조건문과 반복문
    무지개 곰
    무지개 곰
    java solidity react javascript등 프로그래밍 공부 기록

    티스토리툴바