개발 공부 기록

개발 공부 기록

  • 분류 전체보기 (199)
    • 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 (70)
      • 이펙티브 자바 (55)
      • 클린코드 (0)
      • 모던 자바 인 액션 (15)
  • 홈
  • 태그
  • 방명록
RSS 피드
로그인
로그아웃 글쓰기 관리

개발 공부 기록

컨텐츠 검색

태그

Flow 리액티브 람다식 통합 테스트 Future 이펙티브 자바 Collector 제네릭 JPA 람다 비동기 단위 테스트 스트림 DSL 가변인수 영속성 CompletableFuture Reactive 메서드 참조 리액티브 프로그래밍

최근글

댓글

공지사항

아카이브

Book(70)

  • Item39 - 명명 패턴보다 애너테이션을 사용하라

    옛날에는 도구나 프레임워크가 특별히 다뤄야 할 프로그램 요소에는 구분되는 명명 패턴을 적용했다고 한다. 예를 들어 JUnit은 버전 3까지 테스트 메서드 이름을 test로 시작하게끔 했다. public TestClass extends TestCase { public void testHelloWorld() { System.out.println("Hello World"); } } 단점 1. 오타가 나면 안된다. : 프레임워크가 이 메서드를 무시하고 지나친다. 2. 올바른 프로그램 요소에서만 사용되리라 보증할 방법이 없다. 3. 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없다. 애너테이션은 이 모든 문제를 해결해준다. @Retention(RetentionPolicy.RUNTIME) @Target(Elem..

    2023.12.17
  • Item37 - ordinal 인덱싱 대신 EnumMap을 사용하라

    배열이나 리스트에서 원소를 꺼낼 대 ordinal 메서드로 인덱스를 얻는 코드가 있다. 식물을 간단히 나타낸 다음 클래스가 있다. public class Plant { enum LifeCycle {ANNUAL, PERENNIAL, BIENNIAL} final String name; final LifeCycle lifeCycle; public Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Override public String toString() { return "Plant{" + "name='" + name + '\'' + ", lifeCycle=" + lifeCycle + '}'; } ..

    2023.12.13
  • Item36 - 비트 필드 대신 EnumSet을 사용하라

    열거한 값들이 주로 집합으로 사용될 경우, 예전에는 각 상수에 서로 다른 2의 제곱을 할당한 정수 열거 패턴을 사용해왔다. public static final int STYLE_BOLD = 1; //1 public static final int STYLE_ITALIC = 1

    2023.12.12
  • Item35 - ordinal 메서드 대신 인스턴스 필드를 사용하라

    대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다. 열거 타입 상수는 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal이라는 메소드를 제공한다. 만약 ordinal 메서드를 사용해 해당 열거 타입 상수와 연결된 정숫값을 얻으려고 하면 유지보수에 매우 좋지 않다. public enum Ensemble { SOLO, DUET, TRIO, QUARTER, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusicians() { return ordinal() + 1; } } SOLO = 1, DUET = 2 라는 의미의 정숫값을 얻기 위해 ordinal() 메서드를 사용했다. 하지만 만약 이 상수 선언을 바..

    2023.12.11
  • Item34 - int 상수 대신 열거 타입을 사용하라(2)

    열거 타입에는 상수 이름을 입력받아 그 이름에 해당하는 상수를 반환해주는 valueOf(String) 메서드가 자동 생성된다. public enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY} public static void main(String[] args) { Day day = Day.valueOf("MONDAY"); } 열거 타입의 toString 메서드를 재정의하려거든, toString이 반환하는 문자열을 해당 열거 타입 상수로 변환해주는 fromString 메서드도 함께 제공하는 걸 고려해보자. // 코드 34-7 열거 타입용 fromString 메서드 구현하기 (216쪽) private static final Ma..

    2023.12.10
  • Item34 - int 상수 대신 열거 타입을 사용하라(1)

    열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 자바에서 열거 타입을 지원하기 전에는 다음 코드처럼 정수 상수를 한 묶음 선언해서 사용했다. - 정수 열거 패턴 private static final int APPLE_FUJI = 0; private static final int APPLE_PIPPIN = 1; private static final int APPLE_GRANNY_SMITH = 2; private static final int ORANGE_NAVEL = 0; private static final int ORANGE_TEMPLE = 1; private static final int ORANGE_BLOOD = 2; 단점. APPLE_XXXX이 들어올 곳에..

    2023.12.10
  • Item32 - 제네릭과 가변인수를 함께 쓸 때는 신중하라

    가변인수(varargs) 메서드와 제네릭은 자바 5 때 함께 추가되었으나 잘 어울리지 못한다. 가변인수는 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 한다. static void varargs(String... strArr) { Object[] objects = strArr; String s = (String) objects[0]; System.out.println(s); } public static void main(String[] args) { varargs("there", "will", "hi"); } -> "there" 가빈인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어진다. => strArr 이 varargs 매개변수에 제네릭이나 개변수화 타입이 포함되면 ..

    2023.12.08
  • Item31 - 한정적 와일드카드를 사용해 API 유연성을 높이라

    아이템 28에서 이야기했듯 매개변수화 타입은 불공변이다. => List != List 리스코프 치환원칙을 생각해보면 불공변인게 정상이다. => List은 List가 하는 일을 제대로 수행을 하지 못하니 하위 타입이 될 수 없다. 하지만 불공변 방식은 유연하지 못하다. 다음 Stack 예제를 보자 public class Stack { pubilc Stack(); public void push(E e); public E pop(); public boolean isEmpty(); } 여기에 일련의 원소를 스택에 넣는 메서드를 추가해야 한다고 가정하자 public void pushAll(Iterable src) { for (E e : src) push(e); } 이 메서드는 스택의 원소 타입과 src의 원소 타..

    2023.12.07
  • Item30 - 이왕이면 제네릭 메서드로 만들라

    매개변수화 타입을 받는 정적 유틸리티 메서드 - 한정적 와일드카드 타입(아이템31)을 사용하면 더 유연하게 개선할 수 있다. 클래스와 같이 메서드도 제네릭으로 만들 수 있다. 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다. 다음 예제를 보자 두 집합의 합집합을 반환하는 메서드이다. public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } 메서드 사용시 타입이 다른 두개의 Set을 호출해도 이상이 없지만 합집합을 타입 캐스팅하면 문제가 생긴다. /*정상*/ public static void main(String[] args) { Set guys = Set...

    2023.12.06
이전
1 2 3 4 5 6 7 8
다음
티스토리
© 2018 TISTORY. All rights reserved.

티스토리툴바