Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
130 lines (96 sloc) 8.09 KB
title date categories profile profile_url desc
Scala둜 μ‹œμž‘ν•˜λŠ” Hello World
2017-11-14 07:20:00 -0800
scala
Scala 둜 ν”„λ‘œκ·Έλž˜λ° μ‹œμž‘ν•˜κΈ°

Scala λŠ” Java 의 λ””μžμΈ 및 κΈ°λŠ₯을 ν˜„λŒ€μ˜ PL 연ꡬ 결과에 맞게 ν™•μž₯ν•˜λŠ” 방법에 λŒ€ν•΄ μ—°κ΅¬ν•œ 결과둜 λ§Œλ“€μ–΄μ§„ 언어이닀. Java 와 λ§ˆμ°¬κ°€μ§€λ‘œ JVM (Java Virtual Machine) μœ„μ—μ„œ μž‘λ™ν•˜λŠ” μ–Έμ–΄μ§€λ§Œ, Java 8 μ΄μ „μ˜ Java μ™€λŠ” 달리, Object Oriented Programming Style κ³Ό Functional Programming Style 을 λͺ¨λ‘ ν›Œλ₯­ν•˜κ²Œ μ§€μ›ν•˜κ³  μžˆλŠ” 언어이닀.

Scala μ„€μΉ˜ν•˜κΈ°

