Space club 프로젝트를 진행하는데 있어서 코드리뷰를 활성화 했다. 팀원들과의 코드리뷰는 직설적이고 간결하게 진행하는 것을 원칙으로 했다. 코드에 있어서 당연한 것은 없었다. 기능적으로 올바르게 동작하는 것은 필수적이였지만 어떻게 구현하는지, 어떠한 방식이 더 효율적인지 고민하는 것도 필수적이라고 생각했다. 위 팀원과 마주친 상황 다음과 같다. null 체크 할때 optional의 메서드를사용하는게 맞는가? 아니면 그냥 value == null 비교를 통해 검증하는게 맞는가? ❓먼저 나는 왜 Optional을 사용했는가 나는 null을 직접 다루는 것이 NPE에 있어서 위험하기때문에 null을 직접적으로 다루기보다 Optional 클래스를 통해 한번 wrapping해 사용하는 것이 낫다는 생각하에 ..
프로젝트를 진행하다 겪은 문제다. 람다식을 사용할 때, 특히 stream을 해 map으로 구조 변경 시 자기 자신을 인자로 넘겨주는 경우가 있는데, 이때 i -> i로 나는 그대로 넘겼다. 하지만 리펙토링을 하면서 Function.identity()와 i -> i 를 사용하는것의 차이가 무엇인지 궁금했다. @Override public Page findAllEventPages(Long userId, Pageable pageable) { Page eventPages = eventUserRepository.findAllByUserId(userId, pageable); List eventIds = eventPages.stream() .map(Event::getId) .toList(); Map eventUse..
이때까지 귀찮아서 Scanner만 항상 사용했는데, 이제야 정리를 해보고, 오늘 부로 절대 Scanner를 사용하는 과거로 돌아가지 않을 것이다. 1. Scanner Scanner는 띄어쓰기와 개행문자를 경계로 값을 인식하기 때문에 따로 가공할 필요가 없어 편리하다. 하지만 BufferedReader는 입력 받은 데이터가 String으로 고정되기 때문에 데이터를 원하는 타입으로 가공하는 작업이 필요하다. 알다시피 Scanner는 지원하는 메서드가 많다. 하지만 버퍼 사이즈가 1024 char이기 때문에 많은 입력을 필요로 할 경우에는 성능 상 좋지 못한 결과를 야기한다. (Scanner도 buffer 사용한다) 2. BufferedReader BufferedReader는 개행문자만 경계로 인식하고 입력받..
JDK 1.7 버전 부터 추가된 try-with-resources. 이런게 있다 정도만 알았고, 언제 사용하는지 정확히 몰랐다. 1. try-with-resources가 생겨난 배경 public static void main(String[] args) { DataInputStream dataInputStream = null; FileInputStream fileInputStream; try { fileInputStream = new FileInputStream("score.dat"); dataInputStream = new DataInputStream(fileInputStream); } catch (FileNotFoundException e) { e.printStackTrace(); } finally {..
자바를 처음 접한지는 몇년이 되었지만... 그리고 예외에 대해서 학습할 때부터 예외의 종류를 대충 알고있었지만, 자바를 사용하니 왜 예외의 종류를 아는 것이 중요한지 느꼈다. 예를 들어 Thread.sleep() 메서드의 경우 InterruptedException을 발생하고, try catch를 통해서 해결하거나 메서드에서 throw 하는 방식을 취해야하는데, 이것은 강제된다. 반면에, 0으로 나누거나, IndexOutOfBoundsException 같은 경우는 try catch로 처리해 주지 않아도 된다. 왜 그럴까? 1. Checked Exception Checked Exception은 컴파일타임에 확인되는 예외들이다. 만약 메서드 내에서의 코드 일부분이 checked exception을 throw한..
자바 5 버전 부터 Varargs의 개념이 도입되었다. (아마 5부터 등장한 제네릭의 영향인것으로 개인적으로 추정한다) 따라서 여러 argument를 메서드에서 받을 수 있다. void foo(T... args); 위 코드에서 T...는 T[ ] 로 변환된다. 하지만 문제는 T의 값이 가 다른 타입의 파라미터일 경우 동작하지 않는다. new T[ ]를 사용할 수 없기 때문에 new Object[ ] 라는 것을 사용한다. 만약 내 메서드가 T... 타입의 argument를 가지고 있으면, Safe: array의 요소가 T의 인스턴스인지에 대해서만 달렸다. 사실에 내 메서드가 의존한다.If your method only depends on the fact that the elements of the arra..
자바에서 array를 list로 변환하는 방법에는 두 가지 방법이 있다. 자바에서 Array를 list로 변환하기 위해서 1. Arrays.asList(array) 방법 2. List.of(array) 방법 총 두 가지 방법이 있다. 차이점은 무엇일까? 1. 변경가능 여부 (Mutable / Immutable) Arrays.asList()로 반환된 list는 변경이 가능하다. 하지만, List.of()에서 반환된 메서드는 변경이 불가능하다. Arrays.asList 메서드를 뜯어보면 다음과 같이 List를 리턴한다. @SafeVarargs @SuppressWarnings("varargs") public static List asList(T... a) { return new ArrayList(a); } 반..
1. Unit testing의 장점 Unit test의 필요성은 의심의 여지가 없다. 장점이 너무 많기 때문이다. (1)간결하게 말하자면, 유닛 테스트는 빠르게 문제가 발생한 것을 확인할 수 있고, 빠르게 고칠수 있다. 버그를 찾는데 더 적은 자원이 소비되기 때문에, 팀은 프로젝트의 다음 단계로 옮겨갈 수 있다. 유닛 테스트를 작성하면, 소프트웨어 건설 단계에서 많은 버그가 발견되기 때문에 다음 단계로 버그가 이동하는 것을 막아준다. 결과적으로 많은 시간과 자원을 아낄 수 있는 것이다. (2) 또한, 유닛 테스트는 프로덕트의 살아있는 documentation이다. 유닛 테스트는 적절/부적절한 소프트웨어 컴포넌트의 사용 정보를 가지고 있는 지표이기 때문에, 이려한 지표를 통해 완벽한 documentatio..
- Total
- Today
- Yesterday