본문 바로가기
블록체인 및 경제/솔리디티

8. 솔리디티 기본문법 (변수, 데이터타입, 구조체)

by kimsfamily 2020. 11. 10.

1. 스마트 계약의 시작, 리믹스 도구 사용해보기

2. 솔리디티 개발환경 구성

3. 스마트컨트랙트 작성 후 배포하기

4. openzeppelin 사용하여 ERC20 토큰 만들기

5. Ropsten 테스트넷에 ERC20토큰 배포하기

6. web3.js 와 자바스크립트를 활용한 간단한 예제

7. 솔리디티 기초, 리믹스로 컨트랙트 작성하기

8. 솔리디티 기본문법 (변수, 데이터타입, 구조체)

9. 솔리디티 배열, 맵핑

10. 솔리디티 조건문, 반복문(if, else, for)

11. 솔리디티 암호화폐 지불(호텔룸 예약하기 프로그램)

12. 솔리디티 상속

13. 리믹스 솔리디티 6.0 버전 ERC20토큰 만들기

14. web3.js 와 자바스크립트를 활용하여 (이더잔액조회) 지갑 만들기

15. 솔리디티 컨트랙트 Web.js 활용하여 웹으로 보여주기




 

이번시간에는 변수, 데이터타입, 구조체에 대해서 살펴보겠습니다.

먼저 MyContract.sol 파일을 만듭니다.

 

그리고 아래의 예제코드를 하나씩 작성해보겠습니다.

 

1) 정수형

솔리디티에서 정수형은 2가지 형태입니다.

 - 부호 있는 정수 : 음수 또는 양수 값을 가질 수 있습니다.

   (unit8, unit16, unit24...unit256까지 선언이 가능합니다.)

 - 부호 없는 정수 : 9 또는 양의 값을 가질 수 있습니다. 0과 양수를 제외한 음수 값도 가질 수 있어요.

   (int8, int16, int25..int256 까지 선언할 수 있습니다.)

 

예를들어 0에서 255사이의 값을 저장할때는 unit8이 적당합니다. 범위가 -128~127까지 사용해야 한다면 int8을 사용해야합니다.

정수형에 대해서는 기본적으로 덧셈, 뺄셈, 곱셈, 나눗셈, 지수, 부정, 후위증가(number++), 전위증가(++number)가 가능합니다.

 

2) Strings, bytes 배열

 

bytes배열은 여러개의 bytes를 담을 수 있는 동적배열입니다. 사용은 string과 유사해보이나, string은 이 bytes배열에 기초합니다.

 

위 예에서 보면,

myBytes32.push(byte(10)); 이 가능하나,

myString.push(byte(10));은 불가능합니다.

 

즉, bytes배열을 사용하면 문자열에 포함된 문자 하나하나를 읽기, 쓰기, 길이 등을 조작할 수 있으나 string배열은 불가능합니다. (물론 필요한 경우, bytes32 byteName = bytes(myString); 이런식으로 변경해서 사용할 순 있습니다.

 

 

3)구조체

구조체는 사용자 정의 자료형을 구성할 때 큰 도움이 됩니다.

 서로 다른 자료형을 사용하여 하나의 데이터 자료형을 만들 때 이 구조체가 필요합니다.

예를 들어 직원정보, 학교의 학생정보, 수강생정보 등을 저장하고자 할때 다양한 정보를 이 구조체를 사용하여 표현할 수 있습니다. 솔리디티에서는 위와 같은 형태로 선언하고 사용을 아래와 같이 합니다.

 

4) 주소(address)

주소(address)는 20바이트 자료형입니다. 

이더리움의 계정 주소를 만들기 위해서 설계되었으며, 크기는 160비트(20바이트)입니다.

주소자료형에는 계약계정, 외부소유계정주소등을 담을 수 있습니다.

 

5) 함수

마지막으로 함수입니다.

솔리디티에서 함수는 일반적으로 상태 변수(state variable)를 읽거나 쓰는 행위를 가장 빈번하게 합니다. 핵심적인 역할을 한다고 볼 수 있습니다. 

사용법은

function 이름, 파라미터... 와 같이 사용합니다.

파라미터 식별자는 public, pure등이 사용되는데 간략히 짚고 넘어가겠습니다.

 

- public (공개) : 외부에서 함수에 직접 접근할 수 있음

- internal (내부) : 현재의 계약 및 이 계약을 상속한 계약에서만 사용할 수 있고 외부에서 접근할 수 없음

- private (비공개) : 이걸 선언한 계약에서만 사용할 수 있음. 파생계약등에 사용불가. 

- external (외부) : 외부에서 접근할 수 있지만 내부에서는 접근할 수 없음.

- constant(읽기 전용) : 블록체인 상태를 수정할 수 없음. 상태변수를 읽고 반환은 할 수 있지만 변수 수정, 이벤트 호출등 불가

- view(뷰) : constant 함수의 별칭임

- pure : pure 함수는 읽고 쓰지 못함, 상태변수에 접근이 불가능함. 즉 함수가 현재 상태와 거래변수에 접근을 못하게 하려면 이 식별자를 사용

- payable(지불) : payable  키워드가 붙으면 호출자로부터 이더를 받을 수 있음, 송금자가 이더를 제공하지 않는 경우 호출은 실패함

 

 

6) 컴파일 후 Deploy해봅니다.

입력한 자료형의 형태를 아래와 같이 확인할 수 있습니다.

 

소스코드

gist.github.com/gwmccubbin/29c2e432465a5dd39e20e8ef6ad1f9e0

 

아래 사이트 참고하여 재작성된 강의안입니다.

www.dappuniversity.com/articles/solidity

반응형

댓글0