분류 전체보기
-
SQLBOOSTER - RANGE JOINDataBase/SQL 2024. 6. 6. 14:52
대부분 조인은 같다를 조건으로 이용하지만, 반드시 같다 조건으로만 조인을 할 수 있는 것은 아니다. 범위 (Like, )조건을 줄 수도 있으며 때에 따라 같지않다를 사용할 수도 있다. 범위 조건을 이용해 조인하는 것을 RANGE JOIN이라 부른다. 먼저 RANGE JOIN 사용 전 이전 GROUP BY로 금액 유형에 따라 High,Low,Middle로 나누었던 쿼리를 살펴보자 SELECT ORD_ST, CASE WHEN ORD_AMT >= 5000 THEN 'HIGH' WHEN ORD_AMT >= 3000 THEN 'Middle Order' ELSE 'Low Order' END ORD_AMT_TP, COUNT(*) ORD_CNTFROM T_ORDGROUP BY ORD..
-
이펙티브 자바 Item 34 - int 상수 대신 열거 타입을 사용하라언어/Effective Java 2024. 6. 5. 15:39
Java에서 열거 타입을 지원하기 전에는 아래와 같이 정수 상수를 한 묶음으로 선언하여 사용하였다.하지만 이런 '정수 열거 패턴'은 많은 단점들이 존재한다. public static final int APPLE_PIE = 0;public static final int APPLE_JAM = 1;public static final int GRAPE_PIE = 0;public static final int GRAPE_JAM = 1; 1. 타입 안전을 보장할 방법이 없으며 표현력이 좋지 않다. 위 코드에서 보는 것과 같이 APPLE_GRAPE_PIE와 GRAPE_PIE는 다른 접두어를 써서 겉보기에는 다른 곳에서 사용할 것을 알 수 있지만 컴파일러 입장에서는 둘다 정수 0이기 때문에 APPLE_PIE가 사용되..
-
이펙티브 자바 Item 32 - 제네릭과 가변인수를 함께 쓸 때는 신중하라언어/Effective Java 2024. 6. 5. 10:28
가변인수 ...은 메서드를 사용하는 클라이언트에서 파라미터를 몇개 보낼지 선택하는 것 아래와 같이 가변인수와 제네릭을 함께 사용하면 타입 안정성 문제가 발생한다.static void dangerous(List... stringLists) { List intList = List.of(42); Object[] objects = stringLists; objects[0] = intList; // 힙 오염 발생 String s = stringLists[0].get(0); // ClassCastException } 제네릭은 성격상 배열과 궁합이 별로다.제네릭 타입의 배열을 정의한는 걸 컴파일러가 막아준다.그러나 가변인자는 내부적으로 제네릭의 배열이 만들어지는..
-
이펙티브 자바 Item31 한정적 와일드 카드를 사용해 API의 유연성을 높여라언어/Effective Java 2024. 6. 5. 09:42
한정적 와일드 카드를 써야 하는 이유 상속을 고려해서 제네릭을 짜야할 때 한정적 와일드 카드를 써야한다. 제네릭은 기본적으로 불공변이다. List와 List은 서로 아무런 관계가 없는 타입이다.때로는 이러한 불공변을 보다 더 유연한 방식으로 사용해야할 때가 있다. 이때 와일드 카드를 사용한다.public void pushAll(Iterable src) { for (E e : src) { push(e); }}위 코드는 아무런 문제가 없다만, Stack을 Number로 선언하고, ArrayList를 매개변수로 전달하면, Number가 Integer의 부모이므로, 논리적으로 될 것 같지만 동작하지 않는다.이럴때 한정적 와일드 카드로 해결할 수 있다.public void pushAll(Iterabl..
-
SQLBOOSTER - INNER JOINDataBase/SQL 2024. 6. 4. 23:27
INNER-JOIN 이란 이너 조인은 조인 조건을 만족하는 데이터만 결합하여 결과를 내보낸다. (T1.CUS_ID = T2.CUS_ID)WHERE 절에서 사용하는 조건은 필터 조건과 조인 조건 두 가지가 있다. FROM 절에 사용된 테이블이 두 개 이상이면 필터 조건과 조인 조건이 동시에 있을 수 있다.SELECT T1.COL_1, T2_COL_1FROM ( SELECT 'A' COL_1 FROM DUAL UNION ALL SELECT 'B' COL_1 FROM DUAL UNION ALL SELECT 'A' COL_1 FROM DUAL )T1,( SELECT 'A' COL_1 FROM DUAL UNION ALL SELECT 'B' COL_1 FROM DUAL UNION ALL SEL..
-
이펙티브 자바 Item 30 - 이왕이면 제네릭 메서드로 만들라언어/Effective Java 2024. 6. 4. 16:13
제네릭 메서드 작성 방법 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다.Collections의 binarySearch,sort 등 알고리즘 메서드는 모두 제네릭이다.제네릭 메서드 작성법은 제네릭 타입 작성법과 비슷하다.타입 매개변수 목록은 메서드의 제한자와 반환 타입 사이에 온다. public static Set union (Set s1, Set s2){ Set result = new HashSet(s1); result.addAll(s2); return result;} 위 코드의 세개의 Set집합이 타입이 모두 같아야 한다. 이를 한정적 와일드 카드 타입을 이용하면 더 유연하게 개선이 가능하다. 제네릭 싱글턴 팩터리 (불변 객체가 제네릭 타입) 불변 객체를 여라 타입..
-
이펙티브 자바 Item29 - 이왕이면 제네릭 타입을 사용하라언어/Effective Java 2024. 6. 4. 14:37
Object배열로 이루어진 스택 public class ArrayStack { private Object[] elements; private int size; public ArrayStack() { this.elements = new Object[10]; } public void push(Object obj) { elements[size++] = obj; } public Object pop() { if (size == 0) { throw new IllegalArgumentException("스택에 아무것도 없습니다"); } Object result = elements[--size]; ..
-
이펙티브 자바 Item 26,27,28 (제네릭 관련)언어/Effective Java 2024. 6. 4. 11:30
Item 26 (로 타입은 사용하지 마라) 로타입은 List list = new ArrayList(); 형태로 사용하는 방식이다.매개변수화 타입은 List list = new ArrayList(); 방식 로타입은 뭐든지 다 들어간다. List list = new ArrayList(); list.add("문자열"); list.add(1); String text = (String) list.get(0); Integer number = (Integer) list.get(1); 문자열, 숫자 가리지 않고 다 넣을 수 있다. 하지만, 타입 캐스팅해줘야하는 경우가 빈번해진다. 제네릭을 통해 타입 안정..