본문 바로가기

Language/Solidity

solidity 기본 문법 1. contract, variable, struct, private, public with 크립토좀비

 각 챕터는 크립토좀비의 레슨과 챕터와 일치하게 작성했습니당



챕터 1-2. 컨트랙트


실습 시작

pragma solidity //1. 여기에 솔리디티 버전 적기

//2. 여기에 컨트랙트 생성

 

 

챕터 1-3. 상태 변수 & 정수


상태 변수
: 컨트랙트 저장소에 영구적으로 저장

uint
: 부호 없는 정수, 값이 음수가 아니어야 한다

int
: 부호 있는 정수, 음, 양수 모두 가능

string
: 임의의 길이를 가진 UTF-8 데이터



챕터 1-4. 수학 연산


solidity의 수학연산은 대부분의 프로그래밍 언어의 수학 연산과 동일

덧셈 : x + y

뺄셈 : x - y,

곱셈 : x * y

나눗셈 : x / y

나머지 연산 : x%y ( x를 y로 나눈 값의 나머지 )

지수 연산 : x^y ( x의 y승 )


챕터 1-5. 구조체


구조체를 통해 여러 특성을 가진, 보다 복잡한 자료형을 생성

ex)

struct Person {
  uint age;
  string name;
}

 


챕터 1-6. 배열


어떤 것의 모음집이 필요할 때 사용

정적 배열
고정 길이의 배열

ex)

// 2개의 원소를 담을 수 있는 고정 길이의 배열
uint[2] fixedArray;
// 또다른 고정 배열으로 5개의 스트링을 담을 수 있다
string[5] stringArray;



동적 배열
고정된 크기가 없으며 계속 크기가 커질 수 있다

ex)

Person[] people; // 동적 배열로, 원소를 계속 추가할 수 있다




챕터 1-7. 함수 선언


함수 선언
ex)

function eatHamburgers(string _name, uint _amount) {
...
}



함수 호출
ex)

eatHamburgers("vitalik", 100);



** 함수 인자명을 언더스코어(_)로 시작해서 전역 변수와 구별하는 것이 관례 (의무는 아님) **



챕터 1-8 구조체와 배열 활용하기


** 구조체를 활용하여 새로운 구조체 Person를 생성하고 people 배열에 추가하는 방법 알아보기 **

ex) Person 구조체

struct Person {
  uint age;
  string name;
  	...
}

//parson구조체의 가변배열 형의 public 제한자를 가진 객체 people 만들기
Person[] public people;

// 새로운 객체 생성
Person satoshi = Person(172, "Satoshi");

// 생성 객체를 미리 만든 배열에 추가
people.push(satoshi);

// 위의 두줄을 한줄로 나타내기 ( push()함수 사용 )
people.push(Person(16, "Vitalik"));



**  array.push()는 무언가를 배열의 끝에 추가해서 모든 원소가 순서를 유지하도록 한다 **


챕터 1-9. Private / Public 함수


solidity에서 함수는 기본적으로 public으로 선언

즉, 누구나 (혹은 다른 어느 컨트랙트가)

public으로 선언된 컨트랙트의 함수를 호출하고 코드를 실행할 수 있다는 의미

public으로 선언된 컨트랙트는 외부 공격에 취약

때문에, 기본적으로 함수를 private으로 선언하고, 공개할 함수만 public으로 선언하는 것이 바람직하다

ex)

uint[] numbers;

function _addToArray(uint _number) private {
  numbers.push(_number);
}



위의 예시에서 볼 수 있듯,

private 키워드는 함수명 다음에 적는다

함수 인자명과 마찬가지로 private 함수명도 언더바(_)로 시작하는 것이 관례