dukDukz
[블록체인] 솔리디티 언어 연습 (좀비) 본문
솔리디티 언어는 OOP 개념인데 이것을 배울 수 있는 사이트는
크립토 좀비 - https://cryptozombies.io/ko/
10분 고민하고 안되면 next
크립토 좀비
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
}
1. 버전
pragma solidity ^0.4.19;
-> 버전을 적는 공간
왜 필요할까?
버전 업이 되면서 실행이 안되는 경우를 방지하기 위해서.
특정 버전으로 빌드하는 것. 선언해준다.
2. 메인 함수 (OOP 의 특징)
contract ZombieFactory { }
OOP 객체지향언어 에서 메인함수라고 보면 된다.
3. 변수 선언
uint dnaDigits = 16;
부호 없는 정수: uint
uint 자료형은 부호 없는 정수로, 값이 음수가 아니어야 한다는 의미네. 부호 있는 정수를 위한 int 자료형도 있네.
js 에서 let 의 의미는? 그냥 변수 선언할때 사용한것... 사용 영역만 정해준거임 (const 안바뀌는 let 바뀌는 값)
여기서는 자료형이 정해져 있는거임
uint 는 양수값...이라고 생각하면 된다.
그래서 타입 잘못쓰면 빨간줄 뜬다.
여기서는 세미콜론 무조건!!!!!!! 써줘야함 C 랑 동일하다고 봐야할듯..
4. 연산자
다른건 동일한데 n제곱 (n승) 은 약간 다름
uint x = 5 ** 2;
// 즉, 5^2 = 25
5. 구조체
OOP 에서의 구조체
struct Zombie {
string name;
uint dna;
}
js 는 객체라는게 존재한다.
let zombie = {
name : 'zombie',
dna : 123456789,
}
zombies = []
zombies.push(zombie)
만약 여기서 name 을 바꿔서 넣고 싶다면..?
잘 떠오르지 않음...
class를 쓰는 수 밖에
class zombie{
constructor(_name,_dna){
this.name = _name,
this.dna = _dna
}
}
zombie1 = new zombie("hello",1234456789123)
zombie2 = new zombie("hello",1234456333333)
zombies=[]
zombies.push(zombie1)
zombies.push(zombie2)
그래서 구조체도 그 형태를 찍어내기 위해서 구조체를 만든다고 할 수 있다.
OOP 라서 맨처음에 data type을 줄 수 있다.
6. 배열
js 에서는
let a = [] 하면 되었다.
하지만 여기서는 선언을 해줘야하고
배열에는 항상 같은 데이터 타입만 넣어줘야 한다.
* 선언방식
데이터타입[] 변수명;
string[] newArr;
uint[] newArr;
동적배열과 정적배열..
정적 배열 - 배열 원소의 개수를 정해줌
동적 배열 - 정해주지 않음
데이터타입 뒤에 오는 [] 안에 숫자가 있냐 없냐에 따라서 정해진다.
비어있다면 동적 숫자가 채워져있다면 정적이다.
7. 접근자
oop
코드블럭안에서만 작성이 가능하다.
{
let a = 10
// 이 변수를 이 코드블럭에서만 사용할지 아님 다른 코드블럭에서도 사용할지. public private
}
{
console.log(a)
}
js 라고 하더라도 이렇게는 안된다.
그럴때 사용하는게 접근자이다.
솔리디티에서는
데이터타입 접근자 변수명;
public / private
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
저 구조체를 담을 배열을 만들건데 다른데서도 사용할 수 있게 할거고 그 변수 명은 zombies 로 할 것 이다.
8. 함수 선언
function eatHamburgers(string _name, uint _amount) {
}
// 앞에 언더바 _ 붙이는 이유는 지역변수라서.. 이건 그냥 관례?
function eatHamburgers(_name,_amount) {
}
js 에서
function ab(a,b){
return a+b
}
ab("hello","world")
// helloworld 가 나옴.
ab(1,2)
// 3 이 나옴
ab("hello",1)
// 1을 string 으로 인식해서 hello1 이 될 것이다.
let a = "1" // 실수로 데이터타입을 string 으로 넣게 됨
ab(a,1)
// 결과 11 이 됨
js 에서는 다 된다.
이게 script 언어의 단점.. 실행시키기 전까지는 모름
하지만 선언시 데이터 타입을 넣는다면?
oop 에서,
function ab(string a, string b){
return a+b
}
ab(1,2)
하면 실행하기도 전에 빨간줄이 그어진다.
9. 구조체와 배열 활용하기
구조체를 가지고 객체를 만드는 방법은....
요 구문이 함수가 된다고 생각해보자
struct Zombie {
string name;
uint dna;
}
'웹 개발 > 블록체인' 카테고리의 다른 글
[블록체인] 거래소 기본 개념 (0) | 2021.10.12 |
---|---|
[블록체인] 스마트 컨트렉트 간단 실습 + Web3 란? (2) | 2021.10.11 |
[블록체인] 이더리움 (0) | 2021.10.11 |
[블록체인] 블록체인의 개념 (0) | 2021.10.11 |
[블록체인] 프로젝트 DB 스키마 (0) | 2021.09.28 |