배열에는 정적 배열과 동적 배열 두 종류가 있다.
정적 배열은 크기가 고정된 배열로 다음과 같이 선언한다.
uint[2] numbers;
반대로 동적 배열은 고정된 크기가 없는 배열이다.
uint[] numbers;
구조체들로 이루어진 배열도 만들 수 있다.
Person[] people;
위처럼 push, delete, pop 등을 활용해서 배열의 요소를 추가 / 변경 / 삭제할 수 있다.
append 가 push 로 변경된 것만 빼면 파이썬이랑 똑같다.
함수는 아래와 같이 선언할 수 있다.
Solidity의 함수는 매개변수와 리턴값의 타입을 명시해주어야한다.
매개변수는 일반 변수와 구분하기 위해 맨앞에 _ 를 붙여주는 것이 관례이다.
(public 키워드는 다음 장에서 알아보겠다.)
그 외에도 view 와 pure 키워드가 있다.
위의 getNumber
함수처럼 numbers 배열의 내용을 참조하기만 할 때 view 키워드를 붙여준다. view 를 생략하면 경고메세지가 뜬다.
위의 returnNumber
는 매개변수로 들어온 숫자를 그대로 리턴하는 함수다.
이처럼 함수 밖의 무엇도 참조하지 않으면 pure 키워드를 붙여준다.
마찬가지로 생략하면 경고메세지가 뜬다.
아무것도 쓰지 않는다. 위의 changeNumber
함수처럼
위의 키워드는 Solidity의 접근 제어자다.
접근의 단위는 contract이고 정리하면 다음과 같다.
Keyword | 같은 contract에서 접근 | 다른 contract에서 접근 |
---|---|---|
public | O | O |
private | O | X |
external | X | O |
internal | O | 상속하는 contract 내에서만 가능 |
internal 은 정의된 컨트랙트를 상속하는 컨트랙트에서도 접근이 가능하다 점을 제외하면 private 과 동일하다.
external 은 컨트랙트 바깥에서만 호출될 수 있고 컨트랙트 내의 다른 함수에 의해 호출될 수 없다는 점을 제외하면 public 과 동일하다.
접근 제어자 키워드는 위와 같은 방식으로 사용할 수 있다.
물론 함수가 아닌 변수에도 사용 가능하다.