[F#] 프로토타입 스타일 클래스 정의

[원본 링크]

클래스 정의에선, val 키워드로 필드 정의를, new로 생성자를 정의할 수 있다.

한데... val과 new 등을 사용하지 않고 좀더 raw하게, 함수 스타일로 클래스를 정의하는 방법이 더 있다.

ES6 이전의 자바스크립트가 사용했던 '프로토타입' 방식과 유사하다. 그래서 프로토타입이라 부르겠다.

type 클래스명 = ...
이랬던 것을
레코드명 바로 오른쪽에 소괄호를 붙이면
type 클래스명(인자...) = ...
컴파일러는 바로 프로토타입 함수처럼 읽어들인다.
해당 괄호 안의 인자들은 new 시도 시에 전달될 생성자의 인자.
정의부 내에서 생성한 변수/상수들은 필드로 취급된다.
메서드 정의는 다를건 없다. image

image

이외에도 생성자 오버로딩도 가능하며 image

image

실행구문 do도 잘 동작한다. image

image



참조
https://docs.microsoft.com/ko-kr/dotnet/fsharp/language-reference/members/explicit-fields-the-val-keyword