Skip to content

Commit c7944a6

Browse files
committed
Update basics.md
* Translate basics.md in Korean * Change the page numbers of some pages
1 parent d5b8cd7 commit c7944a6

File tree

6 files changed

+323
-7
lines changed

6 files changed

+323
-7
lines changed

_ko/tour/basics.md

Lines changed: 317 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,325 @@
11
---
22
layout: tour
3-
title: Basics
3+
title: 기초
44

55
discourse: false
66

77
partof: scala-tour
8+
9+
num: 2
810
language: ko
11+
12+
next-page: unified-types
13+
previous-page: tour-of-scala
914
---
15+
16+
이번 페이지에서는 스칼라의 기초를 다룬다.
17+
18+
## 브라우저에서 스칼라 사용하기
19+
20+
ScalaFiddle를 사용해서 브라우저에서 스칼라를 실행할 수 있다.
21+
22+
1. [https://scalafiddle.io](https://scalafiddle.io) 로 가라.
23+
2. 왼쪽 창에 `println("Hello, world!")` 를 붙여 넣어라.
24+
3. 실행 버튼을 눌러라. 오른쪽 창에 출력이 나타난다.
25+
26+
어떤 설정 없이도 스칼라 코드를 손쉽게 테스트할 수 있다.
27+
28+
이 문서의 많은 예제 코드가 ScalaFiddle과 통합되어 있어 간단히 실행 버튼을 눌러 직접 테스트해볼 수 있다.
29+
30+
## 표현식
31+
32+
표현식은 연산 가능한 명령문이다.
33+
34+
```
35+
1 + 1
36+
```
37+
`println` 표현식을 사용해 결과를 출력할 수 있다.
38+
39+
{% scalafiddle %}
40+
```tut
41+
println(1) // 1
42+
println(1 + 1) // 2
43+
println("Hello!") // Hello!
44+
println("Hello," + " world!") // Hello, world!
45+
```
46+
{% endscalafiddle %}
47+
48+
###
49+
50+
`val` 키워드로 표현식의 결과에 이름을 붙인다.
51+
52+
```tut
53+
val x = 1 + 1
54+
println(x) // 2
55+
```
56+
57+
`x` 같이 이름이 붙여진 결과를 값이라고 부르며 참조된 값은 재연산하지 않는다. 또한 값을 재할당할 수 없다.
58+
59+
```tut:nofail
60+
val x = 1 + 1
61+
x = 3 // This does not compile.
62+
```
63+
64+
값의 타입을 추론할 수 있지만, 이렇게 명시적으로 타입을 지정할 수 있다.
65+
66+
```tut
67+
val x: Int = 1 + 1
68+
```
69+
70+
`x` 식별자에 `Int` 가 어떻게 선언되는지 주목해라. 물론 `:` 도 필요하다.
71+
72+
### 변수
73+
74+
변수는 재할당이 가능한 것을 제외하면 값과 같다. `var` 키워드로 변수를 정의한다.
75+
76+
```tut
77+
var x = 1 + 1
78+
x = 3 // This compiles because "x" is declared with the "var" keyword.
79+
println(x * x) // 9
80+
```
81+
원한다면 값처럼 이렇게 명시적으로 타입을 지정할 수 있다.
82+
83+
```tut
84+
var x: Int = 1 + 1
85+
```
86+
87+
88+
## 블록
89+
90+
`{}` 을 통해서 표현식을 둘러 쌀 수 있다. 이것을 블록이라고 한다.
91+
92+
블록 안 마지막 표현식의 결과는 전체 블록의 결과이기도 하다.
93+
94+
```tut
95+
println({
96+
val x = 1 + 1
97+
x + 1
98+
}) // 3
99+
```
100+
101+
## 함수
102+
103+
함수는 매개변수(parameter)를 가지는 표현식이다.
104+
105+
주어진 정수에 1을 더하는 익명 함수(이름이 없는 함수)를 정의할 수 있다.
106+
107+
```tut
108+
(x: Int) => x + 1
109+
```
110+
111+
`=>` 의 왼쪽에는 매개변수 목록이다. 오른쪽은 매개변수를 포함한 표현식이다.
112+
113+
함수에 이름을 지정할 수 있다.
114+
115+
{% scalafiddle %}
116+
```tut
117+
val addOne = (x: Int) => x + 1
118+
println(addOne(1)) // 2
119+
```
120+
{% endscalafiddle %}
121+
122+
함수는 여러 매개변수를 가질 수 있다.
123+
124+
{% scalafiddle %}
125+
```tut
126+
val add = (x: Int, y: Int) => x + y
127+
println(add(1, 2)) // 3
128+
```
129+
{% endscalafiddle %}
130+
131+
또는 매개변수를 가지지 않을 수 있다.
132+
133+
```tut
134+
val getTheAnswer = () => 42
135+
println(getTheAnswer()) // 42
136+
```
137+
138+
## 메소드
139+
140+
메소드는 함수와 비슷하게 보이고 동작하는거 같지만 몇가지 중요한 차이가 있다.
141+
142+
`def` 키워드로 메소드를 정의한다. `def` 에는 이름, 매개변수 목록, 반환 타입 그리고 본문이 뒤따른다.
143+
144+
{% scalafiddle %}
145+
```tut
146+
def add(x: Int, y: Int): Int = x + y
147+
println(add(1, 2)) // 3
148+
```
149+
{% endscalafiddle %}
150+
151+
반환 타입이 매개변수 목록과 `: Int` 뒤에 어떻게 선언되는지 주목해라.
152+
153+
메소드는 여러 매개변수 목록을 가질 수 있다.
154+
155+
{% scalafiddle %}
156+
```tut
157+
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier
158+
println(addThenMultiply(1, 2)(3)) // 9
159+
```
160+
{% endscalafiddle %}
161+
162+
또는 매개변수 목록이 전혀 없을 수 있다.
163+
164+
```tut
165+
def name: String = System.getProperty("user.name")
166+
println("Hello, " + name + "!")
167+
```
168+
169+
약간의 차이가 있지만 지금은 함수와 비슷하다고 생각하면 된다.
170+
171+
메소드는 여러 줄의 표현식을 가질 수 있다.
172+
173+
```tut
174+
def getSquareString(input: Double): String = {
175+
val square = input * input
176+
square.toString
177+
}
178+
```
179+
180+
본문의 마지막 표현식은 메소드의 반환 값이다. (스칼라는 `return` 키워드가 있지만 거의 사용하지 않는다.)
181+
182+
## 클래스
183+
184+
`class` 키워드로 클래스를 정의한다. 이름과 생성자 매개변수가 뒤따른다.
185+
186+
```tut
187+
class Greeter(prefix: String, suffix: String) {
188+
def greet(name: String): Unit =
189+
println(prefix + name + suffix)
190+
}
191+
```
192+
193+
`greet` 메소드의 반환 타입은 `Unit` 이다. 이것은 자바와 C에서 `void` 와 유사하다. (모든 스칼라 표현식은 반드시 어떤 값을 가져야하기 때문에 실제로는 `()` 로 쓰여진 `Unit` 타입의 싱글톤 값이 쓰인다는 차이가 있다. 어떠한 정보도 가져오지 않는다.)
194+
195+
`new` 키워드로 클래스의 인스턴스를 만든다.
196+
197+
```tut
198+
val greeter = new Greeter("Hello, ", "!")
199+
greeter.greet("Scala developer") // Hello, Scala developer!
200+
```
201+
202+
이후 [클래스 페이지](classes.html)에서 자세히 다룰 것이다.
203+
204+
## 케이스 클래스
205+
206+
스칼라는 케이스 클래스라고 불리는 특별한 타입의 클래스를 가지고 있다. 기본적으로, 케이스 클래스는 변하지 않으며 값에 의해 비교된다. `case class` 키워드로 케이스 클래스를 정의한다.
207+
208+
```tut
209+
case class Point(x: Int, y: Int)
210+
```
211+
212+
`new` 키워드 없이 케이스 클래스를 인스턴스화 할 수 있다.
213+
214+
```tut
215+
val point = Point(1, 2)
216+
val anotherPoint = Point(1, 2)
217+
val yetAnotherPoint = Point(2, 2)
218+
```
219+
220+
그리고 값에 의해 비교된다.
221+
222+
```tut
223+
if (point == anotherPoint) {
224+
println(point + " and " + anotherPoint + " are the same.")
225+
} else {
226+
println(point + " and " + anotherPoint + " are different.")
227+
}
228+
// Point(1,2) and Point(1,2) are the same.
229+
230+
if (point == yetAnotherPoint) {
231+
println(point + " and " + yetAnotherPoint + " are the same.")
232+
} else {
233+
println(point + " and " + yetAnotherPoint + " are different.")
234+
}
235+
// Point(1,2) and Point(2,2) are different.
236+
```
237+
238+
소개할 많은 케이스 클래스가 있고 마음에 들었으면 좋겠다. 이후 [케이스 클래스 페이지](case-classes.html)에서 자세히 다룰 것이다.
239+
240+
## 객체
241+
242+
객체는 자체 정의의 단일 인스턴스다. 이는 자체 클래스의 싱글톤이라고 생각하면 된다.
243+
244+
`object` 키워드로 객체를 정의한다.
245+
246+
```tut
247+
object IdFactory {
248+
private var counter = 0
249+
def create(): Int = {
250+
counter += 1
251+
counter
252+
}
253+
}
254+
```
255+
256+
객체는 이름을 참조하여 접근한다.
257+
258+
```tut
259+
val newId: Int = IdFactory.create()
260+
println(newId) // 1
261+
val newerId: Int = IdFactory.create()
262+
println(newerId) // 2
263+
```
264+
265+
이후 [싱글톤 객체 페이지](singleton-objects.html)에서 자세히 다룰 것이다.
266+
267+
## 트레이트
268+
269+
트레이트는 특정 필드와 메소드를 가지는 타입이다. 다양한 트레이트와 결합할 수 있다.
270+
271+
`trait` 키워드로 트레이트를 정의한다.
272+
273+
```tut
274+
trait Greeter {
275+
def greet(name: String): Unit
276+
}
277+
```
278+
279+
트레이트는 기본 구현도 가질 수 있다.
280+
281+
{% scalafiddle %}
282+
```tut
283+
trait Greeter {
284+
def greet(name: String): Unit =
285+
println("Hello, " + name + "!")
286+
}
287+
```
288+
289+
`extends` 키워드로 트레이트를 상속할 수 있고 `override` 키워드로 구현을 오버라이드할 수 있다.
290+
291+
```tut
292+
class DefaultGreeter extends Greeter
293+
294+
class CustomizableGreeter(prefix: String, postfix: String) extends Greeter {
295+
override def greet(name: String): Unit = {
296+
println(prefix + name + postfix)
297+
}
298+
}
299+
300+
val greeter = new DefaultGreeter()
301+
greeter.greet("Scala developer") // Hello, Scala developer!
302+
303+
val customGreeter = new CustomizableGreeter("How are you, ", "?")
304+
customGreeter.greet("Scala developer") // How are you, Scala developer?
305+
```
306+
{% endscalafiddle %}
307+
308+
`DefaultGreeter` 는 트레이트 하나만 상속하지만 다중 상속도 가능하다.
309+
310+
이후 [트레이트 페이지](traits.html)에서 자세히 다룰 것이다.
311+
312+
## 메인 메소드
313+
314+
메인 메소드는 프로그램의 종료 지점이다. JVM(Java Virtual Machine)에선 `main` 이라는 메인 메소드가 필요하며 전달인자(argument) 하나와 문자열 배열을 가진다.
315+
316+
이처럼 `object` 를 사용하여 메인 메소드를 정의할 수 있다.
317+
318+
```tut
319+
object Main {
320+
def main(args: Array[String]): Unit =
321+
println("Hello, Scala developer!")
322+
}
323+
```
324+
325+
공병국 옮김

_ko/tour/classes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ discourse: false
66

77
partof: scala-tour
88

9-
num: 3
9+
num: 4
1010
language: ko
1111

1212
next-page: traits

_ko/tour/mixin-class-composition.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ discourse: false
66

77
partof: scala-tour
88

9-
num: 5
9+
num: 6
1010
language: ko
1111

1212
next-page: higher-order-functions

_ko/tour/tour-of-scala.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ partof: scala-tour
99
num: 1
1010
language: ko
1111

12-
next-page: unified-types
12+
next-page: basics
1313
---
1414

1515
스칼라는 정확하고 명쾌하며 타입 세이프한 방식으로 일반적인 유형의 프로그래밍 패턴을 표현하기 위해 설계된 새로운 다중 패러다임 프로그래밍 언어다. 스칼라는 객체지향과 함수형 언어를 자연스럽게 통합해준다.

_ko/tour/traits.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ discourse: false
66

77
partof: scala-tour
88

9-
num: 4
9+
num: 5
1010
language: ko
1111

1212
next-page: mixin-class-composition

_ko/tour/unified-types.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ discourse: false
66

77
partof: scala-tour
88

9-
num: 2
9+
num: 3
1010
language: ko
1111

1212
next-page: classes
13-
previous-page: tour-of-scala
13+
previous-page: basics
1414
---
1515

1616
자바와는 달리, 스칼라에선 모든 값이 객체다(숫자 값과 함수를 포함해). 스칼라는 클래스 기반이기 때문에 모든 값은 클래스의 인스턴스다. 다음의 다이어그램은 클래스 계층구조를 나타낸다.

0 commit comments

Comments
 (0)