생성자나 정적 팩터리에 선택적 매개변수가 많을 때 대응하기가 어렵다. 매개변수가 많은 경우 어떤 식으로 개발자들은 처리했는지 다음을 봐보자. 1. 점층적 생성자 패턴 프로그래머들은 선택적 매개변수에 대응하는 방법으로 점층적 생성자 패턴을 이용하였다. 필수 매개변수만 받는 생성자 필수 매개변수 + 선택 매개변수 1개를 받는 생성자 필수 매개변수 + 선택 매개변수 2개를 받는 생성자 ... 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려 만드는 방식이다. 보통 이런 점층적 생성자 패턴 방법을 사용하면 사용자가 설정하길 원치 않는 매개변수까지 포함할 수 있는데, 어쩔 수 없이 그런 매개변수에도 값을 지정해줘야 한다. 때문에 매개변수 개수가 많아지면 클라이언트 코드의 가독성 및 작성이 어려워진다. 2. 자..
정적 팩터리 메소드가 생성자보다 좋은 장점 1. 이름을 가질 수 있다. 한 클래스에 시그니처가 같은 생성자가 여러 개가 되면 생성자만으로는 각각의 차이를 들어내기가 쉽지 않다. 정적 팩터리 메소드를 사용하면 각각의 차이가 잘 드러나게 할 수 있다. 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. 생성 비용이 큰 객체가 자주 요청되는 상황이라면 이와 같은 방식이 성능을 올려준다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } //객체를 생성하지 않는 예 Boo..
Optional 나온 이유? Optional 클래스는 Java 8부터 나온 개념으로 NPE를 방지하기 위해 나왔다. 우리가 자바 개발을 할 때 객체가 null값을 주게되는 경우가 있다. 이때 이 객체를 참조하면 null을 참조하는 것이 되기 때문에 NPE[NullPointerException] 예외가 발생하게 된다. 때문에 개발자들은 NPE 발생을 줄이기 위해 null 확인을 하기 위한 조건문을 추가하였다. User user = userService.getUser(id); if(user != null) { String email = user.getEmail(); } 위와 같이 조건문으로 null 확인을 하여 NPE를 방지한다 하더라도 이러한 방식은 코드를 어지럽히기에 가독성을 저하시킨다. Java는 이를..
읽기 전에 스트림에 대해 몇 가지만 상기도록하자!! 💡 스트림은 데이터 소스를 변경하지 않는다! 스트림은 데이터 소스로 부터 데이터를 읽기만 할 뿐, 데이터 소스를 변경하지 않는다. 필요에 따라, 정렬된 결과를 컬렉션이나 배열에 담아서 반환한다. List sortedList = list.stream() .sorted() .collect(Collectors.toList()); 💡 스트림은 일회용이다. 스트림은 Iterator 처럼 한 번만 탐색할 수 있다. 만약 다시 탐색하고 싶다면 새로운 스트림을 만들어야 한다. Stream strStream = list.stream(); strStream.forEach(System.out::println); strStream.forEach(System.out::prin..
Java 변수명 첫 글자 소문자 + 카멜 표기법을 사용 (lower Camel Case) 특수 문자는 '_'과 '$'만 허용 의도 분명한 구체적인 변수명 짓기 boolean 변수인 경우 접두어는 'is' 접미어는 ok/check/found/success/done/error List, Collection 등의 자료형은 복수형으로 표현한다. ex) memberList X → members Java 메소드명 첫 글자 소문자 + 카멜 표기법을 사용 (lower Camel Case) 의도 분명한 메소드명 짓기 고려사항: 왜 존재하는가 / 어떤 작업을 하는가 / 어떻게 작업하는가 메소드 접두어는 동사로 시작한다. get/set is/has/can init find, check etc.. 다른 타입으로 변환하거나 빌..