목록전체 글 (172)
개발 기록
## ordinal 인덱싱 대신 EnumMap을 사용하라 class Plant { enum LifeCycIe { AMMUAL, PERENNIAL, BIEMMIAL } final String name; final LifeCycIe lifeCycle; Plant(String name, LifeCycIe lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Override public String toString() { return name; }} ### ordinal() 을 배열 인덱스로 사용한 예 - 따라하면 안 됨public static void usingO..
## item34 예제, 열거 타입의 제약 ex 1. 데이터와 메서드를 갖는 열거 타입public enum Planet { MERCURY(3.302e+23, 2.439e6), VENUS (4.869e+24, 6.052e6), EARTH (5.975e+24, 6.378e6), MARS (6.419e+23, 3.393e6), JUPITER(1.899e+27, 7.149e7), SATURN (5.685e+26, 6.027e7), URANUS (8.683e+25, 2.556e7), NEPTUNE(1.024e+26, 2.477e7); private final double mass; // 질량(단위: 킬로그램) private final ..
## null이 아닌, 빈 컬렉션이나 배열을 반환하라 - 따라하면 안 되는 코드 (컬렉션이 비었으면 null을 반환)private final List cheesesInStock = ...;/*** @return 매장 안의 모든 치즈 목록을 반환한다.* 단, 재고가 하나도 없다면 null을 반환한다.*/public List getCheeses() { return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock);} -- null을 반환하게 되면 클라이언트는 항상 방어 코드를 넣어줘야함, 방어코드를 빼먹으면 오류가 발생할 수 있getCheeses()를 사용하는 클라이언트는 null 확인을 추가로 해야한다.if (cheeses != null &..
## 가변인수는 신중히 사용하라 - 가변인수 메서드 : 명시한 타입의 인수를 0개 이상 받을 수 있음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개 이상 필요합니다."); int min = args [0]; for (int i = 1; i - 제대..
httpx를 버전 0.27.2로 다운그레이드해서 해결. httpx 0.28에서는 프록시 설정 방식이 변경되어 httpx.Client의 초기화 메서드가 더 이상 proxies라는 인수를 지원하지 않기 때문에 오류 발생 출처https://community.openai.com/t/error-with-openai-1-56-0-client-init-got-an-unexpected-keyword-argument-proxies/1040332 Error with OpenAI 1.56.0 - Client.__init__() got an unexpected keyword argument 'proxies'I’m trying to run the data validator with this bash command openai ..
## 제네릭과 가변인수를 함께 쓸 때는 신중하라 ### 가변인수 메서드하나의 메서드가 가변적인 수의 매개변수를 받을 수 있도록 지원 가변인수(Varargs)를 사용하는 메서드를 호출하면 Java 컴파일러가 자동으로 배열을 생성public static void varargsExample(String... args) { // args는 배열로 처리됨 System.out.println("Length: " + args.length);}호출시 아래처럼 컴파일varargsExample(new String[]{"A", "B", "C"}); ### 이 배열은 내부로 감춰져야 하는데, 클라이언트에 공개되면서 문제가 발생할 수 있다. 가변인수 매개변수에 제네릭이나 매개변수화 타입이 포함되면 컴파일 경고 발생wa..

인덱스 유무에 따른 성능 차이select * from customer where first_mname = 'minsoo';first_name에 인덱스가 없다면- full scan (=table scan) 으로 찾음- O(N)first_name에 인덱스가 있다면- full scan보다 빠르게 찾음- O(logN) (B-tree based index일때) 인덱스를 쓰는 이유- 조건을 만족하는 튜플들을 빠르게 조회- 빠르게 정렬, 그룹핑 인덱스 생성 문법- 이미 만들어진 테이블에 생성CREATE INDEX index_name ON table(column)CREATE UNIQUE INDEX index_name ON table(column1, column2) - 테이블 만들때 생성CREATE TABLE tabl..
## 이왕이면 제네릭 타입으로 만들라 클래스 안에 다른 객체들을 담는 역할을 하는 클래스들은 제네릭 타입으로 만들면 유용하다.ex) stack- 제네릭을 사용할때 장점클라이언트 코드에서 형 변환 을 사용하지 않도록 만들 수 있다.또한 형 변환 을 잘못 사용했을 때 발생할 수 있는 ClassCastException 을 미연에 방지 할 수 있다.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_CAPACI..