210619 FP in scala 스터디

Jin·2021년 6월 20일
0

공부한 것

  • trait 의 의미와 실습
  • Stream 의 equals override
  • 똑똑한 생성자 실습
  • 속성기반검사
  • 가변인자 오퍼레이터

trait

trait 는 class 들 간에 공통적인 속성을 정의 해놓은 것으로 자바에서 interface 와 같은 역할을 한다. 따라서 trait 자체로는 객체 생성이 불가능하다.

동반 객체의 apply method 를 통해서 해당 객체의 생성에 대한 내용을 정의할 수 있다.

override equals

두 객체의 동등성 비교를 위해서는 equals method 를 override 할 필요가 있다. override 된 equals method 는 that 인수를 Any 타입으로 받는다.

두 Stream 의 동등성 비교를 위해서 equals method 를 구현해야 했는데, that 의 타입이 Any 라서 어떻게 해줘야 할지 힘들었다. 생각하다가 패턴매칭을 이용하면 될듯해서 이용했더니 비교가 잘되었다. Stream 을 순회하면서 원소를 비교해주어야 하므로 equals 역시 재귀적 구조로 이용했다.

다시 생각해보니 재귀적 방법을 이용할거면 fold 계열의 method 들도 이용이 가능하지 않을까 한다.

똑똑한 생성자 실습

하나의 Stream 을 생성해서 결과를 보려면, 결국 Stream 안에 있는 값들에 대한 평가가 이루어져야 한다. 이때, 동일한 원소를 요청할 때마다 반복적인 평가를 하지 않기 위해서, 평가 내용을 캐싱해 둘 수 있다. 똑똑한 생성자에서는 생성자를 정의할때, 원소의 값이 클로저로 캡쳐되어 있다.

가변 인자 오퍼레이터

어떤 Sequence 를 가변인자를 인수로 받는 함수에 인수로 줄때, Seq 가 가변인자로 쓰임을 알려주기 위해서 사용한다. asequence: _* 과 같이 사용한다.

속성 기반 검사

구현하려는 대상이 제대로 동작하는지 확인하기 위해서 꼭 만족해야할 사항을 속성 에 정의하고, 그 속성을 검사하는 방식의 테스트 기법이다.

예를 들어서, 배열의 reverse method 를 테스트하기 위해서 reverse 를 두번 실행하면 원래 배열과 같아져야 한다 를 속성으로 정의하고 여러 테스트 케이스에 대해서 테스트 할 수 있다.

속성기반검사를 활용하면 테스트하려고하는 내용의 서술과 테스트 케이스의 생성을 분리할 수 있다는 장점이 있다.

0개의 댓글