Skip to content

Commit 8cd8db6

Browse files
committed
Add Korean Translation
1 parent 42bea95 commit 8cd8db6

File tree

21 files changed

+1092
-3
lines changed

21 files changed

+1092
-3
lines changed

Diff for: exercises/async_loops/problem.ko.md

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
이 코드는 동작하지 않습니다!
2+
3+
어떤 자바 개발자가 이 끔찍한 코드를 우리에 코드베이스에 테스트도 안하고 커밋했습니다!
4+
5+
```js
6+
function loadUsers(userIds, load, done) {
7+
var users = []
8+
for (var i = 0; i < userIds.length; i++) {
9+
users.push(load(userIds[i]))
10+
}
11+
return users
12+
}
13+
14+
module.exports = loadUsers
15+
```
16+
17+
# 해야할 일
18+
19+
이 코드를 고치세요! 콜백은 모든 사용자가 로드된 후에 호출되어야만 합니다.
20+
사용자의 순서는 공급된 사용자의 아이디의 순서와 일치해야 합니다. 이 함수는 비동기이기 때문에, 반환 값을 걱정하지 않아도 됩니다.
21+
22+
## 인자
23+
24+
* userIds: 사용자 아이디(숫자)의 배열
25+
* load: 사용자 객체를 로드할때 사용하는 함수. 숫자 아이디와 콜백을 받음. 콜백은 특정 아이디로 로딩된 사용자(사용자거나 널)와 함께 호출됩니다.
26+
* done: (`load`로 검색된) 사용자 객채의 배열을 받는 함수.
27+
28+
## 조건
29+
30+
* for/while 반복문을 사용하지 마세요. (Array#forEach는 괜찮습니다.)
31+
* `done`의 결과의 순서는 `userIds`의 순서와 같아야 합니다.
32+
* Users should be loaded in parallel i.e. the entire job should not take more than 1 second.
33+
* 사용자들은 별렬로 로드되어야 합니다. 전체 작업은 1초이상 걸리면 안됩니다.
34+
* 헬퍼같은 불필요한 함수를 만들지 마세요.
35+
36+
## 힌트
37+
38+
* 순서를 관리하기 위해 정렬할 필요는 없습니다.
39+
* `console.log`를 사용하면 확인에 영향을 줍니다. `console.log``functional-javascript run`할 때만 사용하세요.
40+
41+
## 템플릿
42+
43+
```js
44+
function loadUsers(userIds, load, done) {
45+
var users = []
46+
for (var i = 0; i < userIds.length; i++) {
47+
users.push(load(userIds[i]))
48+
}
49+
return users
50+
}
51+
52+
module.exports = loadUsers
53+
```

Diff for: exercises/basic_call/problem.ko.md

+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
JavaScript는 'duck' 타이핑을 구현합니다. 덕 타이핑은 동적 타이핑의 형식입니다. 이는 특정 클래스에서 상속하거나, 특정 인터페이스에서 구현하는 대신, 객체의 메소드에서 바른 형식인지 파악합니다. 이 개념의 이름은 James Whitcomb Riley가 만든 덕 데스트에 기인하고 다음 문장으로 요약할 수 있습니다.
2+
3+
"오리처럼 걷고, 오리처럼 수영하고, 오리처럼 꽥꽥대는 새가 있다면, 나는 그 새를 오리라 부르겠다"
4+
5+
JavaScript에서 탄탄한 프로그램을 작성하려다보면 종종 객채가 우리가 원하는 형인지 확인할 필요가 있습니다.
6+
7+
객체가 직접 구현한 프로퍼티를 '가지고' 있는지를 확인하려면 (즉, 프로토타입네서 상속되지 않았는지 확인하려면) Object#hasOwnProperty를 사용할 수 있습니다.
8+
9+
```js
10+
var duck = {
11+
quack: function() {
12+
console.log('quack')
13+
}
14+
}
15+
16+
duck.hasOwnProperty('quack') // => true
17+
```
18+
19+
duck에 .hasOwnProperty 메소드를 구현한적이 없는데 어디서 왔을까요?
20+
21+
duck은 `{}` 구문으로 만들어 쳤으므로 Object.prototype에서 상속됩니다.
22+
23+
```js
24+
var object = {quack: true}
25+
26+
Object.getPrototypeOf(object) === Object.prototype // => true
27+
object.hasOwnProperty('quack') // => true
28+
```
29+
30+
Object.prototype에서 상속되지 않은 객체라면 어떨까요?
31+
32+
```js
33+
// 'null' 프로토타입으로 객체를 생성.
34+
var object = Object.create(null)
35+
object.quack = function() {
36+
console.log('quack')
37+
}
38+
39+
Object.getPrototypeOf(object) === Object.prototype // => false
40+
Object.getPrototypeOf(object) === null // => true
41+
42+
object.hasOwnProperty('quack')
43+
// => TypeError: Object object has no method 'hasOwnProperty'
44+
```
45+
46+
'객체처럼 보이는 것'에 `this` 값과 같이 호출할 수 있다면 `Object.prototype`를 통해 `hasOwnProperty`를 사용할 수 있습니다. Function#call을 사용하면 변경된 `this` 값으로 어떤 함수든 호출할 수 있습니다.
47+
48+
```js
49+
// 호출할 때 넘기는 첫번째 인자는 `this`의 값이 됩니다
50+
// 나머지 인자는 함수에 넘기는 인자가 됩니다
51+
52+
Object.prototype.hasOwnProperty.call(object, 'quack') // => true
53+
```
54+
55+
# 해야할 일:
56+
57+
'quack' 프로퍼티가 직접 정의된 인자의 갯수를 반환하는 `duckCount` 함수를 작성하세요. 프로토타입에서 상속된 값은 재외하셔야 합니다.
58+
59+
예제:
60+
61+
```js
62+
var notDuck = Object.create({quack: true})
63+
var duck = {quack: true}
64+
duckCount(duck, notDuck) // 1
65+
```
66+
## 인자
67+
68+
* 0-20개의 인자를 넘깁니다. 각 인자는 어떤 프로퍼티도 가질 수 있는 모든 형이 가능합니다. 몇몇 인자는 'quack' 프로퍼티를 가집니다.
69+
70+
## 조건
71+
72+
* for/while 반복문이나 Array#forEach를 사용하지 마세요.
73+
* counter/accumulator 변수를 만들지 마세요.
74+
* 헬퍼같은 불필요한 함수를 만들지 마세요.
75+
76+
## 힌트
77+
78+
* 모든 함수에서 사용할 수 있는 `arguments` 변수는 *배열*처럼 'quack'하는 *객체*입니다.
79+
80+
```js
81+
{
82+
0: 'argument0',
83+
1: 'argument1', // etc
84+
length: 2
85+
}
86+
```
87+
88+
## 참고
89+
90+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call
91+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
92+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
93+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice#Array-like
94+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments
95+
96+
97+
## 템플릿
98+
99+
```js
100+
function duckCount() {
101+
// 여기에 해답을 적으세요
102+
}
103+
104+
module.exports = duckCount
105+
```

Diff for: exercises/basic_every_some/problem.ko.md

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# 해야할 일
2+
3+
유효한 사용자의 목록을 받아, 주어진 사용자가 원래 사용자의 목록에 있으면 true를 반환하는 함수를 반환하세요.
4+
5+
아이디가 같은지만 확인하면 됩니다.
6+
7+
## 예제
8+
9+
```js
10+
var goodUsers = [
11+
{ id: 1 },
12+
{ id: 2 },
13+
{ id: 3 }
14+
]
15+
16+
// 선언할 함수 이름은 `checkUsersValid`입니다
17+
var testAllValid = checkUsersValid(goodUsers)
18+
19+
testAllValid([
20+
{ id: 2 },
21+
{ id: 1 }
22+
])
23+
// => true
24+
25+
testAllValid([
26+
{ id: 2 },
27+
{ id: 4 },
28+
{ id: 1 }
29+
])
30+
// => false
31+
```
32+
33+
## 인자
34+
35+
* goodUsers: 유효한 사용자의 목록
36+
37+
Array#some과 Array#every를 사용해 export된 함수에 넘겨진 배열에 반환된 함수에 넘겨진 모든 사용자가 있는지 확인하세요.
38+
39+
## 조건
40+
41+
* for/while 반복문이나 Array#forEach를 사용하지 마세요.
42+
* 헬퍼같은 불필요한 함수를 만들지 마세요.
43+
44+
## 참고
45+
46+
* https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/every
47+
* https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some
48+
49+
## 템플릿
50+
51+
```js
52+
function checkUsersValid(goodUsers) {
53+
return function allUsersValid(submittedUsers) {
54+
// 여기에 해답을 적으세요
55+
};
56+
}
57+
58+
module.exports = checkUsersValid
59+
```

Diff for: exercises/basic_filter/problem.ko.md

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# 해야할 일
2+
Array#filter를 사용해 `getShortMessages`를 호출하는 함수를 작성하세요.
3+
4+
`getShortMessages`는 '.message' 프로퍼티를 가지는 배열을 받아 *< 50 자보다 적은* 메세지의 배열을 반환합니다.
5+
6+
이 함수는 *메세지를 가진 객체가 아닌,* 메세지의 배열을 반환해야합니다.
7+
8+
## 인자
9+
10+
* messages: 밑에 있는 것 처럼 생긴 임의의 객체를 10~100개 가지는 배열
11+
12+
```js
13+
{
14+
message: 'Esse id amet quis eu esse aute officia ipsum.' // 렌덤
15+
}
16+
```
17+
18+
## 조건
19+
20+
* for/while 반복문이나 Array#forEach를 사용하지 마세요.
21+
* 헬퍼같은 불필요한 함수를 만들지 마세요.
22+
23+
## 힌트
24+
25+
* 배열 메소드를 몇 개 연결해 보세요.
26+
27+
## 예제
28+
29+
```
30+
[ 'Tempor quis esse consequat sunt ea eiusmod.',
31+
'Id culpa ad proident ad nulla laborum incididunt.',
32+
'Ullamco in ea et ad anim anim ullamco est.',
33+
'Est ut irure irure nisi.' ]
34+
```
35+
36+
## 참고
37+
38+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
39+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
40+
41+
## 템플릿
42+
43+
```js
44+
function getShortMessages(messages) {
45+
// 여기에 해답을 적으세요
46+
}
47+
48+
module.exports = getShortMessages
49+
```

Diff for: exercises/basic_map/problem.ko.md

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# 해야할 일
2+
3+
다음 코드의 for 반복문을 Array#map으로 바꾸세요.
4+
5+
```js
6+
function doubleAll(numbers) {
7+
var result = []
8+
for (var i = 0; i < numbers.length; i++) {
9+
result.push(numbers[i] * 2)
10+
}
11+
return result
12+
}
13+
14+
module.exports = doubleAll
15+
```
16+
17+
## 인자
18+
19+
* numbers: 0에서 9사이의 정수를 0~20개 가지는 배열
20+
21+
## 조건
22+
23+
* Array.prototype.map()을 사용하셔야 합니다.
24+
* for/while 반복문이나 Array.prototype.forEach를 사용하지 마세요.
25+
* 헬퍼같은 불필요한 함수를 만들지 마세요.
26+
27+
## 참고
28+
29+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
30+
31+
## 템플릿
32+
33+
```js
34+
function doubleAll(numbers) {
35+
// 여기에 해답을 적으세요
36+
}
37+
38+
module.exports = doubleAll
39+
```

Diff for: exercises/basic_recursion/problem.ko.md

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
재귀는 알고리즘 문제를 우아하고 효과적으로 풀 수 있는 기초 프로그래밍 개념입니다. 사실, 재귀는 모든 반복 행동을 재귀 함수만으로 정의할 수 있을 정도로 강력합니다. 중첩된 데이터 구조를 반복할 때, 재귀는 필수적이라는 걸 아실 수 있을 겁니다.
2+
3+
재귀 함수는 자기 자신을 호출하는 함수입니다. 예를 들어, 이 재귀 함수는 단어의 배열을 받아, 단어를 대문자로 바꾼 배열을 반환합니다.
4+
5+
```js
6+
function toUpperArray(items) {
7+
if (!items.length) return [] // 종료 조건
8+
var head = items[0] // 처리할 아이템
9+
head = head.toUpperCase() // 행동 수행
10+
var tail = items.slice(1) // 다음
11+
return [head].concat(toUpperArray(tail)) // 귀납적 단계
12+
}
13+
14+
toUpperArray(['hello', 'world']) // => ['HELLO', 'WORLD']
15+
```
16+
17+
이 연습 문제의 핵심은 인숙한 인터페이스를 재귀 함수로 구현해 재귀에 익숙해지는 것입니다.
18+
19+
# 해야할 일
20+
21+
재귀를 이용해 Array#reduce를 구현하세요.
22+
23+
reduce가 올바르게 동작하는지 테스트하기 위해 구현하신 reduce를 basic_reduce 해결책의 실행에 사용합니다. 즉, reduce 함수에 단어의 배열, 함수, 배열 안의 각 단어의 횟수를 반환할 객체의 초기값이 넘겨집니다. 구현하실 reduce에 넘겨지기 때문에 이 부분을 구현하실 필요는 없습니다.
24+
25+
단순하게 하기 위해, 구현하실 reduce에 **초기값이 없을 경우에 대한 대비를 하실 필요는 없습니다**. 초기값이 언제나 있으리라 가정하셔도 됩니다.
26+
27+
## 인자
28+
29+
* arr: reduce할 배열
30+
* fn: reduce 단계에서 사용할 함수. 일반 Array#reduce 처럼, 이 함수에는 previousValue, currentValue, index, 반복할 배열을 넘겨야 합니다.
31+
* init: reduce의 초기값. Array#reduce와는 다르게, 이 값은 필요합니다. (그리고 항상 제공된다고 가정합니다.)
32+
33+
## 예제
34+
35+
```js
36+
// reduce 함수는 첫 번째 인자로 배열을 받는 것을
37+
// 재외하고 일반 Array#reduce와 같은 동작을 합니다
38+
39+
reduce([1,2,3], function(prev, curr, index, arr) {
40+
return prev + curr
41+
}, 0)
42+
// => 6
43+
```
44+
45+
## 조건
46+
47+
* for/while 반복문을 사용하지 마세요.
48+
* Array#map이나 Array#reduce같은 Array 메소드를 사용하지 마세요.
49+
* 헬퍼같은 불필요한 함수를 만들지 마세요.
50+
51+
## 참고
52+
53+
* https://en.wikipedia.org/wiki/Recursion
54+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
55+
56+
## 템플릿
57+
58+
```js
59+
function reduce(arr, fn, initial) {
60+
// 여기에 해답을 적으세요
61+
}
62+
63+
module.exports = reduce
64+
```

0 commit comments

Comments
 (0)