프로그래밍 언어 실습 두번째

Scala 기초

       

실습 진행 시 어려운 점이 있으면 이루리 게시판을 이용해 질문하세요. 게시판을 통해 하기 어려운 질문이라면 아래 조교님들의 이메일을 통해 문의하시기 바랍니다.

   

조교: 문선아(moonsun5319@kangwon.ac.kr), 박환용(201714153@kangwon.ac.kr)

   

또한 본 자료는 아래의 인터넷 자료들을 참고하여 만들어졌으니 추가적으로 궁금한 점이 있으면 참고하시기 바랍니다.

           


1. Scala REPL(Read-Eval-Print-Loop) 인터프리터 사용하기
  1. 아래 사진과 같이 우클릭 -> Scala REPL 클릭

title

  1. 하단에 생성된 interpreter에 코드 입력

    title

  1. 식을 입력하면 결과 출력
  • res0 : 결과 값에 인터프리터가 부여한 이름으로 타입과 값을 보여준다.

    title

  1. 값에 이름을 붙여 결과 확인

title


2. 변수 사용하기 : var

title


3. 함수 만들기 : def

title

  • 인자가 없는 경우 : 함수를 호출할 때 괄호 생략이 가능하다.

title

  • 이름이 없는 함수 : 다른 함수나 식, val에 저장이 가능하다.

title

  • { } 를 사용하여 2줄 이상의 함수를 만들기 : { 하나만 입력하고 enter를 누르면 다음줄로 넘어간다.

title

  • 부분 적용(partial application) : 2개 이상의 인자가 있는 경우 _를 사용하여 일부만 적용할 수 있다.

title

  • 커리 함수(Curried functions) : 함수의 인자 중에서 일부를 적용하고 나머지는 나중에 적용한다.

title


4. 클래스 사용하기
  • Class 선택

title

  • Calculator 클래스
class Calculator {
    val name: String = "Moon"
    def add(n1: Int, n2: Int): Int = n1 + n2
}
  • Calculator_test 에서 객체를 만들어 확인해본다.
object Calculator_test {
    def main(args: Array[String]): Unit = {
        val calc = new Calculator
        println(calc.add(1, 2))
        println(calc.name)
    }
}
  • Calculator_test 실행 결과

title

  • 생성자
class Calculator2(name: String) {
    val color : String = if (name == "Moon") {
        "blue"
    }
    else if (name == "Park") {
        "green"
    }
    else {
        "white"
    }
    def add(n1: Int, n2: Int): Int = n1 + n2
}
  • Calculator2_test를 만들어 확인해본다.
object Calculator2_test {
    def main(args: Array[String]): Unit = {
        val calc = new Calculator2("Ko")
        println(calc.color)
    }
}
  • Calculator2_test 실행 결과

title


5. 상속
  • 위에서 만든 Calculator2를 상속한다.
class LogCalculator(name: String) extends Calculator2(name) {
    def log(num: Double, base: Double) = math.log(num) / math.log(base)
}
  • LogCalculator_test를 만들어 확인해본다.
object LogCalculator_test {
    def main(args: Array[String]): Unit = {
        val calc = new LogCalculator("Ko")
        println(calc.log(10,10))
    }
}
  • LogCalculator_test 실행 결과

title


6. 추상 클래스
  • 하위 클래스에서 메소드를 구현한다.
abstract class Shape {
    def getArea(): Int
}
class Square(length: Int) extends Shape {
    def getArea(): Int = {length * length}
}
  • test를 만들어 확인해본다.
object test {
    def main(args: Array[String]): Unit = {
        val s = new Square(3)
        println(s.getArea())
    }
}
  • test 실행 결과

title


7. 트레잇(trait)
  • 다른 클래스가 상속하거나 섞어 넣을 수 있는(Mix in) 필드와 동작의 모음
  • Trait 선택

title

trait Car {
    val brand: String // 차 브랜드 이름
}
trait Year {
    val year_type: Int // 차 연식
}
  • 하나가 아닌 2개 이상의 트레잇 상속 가능
class BMW extends Car with Year {
    val brand = "BMW"
    val year_type = 2020
}

8. 배열(array)
  • Array 만들기
object Array_test {
  def main(args: Array[String]): Unit = {
    val array = Array("hello", "world")

    // index는 0부터 시작  
    println(array(0))
    println(array(1))
  }
}
  • Array_test 실행 화면

title

  • Array에 추가하기
object Array_test2 {
  def main(args: Array[String]): Unit = {
    val array = Array("hello", "world")

    // +: Array 앞에, :+ Array 뒤에 추가됨
    val conn = "front" +: array :+ "back"
    println(conn.length)

    // for문 사용법은 다음 실습에 더 자세히 하도록 하겠습니다.
    for(i <- 0 to conn.length-1) {
      println(conn(i))
    }
  }
}
  • Array_test2 실행 화면

title