전체 글
-
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 33 - 타입 안전 이종 컨테이너를 고려하라언어/Effective Java 2024. 6. 5. 11:42
타입 안전 이종 컨테이너 패턴 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화 키를 함께 제공하면 제네릭 타입 시스템이 값의 타입이 키와 같음을 보장해준다. 이러한 설계 방식을 타입 안전 이종 컨테이너 패턴이라 한다. public class Favorites { public void putFavorite(Class type, T instance); public T getFavorite(Class type);}... // 코드생략public static void main(String[] args) { Favorites favorites = new Favorites(); favorites.putFavorite(String.class,"morning..
-
이펙티브 자바 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..
-
정규표현식카테고리 없음 2024. 6. 4. 18:01
기본적으로 문장에 단어 위주로 검색 1 '.' 특수문자 임의의 한 문자를 의미 .이 위치한 곳에는 반드시 임의의 한글자가 위치ex) a.b -> acb,azb, .bc -> abc,zbc 2. '*' 특수문자 바로 앞의 문자가 없거나 하나 이상 반복됨을 의미 ex) Hello* -> Hell, Hello, Helloo, *d는 표현 불가 3. "+" 특수문자바로 앞의 문자가 하나 이상 Hello+ -> Hello, Hellooo, Helloooo+d는 표현 불가 4. '?' 특수문자 바로 앞의 문자가 없거나 하나이다. 5. '^' 특수문자 문장의 처음 나타내며 ^단어로 문장이 시작함^Hello -> Hello World, Hello Java 6. '$'특수문자문장의 끝이 $가 있는 단어World$..
-
이펙티브 자바 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집합이 타입이 모두 같아야 한다. 이를 한정적 와일드 카드 타입을 이용하면 더 유연하게 개선이 가능하다. 제네릭 싱글턴 팩터리 (불변 객체가 제네릭 타입) 불변 객체를 여라 타입..