2014년 6월 5일 목요일

내가 이 코드를 평소보다 길게 짠 이유는

프로그래밍 언어의 발전은 어떻게 보면 상당 부분이 보일러플레이트 코드를 제거하려는 노력의 결과라고 할 수 있다. 몇십년에 걸친 연구와 노력의 결과 인류는 마침내 보일러플레이트로 가득찬 아래의 자바 코드를

public class Pet {
    private String name;
    private Person owner;

    public Pet(String name, Person owner) {
        this.name = name;
        this.owner = owner;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Person getOwner() {
        return owner;
    }

    public void setOwner(Person owner) {
        this.owner = owner;
    }
}

단 4줄의 C# 코드로 바꿀 수 있게 되었다:

public class Pet {
    public string Name { get; set; }
    public Person Owner { get; set; }
}

마찬가지로 아래의 장황한 자바 코드1

// The fibonacci sequence
class Fibonacci implements Iterable<Integer> {

    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            private int a = 0;
            private int b = 1;

            @Override
            public boolean hasNext() {
                return true; // Infinite sequence
            }

            @Override
            public Integer next() {
                int tmp = a;
                a = b;
                b = a + tmp;
                return tmp; // Boxing conversion
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException(
                        "Not supported by the Fibonacci sequence.");
            }
        };
    }
}

몇 줄의 C# 코드로 대체2할 수 있다3:

// The Fibonacci sequence
public static IEnumerable<int> Fibonacci() {
    int a = 0;
    int b = 1;

    while (true) {
        yield return a;
        a += b;
        yield return b;
        b += a;
    }
}

그렇다면 왜 처음부터 후자처럼 문법을 짧고 간결하게 만들지 못한 것일까? 이유를 한 마디로 요약하면

짧게 만들기가 길게 만들기보다 훨씬 어렵다.

이 점에 대해서는 이미 옛 성현(?)이 언급한 바 있다:

‘‘I have made this letter longer than usual, because I lack the time to make it short.’’
— Blaise Pascal

내가 이 편지를 평소보다 길게 쓴 것은 짧게 쓸 시간이 부족했기 때문이다.

따라서 여러분이 평소보다 코드를 길게 짜는 것 같다면 그 이유는 아마도

자바로 짰기 때문이다.


  1. http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp
  2. 실제로는 두 코드 모두 같은 버그가 있다. 여기서는 비교 차원에서 소개한 것이다.
  3. 짧기도 짧지만 박싱/언박싱이 필요없는 C#이 더 빠르다.

댓글 없음:

댓글 쓰기

댓글을 입력하세요. 링크를 걸려면 <a href="">..</a> 태그를 쓰면 됩니다. <b>와 <i> 태그도 사용 가능합니다.

게시한지 14일이 지난 글에는 댓글이 등록되지 않습니다. 날짜를 반드시 확인해 주세요.