개발 공부 기록

개발 공부 기록

  • 분류 전체보기 (190)
    • spring (41)
      • JPA (19)
      • TEST (4)
      • 비동기 처리 (4)
      • SECURITY (1)
      • BATCH (0)
      • WebFlux (0)
    • 문제풀이 (2)
      • 백준 (2)
      • 프로그래머스 (0)
    • java (43)
      • java (39)
      • servlet_jsp (3)
      • jdbc (1)
    • 프론트 (7)
      • html (6)
      • css (1)
    • DB (12)
      • Oracle-기초 (8)
      • Mysql-기초 (4)
      • Redis (0)
    • CS (4)
      • Network (4)
      • 디자인 패턴 (0)
    • Project (0)
      • e-commerce (0)
    • Book (66)
      • 이펙티브 자바 (55)
      • 클린코드 (0)
      • 모던 자바 인 액션 (11)
  • 홈
  • 태그
  • 방명록
RSS 피드
로그인
로그아웃 글쓰기 관리

개발 공부 기록

컨텐츠 검색

태그

디폴트 메서드 메서드 참조 인터페이스 JPA 스트림 단위 테스트 Collector 상속 가변인수 조인 통합 테스트 Enum 배열 람다식 이펙티브 자바 람다 최적화 영속성 제네릭 DSL

최근글

댓글

공지사항

아카이브