이 과정은 컴퓨터 λ‚΄μ—μ„œ Scala λ₯Ό μ“°κΈ° μœ„ν•œ 과정이닀. 이 κΈ€ μ•ˆμ—μ„œλŠ” νŽΈμ˜μ„±μ„ μœ„ν•΄ Scastie λ₯Ό μ‚¬μš©ν•˜μ—¬ Web compiler ν™˜κ²½μ—μ„œ μž‘μ—…ν•˜λŠ” 것을 κΈ°μ€€μœΌλ‘œ ν•  κ²ƒμ΄μ§€λ§Œ, μ΄ν›„μ˜ λ‚΄μš©μ„ λ”°λΌν•˜κΈ° μœ„ν•΄ 미리 μ„€μΉ˜ν•΄ λ†“λŠ” 것도 λ‚˜μ˜μ§€ μ•Šλ‹€.

  1. μœ„μ—μ„œ λ§ν–ˆλ“―μ΄, Scala λŠ” JVM μœ„μ—μ„œ μž‘λ™ν•˜λŠ” 언어이닀. λ”°λΌμ„œ JVM (ν˜Ήμ€ Java) λ₯Ό λ¨Όμ € μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€. μ•„λž˜ Link 에 μ ‘μ†ν•΄μ„œ JVM 을 μ„€μΉ˜ν•  수 μžˆλ‹€. 이미 JDK (Java Development Kit) 8 이상이 μ„€μΉ˜λ˜μ–΄ μžˆλ‹€λ©΄ 이 λ‹¨κ³„λŠ” λ„˜μ–΄κ°€λ„ λœλ‹€.
  2. λ˜ν•œ Scala λ₯Ό νŽΈμ§‘ν•˜κ³  Compile ν•  Environment κ°€ ν•„μš”ν•˜λ‹€. 많이 μ‚¬μš©λ˜λŠ” 것은 IntelliJ IDE 이닀. μ•„λž˜ Link μ—μ„œ IntelliJ community edition 을 받을 수 μžˆλ‹€. 이미 IntelliJ κ°€ μ„€μΉ˜λ˜μ–΄ μžˆλ‹€λ©΄ 이 λ‹¨κ³„λŠ” λ„˜μ–΄κ°€λ„ λœλ‹€.
    • https://www.jetbrains.com/idea/download/
    • Community 라고 μ¨μ ΈμžˆλŠ” 것을 λ°›μž. κ·Έμͺ½μ΄ 무료 버전이고, Ultimate 의 κ²½μš°μ—λŠ” μ²΄ν—˜νŒλ§Œμ„ μ œκ³΅ν•œλ‹€.
    • IntelliJ λ₯Ό 쓰지 μ•Šκ³  μ‹Άλ‹€λ©΄ SBT λ₯Ό μ„€μΉ˜ν•˜μ—¬μ•Ό ν•œλ‹€. SBT λŠ” Scala 용 Build tool 쀑에 ν•˜λ‚˜λ‘œ, IntelliJ μ™Έμ˜ λ‹€λ₯Έ Editor (Vim, Emacs, ...) λ“€μ—μ„œ Scala λ₯Ό μ“°κ³  μ‹Άλ‹€λ©΄ μ‚¬μš©ν•˜μ—¬μ•Ό ν•˜λŠ” Tool 이닀. SBT 에 λŒ€ν•΄μ„œλŠ” λ‹€λ₯Έ κΈ€μ—μ„œ μ„€λͺ…ν•˜λ„λ‘ ν•  것이닀.
  3. 이제 IntelliJ λ₯Ό 킨닀. Scala λŠ” IntelliJ μ—μ„œ Plugin 을 μ„€μΉ˜ν•˜λŠ” κ²ƒμœΌλ‘œ μ„€μΉ˜λœλ‹€. μ•„λž˜ Link λ₯Ό λ”°λΌμ„œ IntelliJ 에 Plugin 을 μ„€μΉ˜ν•  수 μžˆλ‹€. μ„€μΉ˜ν•΄μ•Όν•˜λŠ” Plugin 은 Scala Plugin 이닀.
    • https://www.jetbrains.com/help/idea/installing-updating-and-uninstalling-repository-plugins.html
    • λ‚΄μš©μ„ λ²ˆμ—­ν•˜μžλ©΄,
      1. Setting Dialog λ₯Ό Ctrl-Alt-S λ₯Ό λˆ„λ₯΄κ±°λ‚˜ Menu 의 Settting Icon 을 눌러 μ—°λ‹€.
      2. μ™Όμͺ½μ˜ Plugins 라고 μ¨μ ΈμžˆλŠ” 창을 μ—°λ‹€.
      3. Install JetBrains plugin ν˜Ήμ€ Browse repositories 라고 μ¨μ ΈμžˆλŠ” Button 을 λˆ„λ₯Έλ‹€.
      4. μ›ν•˜λŠ” Plugin 에 였λ₯Έμͺ½ Click 을 ν•˜κ³  Download and Install 을 λˆ„λ₯Έλ‹€.
      5. ν™•μΈν•œλ‹€.
      6. Install JetBrains plugin ν˜Ήμ€ Browse repositories 창을 λ‹«λŠ”λ‹€.
      7. OK λ₯Ό 눌러 Setting Dialog λ₯Ό λΉ μ Έλ‚˜κ°€κ³ , 섀정을 μ €μž₯ν•œλ‹€. IntelliJ λ₯Ό λ‹€μ‹œ μΌœμ„œ Plugin 이 μ μš©λ˜λ„λ‘ ν•œλ‹€.
  4. 이제 File -> New -> Project λ₯Ό 눌러 Project 생성 창을 λ„μš°κ³ , μ™Όμͺ½μ—μ„œ Scala, 였λ₯Έμͺ½μ—μ„œ Scala (ν˜Ήμ€ SBT) λ₯Ό κ³ λ₯Έ λ’€, Project 이름을 μ •ν•œλ‹€. 그리고 였λ₯Έμͺ½μ˜ Scala SDK μ°½μ—μ„œ Create button 을 눌러 Scala λ₯Ό (μ΅œμ‹  버전을 κ³¨λΌμ„œ) μ„€μΉ˜ν•œλ‹€. SDK κ°€ μ„€μΉ˜λœ 것을 ν™•μΈν•˜μ˜€μœΌλ©΄, Finish λ₯Ό 눌러 Project λ₯Ό μƒμ„±ν•œλ‹€.
  5. 이제 Scala λ₯Ό μ„€μΉ˜ν•˜λŠ”λ° μ„±κ³΅ν•˜μ˜€λ‹€!

잠깐, 아직 μ„€μΉ˜ν•œ Scala λ₯Ό μ“Έ 것은 μ•„λ‹ˆλ‹€. 미리 λ°›μ•„λ†“λŠ” 것도 λ‚˜μ˜μ§€λŠ” μ•Šμ§€λ§Œ, μ§€κΈˆ κΌ­ λ°›μ•„μ•Όν•  ν•„μš”λŠ” μ—†μœΌλ‹ˆ μ—¬μœ κ°€ λ‚  λ•Œ 받아놓도둝 ν•˜μž.

Scala λ₯Ό Web μ—μ„œ μ‚¬μš©ν•˜κΈ°

