본문
170419(수) - Default Methods
Programming/Java 8 2017. 4. 19. 14:38
Default Methods
라이브러리의 인터페이스에 새로운 기능 추가 가능
이전 버전의 인터페이스 코드와 binary 호환 보장
- 기존
interface를 생성하고 이를 implements 하게 된 코드들이 즐비한 경우, interface를 수정하면 나머지 코드들도 전부 손봐야 했다.
import java.time.*; public interface TimeClient { void setTime(int hour, int minute, int second); void setDate(int day, int month, int year); void setDateAndTime(int day, int month, int year, int hour, int minute, int second); LocalDateTime getLocalDateTime(); }
package defaultmethods; import java.time.*; import java.lang.*; import java.util.*; public class SimpleTimeClient implements TimeClient { private LocalDateTime dateAndTime; public SimpleTimeClient() { dateAndTime = LocalDateTime.now(); } public void setTime(int hour, int minute, int second) { LocalDate currentDate = LocalDate.from(dateAndTime); LocalTime timeToSet = LocalTime.of(hour, minute, second); dateAndTime = LocalDateTime.of(currentDate, timeToSet); } public void setDate(int day, int month, int year) { LocalDate dateToSet = LocalDate.of(day, month, year); LocalTime currentTime = LocalTime.from(dateAndTime); dateAndTime = LocalDateTime.of(dateToSet, currentTime); } public void setDateAndTime(int day, int month, int year, int hour, int minute, int second) { LocalDate dateToSet = LocalDate.of(day, month, year); LocalTime timeToSet = LocalTime.of(hour, minute, second); dateAndTime = LocalDateTime.of(dateToSet, timeToSet); } public LocalDateTime getLocalDateTime() { return dateAndTime; } public String toString() { return dateAndTime.toString(); } public static void main(String... args) { TimeClient myTimeClient = new SimpleTimeClient(); System.out.println(myTimeClient.toString()); } }
- 개선사항
default 키워드를 사용하여 메소드를 만들게 되면 이 interface를 implements 하는 모든곳에 자동으로 해당 메소드가 추가된다.
package defaultmethods; import java.time.*; public interface TimeClient { void setTime(int hour, int minute, int second); void setDate(int day, int month, int year); void setDateAndTime(int day, int month, int year, int hour, int minute, int second); LocalDateTime getLocalDateTime(); static ZoneId getZoneId (String zoneString) { try { return ZoneId.of(zoneString); } catch (DateTimeException e) { System.err.println("Invalid time zone: " + zoneString + "; using default time zone instead."); return ZoneId.systemDefault(); } } default ZonedDateTime getZonedDateTime(String zoneString) { return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString)); } }
package defaultmethods; import java.time.*; import java.lang.*; import java.util.*; public class TestSimpleTimeClient { public static void main(String... args) { TimeClient myTimeClient = new SimpleTimeClient(); System.out.println("Current time: " + myTimeClient.toString()); System.out.println("Time in California: " + myTimeClient.getZonedDateTime("Blah blah").toString()); } }
'Programming > Java 8' 카테고리의 다른 글
170420(목) - Streams <Terminal Operations> (0) | 2017.04.20 |
---|---|
170420(목) - Streams <Intermediate Operations> (0) | 2017.04.20 |
170420(목) - Streams <Laziness and Performance Optimization> (0) | 2017.04.20 |
170420(목) - Streams <Understanding Java 8 Streams API (0) | 2017.04.20 |
170419(수) - Lambda Expressions (0) | 2017.04.19 |
댓글