Why I Love Fsharp

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#에 대한 흥미가 있다면 다음 유튜브 비디오를 추천한다.

Youtube

Youtube

comments powered by Disqus