솔리디티(Solidity) - 기본문법(1)

민정·2023년 1월 31일
0

핀테크(Fintech)

목록 보기
3/7
post-thumbnail

🍎 솔리디티란?


솔리디티(Solidity) 는 계약 지향 프로그래밍 언어로, 블록체인 플랫폼의 스마트 계약 로직을 작성할 때 사용된다.

솔리디티의 특징

  • 정적 타입 언어
  • Ethereum Virtual Machine(EVM) 위에서 실행됨
  • 문장의 끝을 세미콜론(;)으로 표현

코드 작성 시 선언

솔리디티 사용 시 맨 앞에 버전을 선언해주어야 한다.

pragma solidity ^0.4.19;

컨트랙트

pragma solidity ^0.4.19;

contract ZombieFactory {
}

모든 코드의 실행은 contract 안에서 실행되어야 한다.

자료형

주요 자료형

  • uint (부호 없는 정수형)
  • int (정수형)
  • bool (논리 자료형)
  • string (UTF-8 인코딩 문자열)
  • bytes (바이트)
  • address (이더리움 주소 값)
pragma solidity ^0.4.19;

contract ZombieFactory {
		uint a = 16;
}

구조체

struct 키워드로 생성할 수 있으며, 컨트랙트 내부에서 정의되어야 한다.

pragma solidity ^0.4.19;

contract ZombieFactory {
	uint a = 16;
	uint b = a **10;

	struct Zombie {
		string name;
		uint dna;

	}
}

배열

솔리디티에는 정적 배열과 동적 배열이 존재

  • 정적 배열 : uint[4] fixedArray 처럼 미리 사용할 배열의 크기를 지정
  • 동적 배열 : uint[] dynamicArray 처럼 고정된 크기가 없어 계속 커질 수 있음.
  • new 키워드를 활용한 배열 : new uint 처럼 길이 인자를 명시해주어야 함
pragma solidity ^0.4.19;

contract ZombieFactory {
	uint a = 16;
	uint b = a ** 10 ;

	struct Zombie {
		string name;
		uint dna;

	}

	Zombie[10] zombies;  // 좀비 구조체를 저장하는 크기 5의 배열 
	Zombie[10] public zombies; // 다른 컨트랙트에서도 zombies 배열 사용 가능 
	uint[] result = new uint[](owenerZombieCount[_owner]); // new int를 활용한 배열 선언 
}

저장공간

(Strage & Memory)

  • Strorage : 아무것도 명시하지 않으면 default 값. 비싸다는 단점
  • Memory : 메모리는 호출된 함수 내에서만 효력이 있다.

함수

function 키워드를 활용해 함수 생성 가능

→ return 값이 존재하면 returns (리턴해줄 값 ){} 으로 표현 가능

함수 선언 형식

function 함수이름 (매개변수 1, 매개변수 2 …) returns(리턴값 1, 리턴값 2 …) { return 리턴값;}

pragma solidity ^0.4.19;

contract ZombieFactory {
	function createZombie(string _name,uint _dna) {
	}
}

함수의 접근자 지정

(Private & Public)

private & public 속성의 접근자로 지정 가능

< 아무것도 명시 하지 않으면 기본적으로 public 속성으로 선언된다.>

  • Private 를 붙이면 컨트랙트의 외부에서는 함수를 호출할 수 없다.
  • 접근 지정자는 매개변수 바로 다음에 지정
pragma solidity ^0.4.19;

contract ZombieFactory {
	function createZombie(string _name, uint _dna) private {
	}
}

(internal & external)

internal, external 함수 접근 제어자도 존재

  • internal : private과 유사, 상속을 받은 자식 컨트랙트에서 함수 사용 가능
  • external : 컨트랙트의 외부에서만 호출 가능
contract Zombiefactory{
	uint count = 0;	
	function countZombie() internal {
		count ++;
	}
}
contract ZombieFeeding is Zombiefactory { // 상속 
	
	countZombie();
}

함수의 반환 값 지정

함수가 반환하는 타입(자료형) 을 returns 키워드를 통해 함수 선언부에 명시적으로 드러내야 함

pragma solidity ^0.4.19;

contract ZombieFactory {
	
	function createZombie(string _name, uint _dna) public returns (string) {
		return "create";		
	}
}

함수 제어자 지정

컨트랙트의 변수를 읽고 쓰는지 여부에 따라 제어자 지정

이더리움에서 변수의 상태값을 변화시켜주는 것만으로도 가스 사용료를 낼 수 있기 때문에 함수 제어자를 사용하여 비용 절감을 할 수 있다.

  • view : 컨트랙트의 변수를 읽기만 할 때
  • pure: 컨트랙트의 변수를 읽지도, 쓰지도 않을 때
pragma solidity ^0.4.19;

contract ZombieFactory{
	function _generateRandomDna(string _str) private pure returns (string) {
		
	}
}

require

조건이 참이면 함수를 실행하고, 참이 아니면 함수를 실행하지 않고 에러를 반환하는 명령문

pragma solidity ^0.4.19;

contract ZombieFactory {
	function createZombie(string _name,uint _dna) public returns(string){
		require(_name == "좀비"); //들어온 함수 인자값 _name이 좀비이면 참
		
		return "좀비 create";
	}
}

값 반환

솔리디티 함수에서는 한번에 여러 값을 반환 받을 수 있다

특정값만 받을 때 , 콤마를 기준으로 두고 받으면 된다


contract ZombieFeeding {
	function getKitty(uint256 _id) external view returns (
			bool isGestating,
			bool isReady,
			uint256 cooldownIndex,
			uint256 generation,
			uint256 genes
	);
	uint dna;
	(,,,,dna) = getKitty(id);

}

참고자료

솔리디티 기본 문법
크립토 좀비 실습

profile
공부 기록장

0개의 댓글