본문 바로가기

Programming/Scala

Scala - side effect 란 무엇인가?

아래와 같은 코드가 있다고 하자. 아래의 코드는 합계를 계산하는 프로그램이다.


class ChecksumAccumulator {

    private var sum = 0

    def add(b: Byte): Unit = sum += b // Side Effect 가 있는 함수

    def checksum(): Int = ~(sum & 0xFF) + 1

}


여기서 add 함수는 side effect 가 있는 코드이다.

side effect 란 일반적으로 file I/O 나, 함수의 바깥쪽에 있는 어떤 상태를 변경시키는 것을 의미한다. 여기서 함수의 바깥쪽에 있는 어떤 상태라는 것은 private var sum 이라는 변수이다. 이 변수는 instance variable 로서 각각의 객체의 상태를 나타내준다.

Scala 언어에서는 Side Effect 를 가진 함수를 나타내는 방법으로서, return type 인 Unit 을 제거 하고, 함수의 Body 부분을 Curly Brace 로 감싸준다.



class ChecksumAccumulator {

    private var sum = 0

    def add(b: Byte) { sum += b } // 명시적으로 Side Effect 가 있다고 표시함

    def checksum(): Int = ~(sum & 0xFF) + 1

}


Scala 언어에서는 함수의 Body 전에 있는 equal sign("=") 을 제거하는 것은 이 함수가 Unit type 을 돌려준다는 것을 의미하게 된다.

이를 확인해 보기 위해서 scala interpreter shell 을 띄우고 아래와 같이 코드를 작성하면,

scala> def g() { "This String gets lost too" }

g: ()Unit


return type 으로 Unit 을 돌려주는 것을 알 수 있다.

'Programming > Scala' 카테고리의 다른 글

Scala - Pattern matching  (0) 2011.11.10
Scala - IDE recommendation (scala 를 위한 개발 IDE 추천)  (0) 2011.11.10
Scala - syntax highlighting for vi vim  (0) 2011.11.10
Scala - singleton object  (0) 2011.11.10
Scala 컴파일러 설치  (0) 2011.11.10