Scala def 괄호 여부의 차이

  • 스칼라에서 argument가 하나도 없는 메소드를 정의할 때엔 괄호를 붙일 수도 있고 안 붙일 수도 있음

괄호를 붙일 때

예제 코드

class TestClass {
  def testFunction() = { println("Hello world!") }

  def main(args: Array[String]): Unit = {
    testFunction()
    testFunction
  }
}

괄호를 안 붙일 때

예제 코드

class TestClass {
  def testFunction = { println("Hello world!") }

  def main(args: Array[String]): Unit = {
    testFunction()
    testFunction
  }
}

차이점

코드 실행 결과

  • 괄호를 붙인 경우엔 두개 다 정상 작동
  • 괄호를 안 붙인 경우에는 testFunction()에서 에러가 나온다

이유

  • 괄호 없이 정의한 함수를 호출하면 사실 괄호까지 가기 전에 이미 호출된 상황임
  • 그리고 돌아온 Unit에다가 () argument를 대입하려고 하니 에러가 나는 것
  • 반대로 괄호를 붙여 정의한 함수를 괄호 없이 호출하면 문제없이 동작하지만 괄호를 들어갔다 빠져나오는 동작이 하나 더 추가됨
  • 그렇기 때문에 함수에 사이드 이펙트가 없고 상태를 변경하지 않는다면 괄호 없이 정의하는 것이 나음
  • 괄호 없이 함수를 정의하면 Field처럼 쓰일 수도 있기 때문에 요주의

results matching ""

    No results matching ""