Scala 기초
실습 진행 시 어려운 점이 있으면 이루리 게시판을 이용해 질문하세요. 게시판을 통해 하기 어려운 질문이라면 아래 조교님들의 이메일을 통해 문의하시기 바랍니다.
조교: 문선아(moonsun5319@kangwon.ac.kr), 박환용(201714153@kangwon.ac.kr)
또한 본 자료는 아래의 인터넷 자료들을 참고하여 만들어졌으니 추가적으로 궁금한 점이 있으면 참고하시기 바랍니다.
1. Scala REPL(Read-Eval-Print-Loop) 인터프리터 사용하기
- 아래 사진과 같이 우클릭 -> Scala REPL 클릭
-
하단에 생성된 interpreter에 코드 입력
- 식을 입력하면 결과 출력
-
res0 : 결과 값에 인터프리터가 부여한 이름으로 타입과 값을 보여준다.
- 값에 이름을 붙여 결과 확인
2. 변수 사용하기 : var
3. 함수 만들기 : def
- 인자가 없는 경우 : 함수를 호출할 때 괄호 생략이 가능하다.
- 이름이 없는 함수 : 다른 함수나 식, val에 저장이 가능하다.
- { } 를 사용하여 2줄 이상의 함수를 만들기 : { 하나만 입력하고 enter를 누르면 다음줄로 넘어간다.
- 부분 적용(partial application) : 2개 이상의 인자가 있는 경우 _를 사용하여 일부만 적용할 수 있다.
- 커리 함수(Curried functions) : 함수의 인자 중에서 일부를 적용하고 나머지는 나중에 적용한다.
4. 클래스 사용하기
- Class 선택
- 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 실행 결과
- 생성자
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 실행 결과
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 실행 결과
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 실행 결과
7. 트레잇(trait)
- 다른 클래스가 상속하거나 섞어 넣을 수 있는(Mix in) 필드와 동작의 모음
- Trait 선택
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 실행 화면
- 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 실행 화면