Featured image of post 자바에서 덕 타이핑하기

자바에서 덕 타이핑하기

TL;DR

  • Java 8의 Method References를 이용하면 덕 타이핑이 가능하다.

덕 타이핑 이란

위키피디아 참고

자바에서 덕 타이핑이 가능하지 않았던 이유

자바는 상속(extend)이나 구현(implement)으로 타입을 명시해야지만 사용이 가능한 언어스팩을 가지고 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public class GeneralExample {
    public static void main(String[] args) throws InterruptedException {
        new Thread(new RunnableImpl()).start();
        sleep(100);
    }

    private static class RunnableImpl implements Runnable {
        @Override
        public void run() {
            System.out.println("RunnableImpl.run");
        }
    }
}

Method References를 이용한 덕 타이핑

Java 8에서 추가된 Method References를 이용하면 타입을 명시하지 않아도 사용이 가능하다.

다만, 타입이 Functional Interface 를 만족해야 한다는 한계가 있다. (메서드 1개를 타입에 사용하는 것이므로)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public class DuckTypingExample {
    public static void main(String[] args) throws InterruptedException {
        new Thread(new MethodReferencesExample()::method).start();
        new Thread(MethodReferencesExample::staticMethod).start();
        sleep(100);
    }

    private static class MethodReferencesExample {
        public void method() {
            System.out.println("MethodReferencesExample.method");
        }

        public static void staticMethod() {
            System.out.println("MethodReferencesExample.staticMethod");
        }
    }
}

프로그래밍 시 덕 타이핑의 장점과 단점

구현체를 특정 타입으로 사용하려 할 경우, 덕 타이핑 없이는 의존성이 생길 수 밖에 없다. 그에 비해 덕 타이핑이 가능하다면 의존성 없이 사용 가능하다.

의존성이 없다는 것은 좀 더 유연한 구조를 만들 수 있다는 것을 의미하지만, 명시적인 의존성이 없어서 프로젝트 파악은 더 힘들어 질 수 있다.

ref.

Hugo로 만듦
JimmyStack 테마 사용 중