본문 바로가기

반응형

분류 전체보기

(20)
[Effectvie Java] ITEM 31. 한정적 와일드카드를 사용해 API 유연성을 높이라. 매개변수화 타입은 불공변(invariant)이다. 리스코프 치환원칙에 어긋난다. 상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에 문제가 없어야 한다. 즉, B가 A의 자식일 때, A 타입을 사용하는 부분에서 B로 치환해도 문제없이 동작이 되어야 한다. https://brownbears.tistory.com/579 [SOLID] 리스코프 원칙 법칙이란 (Liskov Substitution Principle, LSP) 리스코프 치환 법칙은 SOLID 원칙에서 L에 해당하는 법칙입니다. 해당 법칙은 상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에 문제가 없어야 합니다. 즉, B가 A의 자식일 때, A 타입을 사 brownbears.tistory.com 한정적 와일드카드 타입 Iterable
[EffectiveJava] ITEM 30. 이왕이면 제네릭 메서드로 만들라 제네릭 메서드 메서드도 제네릭으로 변경 가능. 샘플 로변환 예제 public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } 제네릭 싱글턴 팩터리 요청한 타입 매개변수에 맞게 매번 그 객체의 타입을 바꿔줌. Collections.reverseOrder 같은 함수 객체나 Collections.emptySet 같은 컬렉션용으로 사용한다 재귀 타입 한정 자기자신이 들어간 표현식을 사용하여 타입 매개변수의 허용 범위를 한정 할 수 있다. Comparable 인터페이스와 함께 쓰인다.
[EffectiveJava] ITEM 29. 이왕이면 제네릭 타입으로 만들라 제네릭 타입 배열을 사용하는 코드는 제네릭으로 변환을 고려 해야 한다. 클라이언트단 (소스) 에서 직접 형변환을 해줘야하는 것 보다 제네릭 으로 사용하는 것이 안정성이 높다. ​ 샘플코드 public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if( si..
[EffectiveJava] ITEM 28. 배열보다는 리스트를 사용하라 배열 제네릭 차이 1. 배열은 공변이다. 상위 하위 타입이 존재하며, 이런 관계가 성립 될 시에는 문제가 있는 코드도 '런타임 시점'에 오류를 발견 할 수 있다. 이와는 다르게 제네릭의 경우 상 하위 관계가 성립되지 않으며, 불공변 관계이므로 서로 종속적일 수 없다. 공변, 불공변 관련 참고 URL : https://hwan33.tistory.com/24​ ​ 2. 배열은 실체화 된다. 제네릭은 런타임에는 타입정보가 소거 된다. ( 컴파일에만 검사, 런타임에는 확인 하지 않는다 ) 그렇기 때문에 제네릭은 컴파일시점에 안전성이 높다. (런타임에선 낮음) 배열의 경우 런타임시점에 체크를 하기때문에 런타임 시점에 안정성이 높다. 다만 컴파일시에는 체크를 하지 못한다. 제네릭 타입 시스템의 취지 >> 런타임에 ..
[오라클] ORA-01438:이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다. 데이터 입력시 아래와 같은 에러가 발생할 때가 있다. ORA-01438:이 열에 대해 지정된 전체 자릿수보다 큰 값이 허용됩니다. ORA-01438:value larger than specified precision allowed for this column [원인] 에러가 발생한 이유는 입력하려는 데이터의 자릿수가 컬럼과 맞지 않기때문이다. ex ) NUMBER(3,0)인 컬럼에 1000이상의 숫자를 넣는 경우. [해결방법] 데이터를 보정하거나, 테이블 컬럼의 사이즈를 변경해야한다. ALTER TABLE OOO MODIFY ( XXXCOLUMN NUMBER(4,0) );
[오라클] 쿼리에서 JSON 파싱하기. 외부 API 호출에 따른 LOG데이터를 DB에 저장하는경우, JSON 형식으로 그 데이터를 저장하는 경우가 있다. 이때 JSON형식 데이터의 값을 뽑아내는 쿼리이다. 하기와 같은 테이블과 JSON데이터가 있다고 가정하고, 데이터 추출하는 쿼리를 작성한다. CREATE TABLE JSON_DATA ( KEY_VALUE VARCHAR2(10) , SEND_DATA VARCHAR2(2000) ); {"BarcodeNumber":"","PurchaseAmount":"100","StandardProductCode":""} * 추출 쿼리 SELECT JSON_VALUE(A.SEND_DATA, '$.BarcodeNumber') AS BARCODE_NUMBER , JSON_VALUE(A.SEND_DATA, '$.Pur..
[오라클] Number 타입 이란? 오라클 테이블 생성시 Number타입을 사용하게 되는데 이 데이터 타입과 관련한 설명이다. Number타입 생성시 인자는 1개 또는 2개가 될 수 있다. NUMBER(p, s) p : precision, 여기서는 최대 유효숫자 자릿수를 의미한다. s : scale, 소수점 기준 자릿수를 의미한다. 예시 CREATE TABLE emp ( empno NUMBER(5)NOT NULL, num1 NUMBER(5), num2 NUMBER(5,1), num3 NUMBER(5,-1) ); 위 테이블에서 아래의 INSERT 쿼리를 실행하게 되면 다음과 같은 결과가 조회된다. INSERT INTO EMP(EMPNO, NUM1, NUM2, NUM3) VALUES (12345, 12345, 12345.1, 12345.1) ..
[오라클] ORA-01012 : not logged on 해당 오류는 세션이 종료된 이후(연결이 끊긴 이후) 쿼리를 실행했을때 발생한다. 해결방안 : 다시 세션을 연결한 이후 실행하면 해결된다.

반응형