Skip to content

Commit

Permalink
lesson 1 translated
Browse files Browse the repository at this point in the history
  • Loading branch information
SeanICho committed Jan 27, 2018
1 parent 0c41e26 commit afb2910
Show file tree
Hide file tree
Showing 19 changed files with 1,384 additions and 0 deletions.
11 changes: 11 additions & 0 deletions ko/1/00-overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
title: 좀비 공장 만들기
header: 환영한다, 인간이여!
roadmap: roadmap.jpg
---

그러니까 자네가 **크립토 좀비**가 되기 위한 자질을 갖추었다고 생각한다 말이지?

이 코스는 **이더리움 게임을 만드는** 방법을 가르쳐 줄 걸세.

이 코스는 솔리디티 초보자를 위해 설계되었지만 학습자가 자바스크립트 같은 언어로 프로그래밍한 경험이 있다고 가정하지.
75 changes: 75 additions & 0 deletions ko/1/arrays.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
title: 배열
actions: ['정답 확인하기', '힌트 보기']
material:
editor:
language: sol
startingCode: |
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
// 여기서 시작
}
answer: >
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
}
---

어떤 것의 모음집이 필요할 때 **_배열_**을 사용할 수 있네. 솔리디티에는 **_정적_** 배열과 **_동적_** 배열이라는 두 종류의 배열이 있지:

```
// 2개의 원소를 담을 수 있는 고정 길이의 배열:
uint[2] fixedArray;
// 또다른 고정 배열으로 5개의 스트링을 담을 수 있다:
string[5] stringArray;
// 동적 배열은 고정된 크기가 없으며 계속 크기가 커질 수 있다:
uint[] dynamicArray;
```

**_구조체_**의 배열을 생성할 수도 있다. 이전 챕터의 `Person` 구조체를 이용하면:

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

상태 변수가 블록체인에 영구적으로 저장될 수 있다는 걸 기억하나? 그러니 이처럼 구조체의 동적 배열을 생성하면 마치 데이터베이스처럼 컨트렉트에 구조화된 데이터를 저장하는 데 유용하네.

## Public 배열

`public`으로 배열을 선언할 수 있지. 솔리디티는 이런 배열을 위해 **_getter_** 메소드를 자동적으로 생성하지. 구문은 다음과 같네:

```
Person[] public people;
```

그러면 다른 컨트렉트들이 이 배열을 읽을 수 있게 되지 (쓸 수는 없네). 이는 컨트렉트에 공개 데이터를 저장할 때 유용한 패턴이지.

# 직접 해보기

우리 앱에 좀비 군대를 저장하고 싶네. 그리고 우리 좀비들을 다른 앱에 자랑하고 싶네. 그러니 좀비 군대 저장소를 public으로 해야 하네.

1. `Zombie` **_구조체_**의 public 배열을 생성하고 이름을 `zombies`로 한다.
94 changes: 94 additions & 0 deletions ko/1/arraysstructs2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
---
title: 구조체와 배열 활용하기
actions: ['정답 확인하기', '힌트 보기']
material:
editor:
language: sol
startingCode: |
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function createZombie(string _name, uint _dna) {
// 여기서 시작
}
}
answer: >
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function createZombie(string _name, uint _dna) {
zombies.push(Zombie(_name, _dna));
}
}
---

### 새로운 구조체 생성하기

지난 예시의 `Person` 구조체를 기억하나?

```
struct Person {
uint age;
string name;
}
Person[] public people;
```

이제 새로운 `Person`를 생성하고 `people` 배열에 추가하는 방법을 살펴 보도록 하지.

```
// 새로운 사람을 생성한다:
Person satoshi = Person(172, "Satoshi");
// 이 사람을 배열에 추가한다:
people.push(satoshi);
```

이 두 코드를 조합하여 깔끔하게 한 줄로 표현할 수 있네:

```
people.push(Person(16, "Vitalik"));
```

참고로 `array.push()`는 무언가를 배열의 ****에 추가해서 모든 원소가 순서를 유지하도록 하네. 다음 예시를 살펴 보도록 하지:

```
uint[] numbers;
numbers.push(5);
numbers.push(10);
numbers.push(15);
// numbers 배열은 [5, 10, 15]과 같다.
```

# 직접 해보기

createZombie 함수가 무언가 할 수 있도록 만들어 보세!