Book/이펙티브 자바(55)

  • Item59 - 예외는 진짜 예외 상황에만 사용하라

    예외를 잘못 사용한 예를 보자 public static void main(String[] args) { Mountain [] range = new Mountain[3]; range[0] = new Mountain(); range[1] = new Mountain(); range[2] = new Mountain(); try { int i = 0; while (true) { range[i++].climb(); } } catch (ArrayIndexOutOfBoundsException e) { e.printStackTrace(); } } => 등산! 등산! 등산! java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at eff..

    2024.01.11
  • Item55 - 옵셔널 반환은 신중히 하라

    자바 8 전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때 1. 예외를 던지거나 2. 객체 참조라면 null 값을 반환한다. 예외는 진짜 예외적인 상황에서만 사용해야 하며 null을 반환할 때는 null 처리 코드를 추가해야 한다. 자바 8 이후에는 다른 선택지가 생겼다. Optinal는 null이 아닌 T타입 참조를 하나 담거나, 혹은 아무것도 담지 않을 수 있는 불변 컬렉션이다. => (컬렉션을 구현한 건 아니다.) public static E max(Collection c) { if (c.isEmpty()) throw new IllegalArgumentException("빈 컬렉션"); E result = null; for (E e : c) if (result == null || e.compa..

    2024.01.03
  • 가변인수는 신중히 사용하라

    가변인수 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있다. 가변인수 메서드를 호출하면 먼저 인수의 개수와 길이가 같은 배열을 만들고 인수들을 이 배열에 저장하여 가변인수 메서드에 건네준다. 다음은 입력받은 int 인수들의 합을 계산해주는 가변인수 메서드다. static int sum(int... args) { int sum = 0; for (int arg : args) sum += arg; return sum; } 인수가 1개 이상이어야 할 때도 있다. 최솟값을 찾는 메서드에 인수 0개를 받을 수 있도록 설계하는 건 좋지 못하다. static int min(int... args) { if (args.length == 0) throw new IllegalArgumentException("인수가 1개..

    2023.12.31
  • Item52 - 다중정의는 신중히 사용하라

    다음 컬렉션 분류기 코드를 보자 // 코드 52-1 컬렉션 분류기 - 오류! 이 프로그램은 무엇을 출력할까? (312쪽) public class CollectionClassifier { public static String classify(Set s) { return "집합"; } public static String classify(List lst) { return "리스트"; } public static String classify(Collection c) { return "그 외"; } public static void main(String[] args) { Collection[] collections = { new HashSet(), new ArrayList(), new HashMap().valu..

    2023.12.29
  • Item51 - 메서드 시그니처를 신중히 설계하라

    이번 아이템은 API 설계요령을 설명한다. 1. 메서드 이름을 신중히 짓자 항상 표준 명명 규칙을 따라야 한다. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관데게 짓는게 최우선 목표다. 긴 이름을 피하고 애매하면 자바 라이브러리의 API 가이드를 참조하자. 2. 편의 메서드를 너무 많이 만들지 말자 모든 메서드는 각각 자신의 소임을 다해야 한다. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다. 아주 자주 쓰일 경우에만 별도의 약칭 메서드를 두자. 3. 매개변수 목록을 짧게 유지하자 4개 이하가 좋다. 4개가 넘어가면 매개변수를 전부 기억하기가 쉽지 않다. 같은 타입의 매개변수 여러 개가 연달아 나오는 경우가 특히 좋지 않다. 과하게 긴 매개변수 목..

    2023.12.28
  • Item50 - 적시에 방어적 복사본을 만들라

    자바는 안전한 언어지만 다른 클래스로부터 침범을 막으려면 방어적으로 프로그래밍해야 한다. 어떤 객체든 그 객체의 허락 없이는 외부에서 내부를 수정하는 일은 불가능하다. 하지만 주의를 기울이지 않으면 자기도 모르게 내부를 수정하도록 허락하는 경우가 생긴다. // 코드 50-1 기간을 표현하는 클래스 - 불변식을 지키지 못했다. (302-305쪽) public final class Period { private final Date start; private final Date end; /** * @param start 시작 시각 * @param end 종료 시각. 시작 시각보다 뒤여야 한다. * @throws IllegalArgumentException 시작 시각이 종료 시각보다 늦을 때 발생한다. * @t..

    2023.12.27
  • Item49 - 매개변수가 유효한지 검사하라

    메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다. ex) 인덱스 값은 음수 x, 객체 참조는 null값 x 등등 이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되거 전에 검사해야한다. 메서드 몸체가 실행되기 전에 매개변수를 확인한다면 잘몯된 값이 너멍왔을 때 즉각적이고 깔끔한 방식으로 예외를 던질 수 있다. public, protected 메서든ㄴ 매개변수 값이 잘못됐을 때 던지는 예외를 문서화해야한다. 보통은 IllegalArgumentException, IndexOutOfBoundsException, NullPointerException 중 하나가 될 것이다. 매개변수의 제약을 문서화한다면 그 제약을 어겼을 때 발생하는 예외도 함께 기술해야 한다. 이런 간단한 방법..

    2023.12.26
  • Item45 - 스트림은 주의해서 사용하라

    스트림 API는 다재다능하여 거의 모든 계산을 해낼 수 있다. 하지만 할 수 있다는 뜻이지 해야 한다는 뜻은 아니다. 스트림은 제대로 사용하면 프로그램이 짧고 깔끔해지지만, 잘못 사용하면 읽기 어렵고 유지보수도 힘들어진다. 스트림을 언제 써야 하는지를 규정하는 확고부동한 규칙은 없지만, 참고할 만한 노하우는 있다. 다음 코드를 보자 public class Anagrams { public static void main(String[] args) { String[] strings = {"abs", "bsa", "dds", "sdd", "cad", "acd", "dul", "sba"}; int minGroupSize = 2; Map groups = new HashMap(); Iterator s = Arrays..

    2023.12.21
  • Item43 - 람다보다는 메서드 참조를 사용하라

    람다의 큰 장점중 하나는 간결함인데, 이보다 더 간결하게 만든느 방법은 메서드 참조이다. 다음 코드를 보자 String 타입의 키와 Integer 값의 매핑을 관리하는 프로그램의 일부다. public static void main(String[] args) { Map map = new HashMap(); map.merge("key1", 1, (count, incr) -> count + incr); map.merge("key1", 1, (count, incr) -> count + incr); map.merge("key2", 1, (count, incr) -> count + incr); map.merge("key2", 1, (count, incr) -> count + incr); map.merge("key2..

    2023.12.19
이전
1 2 3 4 ··· 7
다음
티스토리
© 2018 TISTORY. All rights reserved.

티스토리툴바