no image
sql JOIN(Inner, Outer, Cross, Self)
Inner Join 교차 부분만 추출한다. ( NULL이 없다. ) Outer Join Left Outer Join - 왼쪽 테이블 기준으로 추출한다. JOIN 조건과 무관하게 왼쪽 데이터가 모두 보이는 결과이다. - JOIN 조건(on)에 맞지 않은 부분은 NULL 로 구성된다. Right Outer Join - 오른쪽 테이블 기준으로 추출한다. JOIN 조건과 무관하게 오른쪽 데이터가 모두 보이는 결과이다. - JOIN 조건(on)에 맞지 않은 부분은 NULL 로 구성된다. Full Outer Join - 양쪽의 모든 데이터를 추출한다. JOIN 조건과 무관하게 양쪽 데이터가 모두 보이는 결과이다. - 데이터 조합을 추출하는건 아니다. ( JOIN 조건이 있다. ) - JOIN 조건(on)에 맞지 않..
2023.09.06
no image
java factory method pattern
Factory Method Product 객체를 직접 생성하지 않고 Factory 클래스에서 Product를 만든다. 여러 Product 구현체가 있고 그 Product 를 만드는 Factory 구현체가 있다. 각각의 Factory 구현체가 그에 해당하는 Product 객체 생성의 책임을 가지고 있다. 객체 생성에 필요한 과정과 메서드를 템플릿 처럼 구성해놓고 과정과 메서드의 내부 동작은 Product 구현체와 Factory 구현체에서 유연하게 만들 수 있다. 장점 생성자와 구현 객체의 강한 결합을 피할 수 있다. 팩토리 메서드를 통해 객체 생성 후 공통으로 할 일을 수행하도록 지정할 수 있다. 캡슐화, 추상화를 통해 생성되는 객체의 구체적인 타입을 감출 수 있다. SRP(Single Responsibi..
2023.09.06
java object equals
Object.equals public static void main(String[] args) { Test t = new Test("hi"); Test t2 = new Test("hi"); t.equals(t2); } static class Test { String test; Test(String test) { this.test = test; } } 모든 객체의 조상은 Object고 Object는 equals method를 가지고 있다. 객체를 생성하고 equals에 별도의 @Override 가 없다면 public boolean equals(Object obj) { return (this == obj); } 위와 같이 동작한다. 참조 주소가 같아야 true를 반환하는 equals 이다. String t3..
2023.08.08
데이터베이스 정규화
정규화 이상 현상(삽입, 삭제, 갱신) 을 제거하기 위해 테이블을 분해하는 과정이다. 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다. 테이블을 분해하므로 JOIN이 늘어나고 성능이 느려질 수도 있다. 그래서 반정규화도 존재한다. 제1 정규화 - 속성의 원자성을 확보하고 원자값이 아닌 도메인을 분해해라. 제2 정규화 - 완전 함수 종속을 만족해라 = 부분 함수 종속을 제거해라 - 완전 함수 종속 : 기본키가 2개 이상으로 이루어진 경우, 기본키의 부분집합이 결정자가 되어선 안된다 제3 정규화 - 이행 함수 종속을 제거해라 ex) A->B (B는 A를 의존한다.) A(PK) B C 컬럼을 가진 테이블에서 A->B, B->C,..
2023.08.05
SQL) sql, 서브쿼리 (23-06-02)
velog에서 이전한 글 입니다. from, order by, group by 쉼표로 조합한다. select * from A, B select course_id, week, count(c.likes) from checkins c group by course_id, week join 연속 a inner join b on ~~ inner join c on ~~ a+b join한 table에 c를 join한다. 없는 것 들을 포함해서 통계를 내고 싶을 때 left join이 필요하다. count는 null을 세지 않는다. union에서는 개인 order by가 적용되지 않는다. 전체에 order by를 할 수 있다. 서브쿼리 select절 서브쿼리, join절 서브쿼리, from절 서브쿼리 select *, ..
2023.07.13
자바) ArrayList LinkedList 시간 비교 (23-07-06)
velog에서 이전한 글 입니다. 비교 ArrayList arrayList = new ArrayList(); LinkedList linkedList = new LinkedList(); System.out.println("뒤에 추가"); int count1 = 10_000_000; listAdd(arrayList, count1); listAdd(linkedList, count1); System.out.println("앞부터 삭제"); int count4 = 1_000; listRemoveHead(arrayList, count4); listRemoveHead(linkedList, count4); } 뒤에 추가 0.194 sec 0.896 sec 앞부터 삭제 5.199 sec 0.0 sec System.out..
2023.07.13
자바) ArrayList Capacity (23-07-06)
velog에서 이전한 글 입니다. ArrayList private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } public boolean add(E e) { modCount++; add(e, elementData, size); return true; } private void add(E e, Object[] elementData, int s) { if (s == elementData.length) elementData = grow(); elementData[s] = e; size = s + 1; } pr..
2023.07.13
자바) combination/ stream (23-06-19)
velog에서 이전한 글 입니다. combination static List combination(List list, List result, int depth) { List r = new ArrayList(); if (result.size() == depth) { r.add(result); return r; } for (int i = 0; i < list.size(); i++) { List n_list = new ArrayList(list.stream().skip(i + 1).collect(Collectors.toList())); List n_result = new ArrayList(result.stream().collect(Collectors.toList())); n_result.add(list.get..
2023.07.13
자바) 와일드카드 (23-05-30)
velog에서 이전한 글 입니다. 와일드 카드 출처 배열과 달리 제네릭에서는 공변성/반공변성 을 지원하지 않는다. // 공변성 Object[] Covariance = new Integer[10]; // 반공변성 Integer[] Contravariance = (Integer[]) Covariance; // 공변성 ArrayList Covariance = new ArrayList(); // 반공변성 ArrayList Contravariance = new ArrayList(); 이를 극복하고자 한 것이 와일드카드 class MyArrayList { Object[] element = new Object[5]; int index = 0; // 외부로부터 리스트를 받아와 매개변수의 모든 요소를 내부 배열에 추가하..
2023.07.13