본문 바로가기
반응형

개발/Java18

[Java] 표준 예외를 사용하라 Effective Java 3/E - 아이템 72 표준 예외를 사용하라 표준 예외 재사용 장점 1. 익숙 2. 예외 클래스 수가 적을수록 메모리 사용량 감소, 클래스 적재하는 시간 감소 Exception, RuntimeException, Throwable, Error 직접 재사용 X - 여러 성격의 예외들을 포괄하는 클래스이므로 안정적으로 테스트할 수 없음 널리 재사용되는 예외 예외 주요 쓰임 IllegalArgumentException 허용하지 않는 값이 인수로 건네졌을 때(null은 따로 NullPointerException으로 처리) IllegalStateException 객체가 메서드를 수행하기에 적절하지 않은 상태일 때 NullPointerException null을 허용하지 않는 메서드에 nu.. 2022. 8. 16.
[Java] Arrays.asList / 특징 / 배열을 List 컬렉션으로 바꾸기 자바 컬렉션에는 유용한 API들이 많이 있다 배열을 사용하는 것보다 자바 컬렉션 API를 사용하는 것이 편할 때 배열을 List로 변경해서 사용하면 편리하다 1. 예제 코드(배열->List) String[] stringArr = {"A","B","C"}; List stringList = Arrays.asList(stringArr); 2. Arrays.asList 특징 - Arrays.asList를 이용하면 고정된 사이즈의 리스트로 반환 -> 추가,삭제 불가 new ArrayList() 로 새로운 리스트를 생성하면 추가, 삭제 가능 String[] stringArr = {"A","B","C"}; List stringList = new ArrayList(Arrays.asList(stringArr)); - R.. 2022. 4. 13.
[Java] eqauls, hashCode 구현 시 getter 를 이용하자! eqauls, hashCode 구현 시 getter 를 이용하는 것이 좋다 => 객체에 직접 접근해서 비교하도록 구현한다면 , 프록시 객체의 경우 제대로 비교를 할 수 없다! (프록시 네 이놈 @_@) => 사실 equals, hashCode가 아니어도 getter를 사용하는 것이 좋다 [인텔리제이 Generate 이용하여 구현하는 방법] 1. command + n 으로 Generate 메뉴 열은 후 equals() and hashCode() 클릭 2. Use getters during code generation 선택 후 Next next next~ 3. 인텔리제이가 만들어준 코드! @Override public boolean equals(Object o) { if (this == o) return t.. 2022. 4. 8.
[JAVA8] HashMap 성능 / 내부구조 모던 자바 인 액션을 보고 있는데 몰랐던 흥미로운 사실이 있어서 포스팅을 한다 Java8 에서 HashMap의 내부구조를 바꿔 성능을 개선했다고 한다 - Java8 이전 키로 생성한 해시코드로 접근할 수 있는 버켓에 저장 같은 해시코드의 키인 경우 LinkedList 버킷 반환 O(n) 시간소요 - Java8 이전과 동일 동일 해시코드를 반환하는 키가 8개 이상일 경우 정렬된 트리를 이용해 동적으로 치환 O(log(n)) 시간소요 키가 String, Number 클래스 같은 Comparable의 형태여야만 정렬된 트리 지원됨 모던자바인액션 책에는 "버킷이 너무 커질 경우" 이를 정렬된 트리로 바꿔준다는데 그 뜻이 명확하게 와닿지않아서 검색해보니 아래와 같이 실험정신 투철하신 분의 멋진 포스팅을 발견하여 .. 2022. 1. 31.
[JUnit] #01. JUnit 5 개요 / Java 버전 / 예시 프로젝트 # JUnit 5 는 이전 버전의 JUnit 과 달리 세 가지 모듈로 구성 JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage # Java 버전 Java 8 이상 필요 이전 버전의 JDK에서 컴파일 된 코드는 테스트 가능 # 예시 프로젝트 Gradle & Java https://github.com/junit-team/junit5-samples/tree/r5.8.2/junit5-jupiter-starter-gradle GitHub - junit-team/junit5-samples: Collection of sample applications using JUnit 5. Collection of sample applications using JUnit 5. C.. 2022. 1. 24.
[Lombok] @Builder / @Builder.Default / @Singular # 빌더 패턴 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴 2 단어 요약 : 생성자 오버로딩 (위키백과 참조) @Builder @Builder 어노테이션은 class, 생성자, method에 위치할 수 있다 @Builder가 만들어주는 7가지 1. 내부 정적 클래스(FooBuilder) 2. private 필드(Builder의 각 파라미터에 해당하는 필드, static X, final X) 3. pacakge private(접근제한자:default)의 아규먼트가 없는 빈 생성자 4. Builder의 각 파라미터에 대해, setter와 비슷한 메서드 - 파라미터와 같은 타입, 같은 이름. builder 자신을 반환 5. build() .. 2022. 1. 21.