bobplanet / Bobplanet

SK플래닛 사내식당 메뉴 조회 및 평점 앱 프로젝트
http://bobplanet.kr
13 stars 3 forks source link

JDK 1.8 버전을 타겟버전으로 하는 이유가 있는지 문의 #30

Closed dusskapark closed 8 years ago

dusskapark commented 8 years ago

@DoosikKim 의 질문을 전달합니다.

JDK 버전을 1.8을 타겟빌드로 하는 이유가 있는지 문의 드립니다.

hkjinlee commented 8 years ago

@DoosikKim 아~주 간단합니다. OnClickListener 같은 걸 구현할 때 주로 사용되는 anonymous inner class를 lambda로 대체하려구요. 그래서 JDK5~7에서도 lambda를 지원하게 해주는 Retrolambda를 쓰고 있습니다.

        new Builder<>(DailyMenu.class, () -> api.menuOfDate(date).execute(), "menuOfDate")
                .setResultListener(listener)
                .setCacheKey(date)
                .execute();
        RemoteApiLoader<DailyMenu> remote = new RemoteApiLoader<DailyMenu>() {
            @Override
            public DailyMenu fromRemoteApi() throws IOException {
                return api.menuOfDate(date).execute();
            }
        };

        new Builder<>(DailyMenu.class, remote, "menuOfDate")
                .setResultListener(listener)
                .setCacheKey(date)
                .execute();
    }
hkjinlee commented 8 years ago

@DoosikKim 진짜 궁금하신 건 이게 아니었던 듯하네요. 클래스는 1.8 버전으로 만들어지는게 맞고, Retrolambda gradle plugin에 의해 다시 1.7버전 클래스로 재가공됩니다. (클래스 레벨에서 anonymous inner class로 코드 rewrite하는 것으로 압니다)

결과적으로 JDK7 기반의 안드로이드 디바이스에서 해당 프로그램을 돌리는데 아무런 문제가 없습니다.