2022.06.11 - [블록체인] - [Solidity] Solidity 문법 정리 (1)
이 게시물은 이전 게시물인 solidity 문법 정리 (2) 와 이어지는 게시물입니다.
매핑(mapping)
javascript의 Map이나 java의 haspmap과 비슷한 역할을 하는 친구입니다.
key-value 관계로 데이터를 저장하는 것이 특징입니다.
mapping (uint => string) userIdToName;
// 값 저장
userIdToName[1]="jason";
// 값 호출
userIsToName[1] // jason
msg.sender
msg.sender
는 현재 함수를 호출한 사람(혹은 스마트 컨트랙트)의 주소를 가리킵니다.
여기 msg는 이더리움 플랫폼에 발행한 메시지 호출에 대한 내용을 담은 변수입니다.
require
function myFunction(uint a, uintb){
require(a==b); // a, b가 같은지 확인하고 같지 않다면 함수를 종료하고 에러 발생
return a+b;
}
require과 비슷하게 assert도 조건식이 거짓인 경우 예외를 발생시키는데요, assert는 함수의 에러를 테스트하기 위한 용도라는 점에서 차이를 보입니다.
위의 require는 if
와 revert
를 사용해서도 구현할 수 있는데요, 아래와 같이 구현할 수 있습니다.
function myFunction(uint a, uintb){
if(a!=b) revert();
return a+b;
}
revert가 호출되면 전체 트랜잭션이 실패하고 트랜잭션에서 발생한 벽여 내용이 트랜잭션 실행 이전 상태로 돌아가게 됩니다.
상속
상속은 아래와 같이 구현할 수 있습니다.
이 경우에는 A가 B의 함수들을 모두 접근할 수 있게 됩니다.
contract A{}
// A가 B를 상속
contract A is B{}
Storage와 Memory
storage와 memory는 변수명 앞에 붙여주게 되며 저장할 수 있는 공간을 의미합니다.
- storage: 영구적으로 저장
- memory: 임시적으로 저장
인터페이스(interface)
solidity에서 인터페이스는 java에서의 인터페이스의 의미가 비슷해 보입니다.
자식 컨트랙트를 위한 틀이며, 추상함수로만 구성되어야 한다고 합니다.
- 추상함수: 함수의 이름, 입력 매개변수, 출력만 선언하고 내용을 없는 함수 (틀만 있는 함수)
인터페이스는 몇가지 특징을 가집니다.
- 다른 contract는 상속할 수 없으나 interface는 상속할 수 있습니다.
- contract가 public이더라도 interface 내에서 선언된 함수는 모두 external이어야 합니다.
- constructor, 상태 변수, modifier를 선언할 수 없습니다.
interface에 대한 추가적인 정보는 공식 문서에서 더 얻을 수 있습니다.
cryptoZombie의 lecture에서는 contract 선언자를 이용해서 인터페이스를 정의해주는데요, 최신 버전에서는 interface 선언자를 이용해서 인터페이스를 정의해줍니다.
interface NumberInterface {
function getNum(address _myAddress) public view returns (uint);
}
다수의 반환값
javascript의 구조분해할당과 비슷한 문법으로 보입니다.
function multipleReturns() internal returns(uint a, uint b, uint c) {
return (1, 2, 3);
}
function processMultipleReturns() external {
uint a;
uint b;
uint c;
(a, b, c) = multipleReturns();
(,,c) = multipleReturns(); // 하나의 값만 받는 경우
}
if
if의 사용 방법은 다른 언어의 if문 사용과 똑같습니다.
출처
'블록체인' 카테고리의 다른 글
[블록체인] 공부1 (0) | 2023.07.28 |
---|---|
Metamask와 Remix IDE로 Smart Contract 배포하기 (0) | 2022.06.12 |
[Solidity] Solidity 문법 정리 (1) (0) | 2022.06.11 |
이더리움 플랫폼 데이터 용어 정리 2 (0) | 2022.05.28 |
이더리움 플랫폼 데이터 용어 정리 1 (0) | 2022.05.22 |