본문 바로가기

전체 글

(127)
Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 방법 1 점층적 생성자 패턴 public class Member { private String name; // 필수 private int age; // 필수 private String address; // 선택 private String phone; // 선택 private String email; // 선택 // 필수 매개변수를 가지는 생성자 public Member(String name, int age) { this(name, age, null, null, null); } // 선택 매개변수 address가 추가된 생성자 public Member(String name, int age, String address) { this(name, age, address, null, null); } // 선택 매..
Item1. 생성자 대신 정적 팩터리 메서드를 고려하라. 정적 팩토리 메서드 장단점 장점 이름을 가질 수 있다. 메서드의 이름으로 생성한 객체의 특성이나 역할을 코드 상에서 쉽게 유추할 수 있다. → 가독성 up 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. Boolean 클래스에서 TRUE, FALSE 두가지 상태 인스턴스 불변 클래스 싱글턴 방식 생성된 인스턴스를 재사용하는 것이 가능한 경우에는 불필요하게 인스턴스를 새로 생성하지 않고 정적 팩토리 메서드를 이용한 재사용 인스턴스를 이용하는 것이 좋다. 플라이웨이트 패턴 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 부모 클래스(혹은 인터페이스)를 구현한 자식 클래스가 있다면 자식 클래스를 반환타입으로 사용할 수 있다. 인터페이스의 요소들만 알아도, 그 구현체들에 대한 이름조차 몰라도 ..
MySQL 연산자와 내장 함수 연산자 동등 비교 Null safe NULL을 하나의 값으로 인식하고 비교함으로 NULL을 반환하지 않는다. Null unsafe = NULL을 비교시에는 NULL을 반환한다. 부정 비교 , != NOT 연산 !, NOT AND, OR 연산 divide 연산 /, DIV, %, MOD REGEXP 연산 REGEXP, RLIKE 정규 표현식을 비교하는 연산자 문자열 칼럼 비교에 사용할 때 REGEXP 조건의 비교는 인덱스 레인지 스캔을 사용 X LIKE 연산 % : 0 또는 1 이상의 모든 문자 _ : 정확히 하나의 문자 ESCAPE : %, _ 문자 비교를 위해서 escape 문자를 설정하여 %, _사용이 가능하게 함 ex) select ‘a%’ LIKE ‘a/%’ ESCAPE ‘/‘; BETWEEN 연..
MySQL의 주요 처리 방식 1. 풀 테이블 스캔 풀테이블 스캔이란? 인덱스를 사용하지 않고 테이블의 데이터를 처음부터 끝까지 읽어서 요청된 작업을 처리하는 작업 MyISAM 스토리지 엔진 풀 테이블 스캔시 디스크로부터 페이지를 하나씩 읽어 온다. InnoDB 특정 테이블의 연속된 데이터 페이지가 읽히면 백그라운드 스레드에 의해 리드 어헤드(Read ahead) 작업을 자동으로 시작한다. 이 경우 필요한 데이터를 미리 읽어 두었기 때문에 좀 더 빠른 성능을 보장할 수 있다. + Read ahead? 어떤 영역의 데이터가 앞으로 필요해지리라는 것을 예측해서 요청이 오기 전에 미리 디스크에서 읽어 InnoDB의 버퍼 풀에 가져다 두는 것 2. ORDER BY 처리, Using filesort 인덱스를 사용한 정렬 이미 정렬된 기준이 인..
DB 실행 계획 분석 EXPLAIN - 2 Intro 실행 계획 분석 1에 이어서 다른 컬럼을 살펴보자. 5. key 칼럼 실행계획에서 사용할 인덱스 정보를 나타내는 컬럼이다. 인덱스를 사용하지 못하는 경우에는 NULL이 표시된다. 사용할 인덱스 정보를 통해서 실행 쿼리가 어떤 인덱스를 사용해 최적화를 이루는지 알 수 있게 한다. 6. ken_len 칼럼 key로 사용할 인덱스가 단일로 사용될 수도 있지만 복합적으로 여러개의 인덱스를 사용할 수 있다. key_len을 통해서 인덱스의 각 레코드에서 몇 바이트까지 사용했는지를 알 수 있다. 7. ref 칼럼 접근 방식(type)이 ref 방식이면 참조조건으로 어떤 값을 이용하는지를 보여주는 칼럼이다. +) 만약 이 값이 func 으로 표시된다면 조인 칼럼 타입이 일치하지 않아서 추가적인 가공처리(타..
got 예문 I need to get some groceries before I go home. (집에 가기 전에 식료품을 사야 한다.) He got a new job in a different city and had to move. (그는 다른 도시에서 새로운 직장을 얻어 이사를 했다.) She got lost on her way to the museum and had to ask for directions. (그녀는 박물관으로 가는 길에서 길을 잃어 방향을 물어봐야 했다.) We got married last year in a small ceremony with just our family and close friends. (우리는 작은 가족과 친구들만 초대한 결혼식으로 작년에 결혼했다.) I got a flat..
[JPA] 영속성 컨테이너 관련 의문점. 엔티디의 생명주기가 어떻게 되는가? new : 식별자(id)가 존재하지 않은 새로운 엔티디 Managed : 영속성 컨테이너에 저장된 엔티디로서 무결성을 지니고 있다. Detached : 식별자(id)가 존재하는 엔티디로서 무결성이 없다. Removed : 삭제된 인스턴스 영속성 컨테이너는 쓰레드끼리 공유되는 객체인가? 영속성 컨테이너는 공유 자원이 아니다. 영속성 컨테이너는 하나의 요청(쓰레드)에서 사용하는 1차 캐시로서의 역할을 한다. 어플리케이션 단에서 공유되는 캐시 자원이 있는데 이 자원은 EntityManagerFactory를 통해서 얻을 수 있다. EntityManagerFactory를 통해서 2차 캐시를 얻을 수 있다. 이때 2차 캐시는 어플리케이션 단에서 공유되는 캐시이다. [JPA] 트랜..
코테 알고리즘 실수 목록 https://school.programmers.co.kr/learn/courses/30/lessons/67258 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr - map 사용시 ...ifAbsent() 함수를 이용했는데 이때 논리적으로 오류가 있는 것을 한참동안 발견하지 못했다. 만약 map을 이용할 때 다음 함수를 사용해서 틀린다면 코드가 길어져도 get, contain 관련 함수로 로직을 나누어서 생각하자. - do while을 통해서 슬라이딩 원도우 구현하는 과정에서 로직 상 순서가 이상한 점이 있었다. 그래서 마지막 인덱스에서 확인이 안되는 경우..