//2개의 원소를 담을 수 있는 고정길이의 배열;
uint[2] fixedArray;
//고정길이의 배열, 5개의 스트링을 담을 수 있다.
string[5] stringArray;
//동적배열은 고정된 크기가 없으며 계속 크기가 커질 수 있다.
uint[] dynamicArray;
구조체의 배열을 생성할 수 있다!
아까 우리가 sturct Person {uint age; string name;} 이렇게 만들었던 구조체를 이용하면
Person[] people; // 이는 동적 배열로, 원소를 계속 추가할 수 있다.
상태변수가 블록체인에 영구적으로 저장할 수 있는 것처럼 구조체의 동적배열을 생성하면
마치 데이터베이스처럼 컨트랙트에 구조화된 데이터를 저장하는데 유용하다.
Public 배열
public으로 배열을 선언할 수 있음 솔리디티는 이런 배열을 위해 getter메소드를 자동적으로 생성한다.
Person[] public people;
다른 컨트랙트들은 이 배열을 읽을 수는 있게되지만 쓸 수는 없다.
이는 컨트랙트에 공개데이터를 저장할 때 유용한 패턴이다.
지금까지 한 코드
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
// 좀비들을 다른 앱에 자랑하고 싶어서 좀비 군대 저장소를public으로 함.//Zombie구조체의 public배열을 생성하고 이름을 zombies로 한다.
Zombie[] public zombies;
}
챕터 7: 함수 선언
솔리디티에서 함수 선언
functioneatHam(string _name, uint _amount){
}
(함수의 인자명을 _로 시작하는 건 전역변수랑 구별하려고 하는 관례때문임~)
이 함수를 오출 할때는 이렇게 할 수 있겠지
eatHam("jun",100);
챕터 8: 구조체와 배열 활용하기
새로운 구조체를 생성하기
전에 만들어 놓은 Person구조체를 사용할거야.
//구조체 Person 틀
struct Person {
uint age;
string name;
}
//Person배열을 peole로 이름지음
Person[] public people;
그 틀로 새로운 Person satoshi을 찍어낼거야.
//Person틀쓸거고 변수명은 satoshi임 // age, name
Person satoshi = Person(172,"Satoshi");
//people배열에 이 사람을 추가한다.
peole.push(satoshi);
이 두 줄을 한 줄로 표현하면 이거임
people.push(Person(16,"Jun"));
챕터 9: Private / Public 함수
솔리디티에서 함수는 기본적으로 public으로 선언된다.
누구나 또는 다른 어느 컨트랙트가 우리의 컨트랙트의 함수를 호출하고 코드를 실행할 수 있다는 의미다.
하지만 이건 공격에 취약해질 수 있는 가능성이 있어서
기본적으로 함수는 private로 선언하고 공개할 함수만 public으로 선언하는 게 좋다