μœ„μ™€ 같은 과정을 κ±°μ³μ„œ Scala λ₯Ό μ„€μΉ˜ν•˜λŠ” 것은 λ²ˆμž‘ν•  λΏλ”λŸ¬ μ΄λŸ°μ €λŸ° Setting 에 μ˜ν•΄μ„œ Code κ°€ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€. λ”°λΌμ„œ File 을 μ—¬λŸ¬ 개 λ§Œλ“€ ν•„μš”κ°€ μ—†λŠ” κ°„λ‹¨ν•œ 경우의 μ˜ˆμ‹œλŠ” λ‹€μŒ Link 의 Webpage μ—μ„œ Code λ₯Ό μž‘μ„±ν•˜κ³  Compile μ‹œν‚¨ λ’€, μ‹€ν–‰μ‹œν‚¬ 것이닀.

μœ„ Link 에 접속해보면 이미 κ°„λ‹¨ν•œ Code κ°€ μ¨μ ΈμžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€.

List("Hello", "World").mkString("", ", ", "!")

이 Code λ₯Ό μ‹€ν–‰μ‹œν‚€κΈ° μœ„ν•΄μ„œλŠ” Run 이라고 μ¨μ ΈμžˆλŠ” Button 을 λˆ„λ₯΄λ©΄ λœλ‹€.

List("Hello", "World").mkString("", ", ", "!") // Hello, World!: java.lang.String

μ‹€μ œλ‘œλŠ” // 이 없이 λ°”λ‘œ 결과값이 Code 의 μ˜†μ— ν‘œμ‹œλ  것이닀. 이제 Hello World λ₯Ό 좜λ ₯ν–ˆμœΌλ‹ˆ λλ‚œ 것인가? μ•„λ‹ˆλ‹€. μœ„ Code λŠ” Hello World λ₯Ό 좜λ ₯ν•˜μ§€λŠ” μ•Šμ•˜λ‹€. λ‹€μŒ μ ˆμ—μ„œ μ‹€μ œλ‘œ Hello World λ₯Ό 좜λ ₯ν•˜λŠ” Code λ₯Ό μž‘μ„±ν•΄λ³΄κ³ , μœ„ Code 와 비ꡐ해보도둝 ν•˜μž.

Scala 둜 μ‹œμž‘ν•˜λŠ” Hello World

이 세상 λͺ¨λ“  Program 은 μ‹œμž‘ 지점이 ν•„μš”ν•˜λ‹€. μ–΄λ””μ„œλΆ€ν„° Code λ₯Ό μ½μ–΄μ„œ μ‹€ν–‰ν•  지λ₯Ό λͺ¨λ₯΄λ©΄, Program 은 무슨 Code λ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•  지 μ•Œ μˆ˜κ°€ 없을 것이닀. 이 μ‹œμž‘μ§€μ μ„ μ˜μ–΄λ‘œλŠ” Entry point 라고 λΆ€λ₯Έλ‹€. Scala 의 κ²½μš°μ—λŠ” λ‹€μŒκ³Ό 같은 Entry point 듀이 μžˆλ‹€.

// object 뒀에 λ‚˜μ˜€λŠ” `Basics` λΆ€λΆ„μ—λŠ” 아무 Text λ‚˜ 듀어가도 λœλ‹€.
object Basics {
  def main(args: Array[String]): Unit = {
    // Codes
  }
}
// object 뒀에 λ‚˜μ˜€λŠ” `Simple` λΆ€λΆ„μ—λŠ” 아무 Text λ‚˜ 듀어가도 λœλ‹€.
object Simple extends App {
  // Codes
}

μœ„ 두 개의 Entry point λŠ” args λ₯Ό μ‚¬μš©ν•˜λŠ” 방법 λΉΌκ³  λ™μΌν•˜λ‹€. 이게 무슨 λ§μΈμ§€λŠ” λ‹€λ₯Έ κΈ€μ—μ„œ μžμ„Ένžˆ 보도둝 ν•˜κ³ , μ—¬κΈ°μ„œλŠ” μš°μ„  νƒ€μˆ˜κ°€ 더 적은 λ‘λ²ˆμ§Έ Entry point λ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•˜μž.

Scastie μ—μ„œ Entry point λ₯Ό μ œλŒ€λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” Menu 의 Worksheet 뢀뢄에 뢈이 λ“€μ–΄μ˜€μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. 만일 뢈이 듀어와 μžˆλ‹€λ©΄ Worksheet 뢀뢄을 Click ν•΄μ„œ λΆˆμ„ 끄도둝 ν•˜μž.

