1. 행사 코드가 적다
보통 C#이나 Java에서 기회가 되는데로 최대한 불변 객체를 생성하려고 노력한다. 불변 객체를 C#에서 생성하는 방법은 아래와 같다.
class Person
{
public string FirstName { get; }
public string LastName { get; }
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}
자바에 비해서는 그래도 행사코드가 적은 C#이지만 F#에 비하면 그래도 너무 많다.
type Person = {
FirstName: string
LastName: string
}
이는 내가 자바를 별로 안좋아 하고 코틀린을 좋아하는 이유 중 하나이다.
class Person(
val firstName: String,
val lastName: String
) {
/* ... */
}
사족을 더하자면 NDC에서 Don Syme이 발표한 자료에 따르면 에너지 분야의 350,000 줄의 C# 코드를 F#으로 리펙토링 + 기능추가 하고도 30,000줄이였다고한다. 호주에서도 전기 디스트리뷰터가 F# 개발자를 구했던적도 있다.
2. 구조적 동등성 비교(Structural equality)
C#에서 어떤 객체의 속성이 같은지를 비교하려면 IEquatable
public class Person : IEquatable<Person>
{
// 구현 생략 ...
public override bool Equals(Object obj)
{
// 구현 생략 ...
}
public override int GetHashCode()
{
// 구현 생략 ...
}
public static bool operator == (Person person1, Person person2)
{
// 구현 생략 ...
}
public static bool operator != (Person person1, Person person2)
{
// 구현 생략 ...
}
}
지금 firstName, lastName을 비교하는 코드의 구현을 제외하고 늘어나는 코드량이 엄청나다. IDE가 어느 정도는 구현을 해주기는 하지만 그렇다고 자동으로 다 해주는 것이 아니고 말 그대로 구조만 잡아주는 “““어느 정도””” 수준이다.
F#에서는 이런 구현이 필요가 없다. 그냥 alice = box
처럼 단순 비교를 하면 된다.
cf. F#에 대한 흥미가 있다면 다음 유튜브 비디오를 추천한다.