1. 함수의 몸체에 코드를 넣어 새로운 `Zombie`를 생성하여 `zombies` 배열에 추가하도록 한다. 새로운 좀비를 위한 `name``dna``createZombie`함수의 인자값이어야 한다.
2. 코드를 한 줄로 간결하게 작성해 보자.
56 changes: 56 additions & 0 deletions ko/1/contracts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
title: "컨트렉트"
actions: ['정답 확인하기', '힌트 보기']
material:
editor:
language: sol
startingCode: |
pragma solidity //1. 여기에 솔리디티 버전 적기
//2. 여기에 컨트렉트 생성
answer: >
pragma solidity ^0.4.19;
contract ZombieFactory {
}
---

완전 기초부터 시작하기:

솔리디티 코드는 **컨트렉트** 안에 싸여 있지. `컨트렉트`는 이더리움 애플리케이션의 기초 건축 블록으로, 모든 변수와 함수는 어느 한 컨트렉트에 속하게 마련이지. 컨트렉트는 자네의 모든 프로젝트의 시작 지점이라고 할 수 있지.

비어 있는 `HelloWorld` 컨트렉트는 다음과 같네:

```
contract HelloWorld {
}
```

## Version Pragma

모든 솔리디티 소스 코드는 "version pragma"로 시작해야 하는데, 이는 해당 코드가 이용해야 하는 솔리디티 버전을 선언하는 것이지. 이를 통해 이후에 출시될 컴파일러 버전이 잠재적으로 코드를 깨뜨리는 변화를 가져올 수 있다는 문제를 예방하고자 하는 거지.

선언은 다음과 같이 하면 되네: `pragma solidity ^0.4.19;` (이 코스 집필 시 최신 버전이 0.4.19임).

종합하자면 컨트렉트 초기 뼈대는 다음과 같네. 새로운 프로젝트를 시작할 때마다 이 뼈대를 제일 먼저 작성해야 하지:

```
pragma solidity ^0.4.19;
contract HelloWorld {
}
```

# 직접 해보기

우리의 좀비 군대 생성을 시작하기 위해 `ZombieFactory`라는 기본 컨트렉트를 생성해 보세!

1. 우측 박스에 우리 컨트렉트가 솔리디티 버전 `0.4.19`를 쓸 수 있도록 설정한다.

2. `ZombieFactory`라는 빈 컨트렉트를 생성한다.

다 마쳤으면 아래 "정답 확인하기"를 클릭하게. 막히는 부분이 있으면 "힌트 보기"를 클릭할 수도 있네.
50 changes: 50 additions & 0 deletions ko/1/datatypes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
title: 상태 변수 & 정수
actions: ['정답 확인하기', '힌트 보기']
material:
editor:
language: sol
startingCode: |
pragma solidity ^0.4.19;
contract ZombieFactory {
// 여기서 시작
}
answer: >
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
}
---

잘 했네! 이제 우리 컨트렉트를 위한 뼈대를 갖추게 되었네. 이제 솔리디티가 변수를 다루는 방법을 배워 보도록 하지.

**_상태 변수_**는 컨트렉트 저장소에 영구적으로 저장되네. 즉, 이더리움 블록체인에 기록된다는 거지. 데이터베이스에 데이터를 쓰는 것과 동일하네.

##### 예시:
```
contract Example {
// 이 변수는 블록체인에 영구적으로 저장된다
uint myUnsignedInteger = 100;
}
```

이 예시 컨트렉트에서는 `myUnsignedInteger`라는 `uint`를 생성하여 100이라는 값을 배정했네.

## 부호 없는 정수: `uint`

`uint` 자료형은 부호 없는 정수로, **값이 음수가 아니어야 한다는** 의미네. 부호 있는 정수를 위한 `int` 자료형도 있네.

> 참고: 솔리디티에서 `uint`는 실제로 `uint256`, 즉 256비트 부호 없는 정수의 다른 표현이지. `uint8`, `uint16`, `uint32` 등과 같이 uint를 더 적은 비트로 선언할 수도 있네. 하지만 앞으로의 레슨에서 다루게 될 특수한 경우가 아니라면 일반적으로 단순히 `uint`를 사용하지.
# 직접 해보기

우리의 좀비 DNA는 16자리 숫자로 결정될 걸세.

`dnaDigits`라는 `uint`를 선언하고 `16`이라는 값을 배정해 보게.
Loading

0 comments on commit afb2910

Please sign in to comment.