이제, μ•„λž˜μ™€ 같은 Code λ₯Ό μ‹€ν–‰ν•˜λ©΄ Hello World λ₯Ό 화면에 찍어볼 수 μžˆλ‹€.

object Simple extends App {
  println("Hello World!")
}

μ΄λ²ˆμ—λŠ” 좜λ ₯ κ²°κ³Όκ°€ Code μ˜†μ— λ‚˜νƒ€λ‚˜λŠ”κ²Œ μ•„λ‹ˆλΌ ν™”λ©΄ λ°‘μ˜ 검은 μ°½ (Console) 에 λ‚˜νƒ€λ‚  것이닀. println 은 κ·Έ 뒀에 λ“€μ–΄κ°„ String ("Hello World!" 와 같이 " 둜 감싸져 μžˆλŠ” Text) 을 Console 에 좜λ ₯ν•˜λŠ” 역할을 ν•œλ‹€. μ΄λ¦„μ˜ print λŠ” 좜λ ₯ν•œλ‹€λŠ” 뜻인 κ±Έ μ•Œκ² λŠ”λ°, 맨 λ’€μ˜ ln 은 λ¬΄μ—‡μΌκΉŒ? 이것은 line 의 μ€„μž„λ§λ‘œ ν•œ 쀄을 λ„˜κΈ°λŠ” (Editor μ—μ„œ Enter key λ₯Ό μΉ˜λŠ”) 효과λ₯Ό 가지고 μžˆλ‹€. μ •ν™•ν•œ νš¨κ³Όκ°€ κΆκΈˆν•œ μ‚¬λžŒλ“€μ€ μ•„λž˜μ˜ μ½”λ“œλ₯Ό 싀행해보라.

object Simple extends App {
  println("Hello World!")
  print("Hello")
  print("World!")
  println("THIS IS SCALA!!!!!!!")
}

좜λ ₯κ³Ό κ²°κ³Όκ°’ λΉ„κ΅ν•˜κΈ°

μ•„κΉŒ μœ„μ—μ„œ

List("Hello", "World").mkString("", ", ", "!")

와 같은 Code λ₯Ό λ³΄μ•˜μ„ 것이닀. Worksheet 에 뢈이 꺼진 μ±„λ‘œ 이 Code λ₯Ό 돌리면 Compile Error κ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ—, μ•„λž˜μ™€ 같이 Entry point μ•ˆμ— λ„£μ–΄μ„œ μ‹€ν–‰ν•΄λ³΄μž.

object Simple extends App {
  List("Hello", "World").mkString("", ", ", "!")
}

무슨 일이 λ²Œμ–΄μ§€λŠ”κ°€? λ‹€μŒκ³Ό 같은 μ½”λ“œ λ˜ν•œ 싀행해보고 두 결과의 차이점이 무엇인지 μƒκ°ν•΄λ³΄μž.

object Simple extends App {
  println(List("Hello", "World").mkString("", ", ", "!"))
}

화면에 좜λ ₯λ˜λŠ” 것은 μ‹€μ œλ‘œ ν”„λ‘œκ·Έλž¨μ„ μž‘λ™μ‹œμΌ°μ„ λ•Œ λˆˆμ— λ³΄μ΄λŠ” 것듀이고, Code 의 결과값은 λˆˆμ— 보이지 μ•Šκ³ , Program λ‚΄λΆ€μ—μ„œλ§Œ μ•Œ 수 μžˆλŠ” 값이닀.

λ‹€μŒμ—λŠ”...

μ§€κΈˆκΉŒμ§€ Scala λ₯Ό μ„€μΉ˜ν•˜λŠ” 방법, Scala λ₯Ό μ›Ήμ—μ„œ μ‚¬μš©ν•˜λŠ” 방법, Scala 의 Entry point 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μ•˜κ³ , Scala μ—μ„œ Hello world λ₯Ό μ°λŠ” μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄λ³΄μ•˜λ‹€. λ‹€μŒ κΈ€μ—μ„œλŠ” Scala μ—μ„œ 값에 이름을 λΆ™μ΄λŠ” 방법에 λŒ€ν•΄μ„œ μ•Œμ•„λ³Ό 것이닀.