Scala 조건문, 반복문

JJStone·2022년 2월 17일
0

Scala 기초

목록 보기
3/5

조건문

  1. if, if/else

    • 기본적으로 Java와 쓰는 방법은 같다.
    object Main {
      def isEven(v : Int) = v % 2 == 0
      def main(args: Array[String]): Unit = {
        if(isEven(2)){
          println("짝수")
        }
        else {
          println("홀수")
        }
      }
    }
    out) 짝수
    • scala만의 특징으로는 if문으로 값을 할당할 수 있다. (Like. 삼항연상자[?:])
    object Main {
      def isEven(v : Int) = v % 2 == 0
      def main(args: Array[String]): Unit = {
        val value = 2;
        val result = if (isEven(value)) "짝수" else  "홀수" // 값 할당
        println(result) // out) 짝수
      }
    }
  2. match (중요)

    • Java의 switch와 비슷하다 (근데 좀 더 강력하다.)
    object Main {
      def getAge(name : String) = name match {
        case "철수" => 9
        case "영희" => 8 // break 를 안써줘도 됨. 안써줘도 다음 case로 내려가지 않음.
        case "춘식" | "춘삼" => 2 // or
        case _ => 0 // default
      }
      def main(args: Array[String]): Unit = {
        println(getAge("철수")) // out) 9
        println(getAge("영희")) // out) 8
        println(getAge("춘식")) // out) 2
        println(getAge("춘삼")) // out) 2
        println(getAge("고길동")) // out) 0
      }
    }
    • if문을 대체할 수 있다. (권장은 안한다. Intellij에서도 바꾸는걸 권장한다.)
    object Main {
      def isEven(v : Int) = v % 2 == 0
      def main(args: Array[String]): Unit = {
        isEven(2) match {
          case true => println("짝수")
          case false => println("홀수")
        }
      }
    }
    /// out) 짝수
    • if문과 결합해서 쓸 수 있다.
    object Main {
      object SEX extends Enumeration {
        val MAN, GIRL = SEX.Value
      }
      def getAge(name : String, sex : SEX.Value) = name match {
        case "철수" if sex == SEX.MAN => 9
        case "철수" if sex == SEX.GIRL => 12
        case _ => 0
      }
      def main(args: Array[String]): Unit = {
        println(getAge("철수", SEX.MAN)) // out) 9
        println(getAge("철수", SEX.GIRL)) // out) 12
      }
    }
    • 패턴 매칭 (여러 타입들의 패턴에 대해서 매칭. 케이스 클래스 패턴매칭은 후술)
    object Main {
      def matcher(v : Any): Any = v match {
        case i : Int => s"$i 는 Int"
        case f : Double => s"실수"
        case "2" => 2
      }
      def main(args: Array[String]): Unit = {
        println(matcher(2)) // 2 는 Int
        println(matcher("2")) // 2
        println(matcher(3.1)) // 실수
      }
    }

반복문

  1. for문

    • ~부터 ~이하까지 to / ~부터 ~미만까지 until
    object Main {
    
      def main(args: Array[String]): Unit = {
        for(i <- 0 to 3) println(i) // out) 0,1,2,3
        for(i <- 0 until  3) println(i) // out) 0,1,2
      }
    }
    • List의 요소 하나씩 꺼내오기
    object Main {
      def main(args: Array[String]): Unit = {
        val list = List(1,2,3,4)
        for(el <- list) println(el) // out) 1,2,3,4
      }
    }
    • List 인덱스와 함께 출력 (zipWithIndex 사용)
    object Main {
      def main(args: Array[String]): Unit = {
        val list = List("zero", "one", "two", "three")
        for((el, index) <- list.zipWithIndex) println(s"index: $index / value: $el")
    
        /**
         * index: 0 / value: zero
         * index: 1 / value: one
         * index: 2 / value: two
         * index: 3 / value: three
         */
      }
    }
    
    • Map의 요소 하나씩 꺼내오기
    object Main {
      def main(args: Array[String]): Unit = {
        val map = Map(1 -> "영희", 2 -> "철수")
        for((k,v) <- map) println(s"key: ${k} / value : ${v}")
    
        /***
         * key: 1 / value : 영희
         * key: 2 / value : 철수
         */
      }
    
    • 다중 for문. 세미클론 하나로 다중 for문을 만들 수 있다.
    object Main {
      def main(args: Array[String]): Unit = {
        for(i <- 0 to 2; j <- 0 to 3) {
          println(i, j)
        }
      }
    }   
    • for문 안의 if문
    object Main {
      def main(args: Array[String]): Unit = {
        for(i <- 0 to 100 if i % 2 == 0) println(i) // 0~100까지 중에서 짝수인것만 출력
      }
    }
    
    • 시퀀스 컴프리헨션 : for 문의 끝에 yield를 추가함으로 for문에서 생성된 값들을 가진 Vector로 반환
    object Main {
      def main(args: Array[String]): Unit = {
        val evens = for(i <- 0 to 100 if(i % 2 == 0)) yield  i
        println(evens) // out) Vector(0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100)
      }
    }
    
  2. do/while

    • 무조건 한번 실행한 후 종료 조건 확인 (자바와 같음).
    object Main {
      def main(args: Array[String]): Unit = {
        var i = 0
        do{
          i+=1
        }while(i == 0)
        println(i) // 1
      }
    }
  3. while

    • 종료 조건일때까지 반복
    object Main {
      def main(args: Array[String]): Unit = {
        var i = 0
        while(i < 10){
          i+=1
          println(i) // 1~10까지 출렬
        }
      }
    }
profile
java, scala 개발자 입니다.

0개의 댓글