본문 바로가기
Develop/Solidity

[Solidity] 1. 변수

by Tarra 2023. 2. 14.

 

 

 


개인 공부 후 자료를 남겨놓기 위한 목적이므로,
생략되거나 오류가 있을 수 있음을 알립니다.

 

 

[Solidity] 1. 변수

[Solidity] 2. 간단한 송금 시스템 만들어보기 + 계정에 대한 이론

[Solidity] 3. 스마트 컨트랙트 시작, 중단, 정지하기

[Solidity] 4. mapping

[Solidity] 5. 예외처리 (require와 assert)

[Solidity] 6. 생성자, 대비책 함수 (view / pure / getter)

[Solidity] 7. 제어자, 상속, file import

[Solidity] 8. 이벤트 및 반환 변수

 

 


- 참고했던 document

▶ Become Ethereum Blockchain Developer

https://ethereum-blockchain-developer.com/000-learn-ethereum/

 

Overview and Pricing - Become Ethereum Blockchain Developer

Learn Blockchain Development - Become Web3 Expert Ethereum-blockchain-developer.com is offering web developers, enterprise developers and software development professionals self-paced video courses with interactive labs to become successful Ethereum Blockc

ethereum-blockchain-developer.com

 

Solidity_doc

https://docs.soliditylang.org/en/v0.8.16/

 

Solidity — Solidity 0.8.16 documentation

1. Understand the Smart Contract Basics If you are new to the concept of smart contracts we recommend you to get started by digging into the “Introduction to Smart Contracts” section, which covers: 2. Get to Know Solidity Once you are accustomed to the

docs.soliditylang.org

 

▶ 솔리디티_doc

https://solidity-kr.readthedocs.io/ko/latest/

 

Solidity — Solidity 0.5.10 documentation

Solidity는 스마트 컨트랙트를 구현하기 위한 컨트랙트 기반의 고급 프로그래밍 언어입니다. Solidity는 C++, Python, 그리고 JavaScript의 영향을 받아 만들어졌습니다. 그리고 Ethereum Virtual Machine(EVM)에서

solidity-kr.readthedocs.io

 


 

  • 블록체인의 특징

스마트 컨트랙트를 배포하면, 스마트 컨트랙트를 블록체인에서 실행하고,

그에 따라 네트워크의 모든 노드가 해당 트랜잭션을 실행한다.

이후 블록체인의 모든 노드가 블록체인의 사본을 가지고 있어 트랜잭션이 유효한지 확인한다.

(참여하는 모든 노드가 하나의 원장을 공유)

 

 

 


 

1. 변수

모든 변수는 선언 이후에 할당을 하지 않는다면 유형과는 상관없이 기본값으로 초기화된다.

(부호 없는 정수는 0, 문자열은 빈 값, bool은 false)

또한 모든 공개 변수 ( public )은 자동으로 getter 함수를 얻는다.

 

 

 

1. 정수

“숫자” 는 정수(int) 와 부호 없는 정수(uint) 로 나뉘어 진다.

이 둘의 범위는 8bit에서 256bit까지 8비트씩 증가한다.

8과 256처럼 크기가 다른 이유는 가스비용 때문이다.

 

 

1. 부호 없는 정수

uint 로 사용한다.

다음과 같이 선언하며, getter 함수를 이용해 변수를 바꿀 수 도 있다.

해당 코드

는 uint256이므로 0 ~ 2^256 -1 까지 저장이 가능하다.

여느 스마트 컨트랙트와 마찬가지로 배포(Deploy)를 통해 함수의 실행이 가능하며,

처음에 변수에 할당을 하지 않았으므로 0이 초기값으로 들어가 있는 것과,

 

다음과 같은 트랜잭션을 통해 새로운 값을 입력할 수 있는 것을 확인할 수 있다.

 

 

2. 정수

int로 사용한다.

다음의 코드와 같이 int256 로 선언을 한다면 -2^256 / 2 ~ 2^256 / 2의 숫자를 다룰 수 있다.

 

 

 

 

💡함수 (function)

 

변수를 선언 후 function을 통해 새로운 변수를 할당하는 것을 볼 수 있는데, 이 처럼 function을 활용하여 입력이 갈때마다 숫자가 1이 떨어지거나, 올리는 등의 활용이 가능하다.

 

 

2. Bool

참, 거짓. 두 가지로 나누어지는 가장 쉬운 변수이다.

다음과 같이 선언을 진행하며,

 

 

자바와 자바스크립트와 같이 || , && 등을 활용하는 것도 가능하다.

 

 

3. Address

이더리움 블록체인에서 하는 모든 상호작용, 트랜잭션등이 주소 기반으로 이루어진다.

하나의 주소는 보통 20byte로 이루어져 있으며, 특정한 검사를 통과하면 주소로 승인된다.

 

 

다음과 같이 변수를 선언하고 할당이 가능하며,

특정한 함수를 이용하여 해당 주소의 잔액을 확인하거나,

 

 

송금을 하는 등의 상호작용이 가능하다.

 

 

4. String

Solidity에서는 문자열을 활용하기 위한 함수가 매우적고, 저장을 하기 위한 단가가 매우 비싸기 때문에 매우 번거롭다. 따라서 사용 자체를 피하는 것이 좋다.

 

다음과 같이 코드를 작성하며,

문자열이나 다른 참조 유형이 있다면 memory 키워드를 입력해 사용해야 한다.

(솔리디티에게 스토리지 변수가 아니라 메모리에 저장될 것이라는 것을 알려줘야함.)

 

 

문자열은 내부적으로 바이트 배열로 저장되며, 출력할 때 UTF-8로 다시 변환되어 출력된다는 특징이 있다.