기존 코드 관리 보통 프로젝트를 진행하면서, 관리되는 코드 등은 static final 변수로 선언되어있다. public class CommonStatus { public static final int CODE = 200; public static final String MESSAGE = "성공"; } static final 변수를 Enum 으로 변환해보자. Enum.java public enum EnumCode { /** Default Code */ MESSAGE ("성공") ; @Getter private final String code; EnumCode(String code) { this.code = code; } } 호출 코드 TestDto testDto = new TestDto(); testDt..
특정날짜와 format을 파라미터로 설정하여 해당 format에 맞게 어제 일자 조회 public static String getYesterday(String paramDate, String format) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); LocalDate currentDate = LocalDate.parse(paramDate, formatter); return currentDate.minusDays(1).format(formatter); }
현재날짜(LocalDate.now())가 올해의 몇번째 주차인지 조회 public static String getWeekOfYear() { LocalDate currentDate = LocalDate.now(); int weekOfYear = currentDate.get(WeekFields.ISO.weekOfYear()); return Integer.toString(weekOfYear); }
case 목록 case1. 현재날짜를 년-월 yyyyMM 포맷으로 조회 public static String getCurrentYearMonth() { LocalDate currentDate = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM"); return currentDate.format(formatter); } case2. 받아온 날짜를 매개변수 format(yyyy-MM-dd, yyyyMM 등) 포맷으로 조회 public static String getDateFormat(String date, String format) { DateTimeFormatter formatter = DateTimeFor..
상황분석 우리에게 운영중인 레거시 프로젝트가 있다고 가정해보자. 그리고 UserDto 파일이 존재하는데, 해당 Dto 파일은 User 테이블의 필드들을 담고있는 클래스이다. UserDto.java public class UserDto implements CommonUser { private String name; private String gender; private String age; public UserDto(String name, String gender, String age) { this.name = name; this.gender = gender; this.age = age; } @Override public String getName() { return name; } @Override pub..
Call by Value 값에 의한 호출 public class Main { public static void main(String[] args) { int a = 1; int b = 2; System.out.println(a); // 1 System.out.println(b); // 2 Main main = new Main(); main.update(a); System.out.println(a); // 1 System.out.println(b); // 2 } void update(int a) { /* 지역변수 처럼 */ a = 5; System.out.println(a); // 5 } } 변수 a, b에 각각 1, 2를 할당했다. 그리고 변수를 출력해보면 a = 1, b = 1로 출력된다. 그리고 up..
함수형 인터페이스 제공 람다 표현식을 쓸 수 있는 인터페이스는 오직 public 메서드 하나만 가지고 있는 인터페이스여야한다. 자바 8에서 이러한 인터페이스를 특별히 함수형 인터페이스라고 부르고, 함수형 인터페이스에서 제공하는 단 하나의 추상 메서드를 함수형 메서드라고 부른다. 인터페이스를 사용해야하는 개발자 입장에서 람다 표현식을 사용하기 위해 메서드가 하나뿐인 인터페이스를 제공해야하는 번거로움을 해결하기 위해 함수형 인터페이스를 만들고 java.util.function 패키지로 제공하고있다. 아래 예제 github 주소 : https://github.com/westssun/practicalJava8/tree/master/src/main/java/ch4/%EB%9E%8C%EB%8B%A4%EC%99%80..
소스코드 : https://github.com/westssun/moderninjava8/tree/master/src/main/java/ModernInJava8/ch4_5_6_stream GitHub - westssun/moderninjava8: [BOOK] 모던 인 자바8 [BOOK] 모던 인 자바8. Contribute to westssun/moderninjava8 development by creating an account on GitHub. github.com 예제 실행을 위한 DTO @Data public class SampleDto { private int idx; private String name; private String gender; } 1) 스트림 기본 /** * 기존 Java7 코..
상황 TestDto testDto = testList.get(0); 자바 List의 0번째 데이터를 set 해줘야하는 코드를 만났다. testList에는 어떤 데이터가 들어있는지 모른다. (null 일수도있고, 몇개의 row가 들어가있을 수 있다.) 위 testList.get(0) 을 실행하는 부분에서 NullPointerException을 만났다. 분석 NullPointerException이 발생하여 null 체크를 추가하였다. testList는 외부 API에서 얻어온 데이터가 들어있는 List라서 어느 특정 실행 시점에서 null인 testList에 get 메서드를 호출했기 때문에 발생하는 문제였다. if (testList != null) { TestDto testDto = testList.get(0..
LocalDate LocalDate 인스턴스는 시간을 제외한 날짜를 표현하는 불변 객체이다. 어떤 시간대 정보도 포함하지 않는다. 우리는 정적 팩토리 메서드 of로 LoalDate 인스턴스를 만들 수 있다. LocalDate date = LocalDate.of(2017, 9, 21); int year = date.getYear(); // 2017 Month month = date.getMonth(); // SEPTEMBER int day = date.getDayOfMonth(); // 21 또한 팩토리 메서드 now를 사용하여 현재 날짜 정보를 얻을 수 있다. LocalDate today = LocalDate.now(); 다른 방법으로는, get 메서드에 TemporalField를 전달해서 정보를 얻는 ..
디폴트 메서드의 등장 자바 8에서는 기본 구현을 포함하는 인터페이스를 정의하는 2가지 방법을 제공한다. 만약 인터페이스를 바꾸게 되었을때, 해당 인터페이스를 구현한 모든 클래스의 구현도 고쳐져야하는 상황이 온다면 매우 당황스러울 것이다. 이 문제점을 자바 8에서 제공된 새로운 기능으로 해결할 수 있다. 1) 정적 메서드 : 인터페이스 내부 2) 디폴트 메서드 : 인터페이스의 기본 구현을 제공 자바 8에서는 메서드 구현을 포함하는 인터페이스를 정의할 수 있다. 결과적으로 기존 인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. 이렇게 하면 기존의 코드 구현을 바꾸지 않으면서 인터페이스를 바꿀 수 있다. 이 말은 즉, 디폴트 메서드나 정적 메서드가 추가..
하나의 클래스를 여러 용도로의 사용 많은 클래스가 하나의 자원에 의존한다. 이렇게 여러 클래스에게 의존받는 자원은 여러 용도로 사용이 된다. 예를 들어, 사전이라는 SpellChecked 클래스가 있다. 이 클래스가 여러 사전을 사용할 수 있도록 만들어보자. 1) 정적 유틸리티의 잘못된 사용 public class SpellChecker { private static final Lexicon dictionary = ...; // 인스턴스 생성 막기 (post: https://seohae.github.io/2020/07/24/java/25_InstancePrivateUse/) private SpellChecker() {} } 2) 싱글턴의 잘못된 사용 public class SpellChecker { pr..