분류 전체보기
-
이펙티브 자바 Item 25 - 톱레벨 클래스는 한파일에 하나만 담자언어/Effective Java 2024. 6. 4. 11:17
톱레벨 클래스는 한 파일에 하나만 담자 톱레벨 클래스를 여러개 선언하면 이득은 없고 심각한 위험만 발생할 수 있다. 한 클래스를 여러개로 정의할 수 있으며, 그 중 어느것을 사용할지는 어느 소스파일을 먼저 컴파일하냐에 따라 달라지기 때문이다. 톱레벨 클래스 중복정의 Utensil과 Dessert참조 하는 Main 클래스 public class Main { public static void main(String[] args) { System.out.println(Utensil.NAME + Dessert.NAME); }} class Utensil { static final String NAME = "pan";}class Dessert { static final Strin..
-
이펙티브 자바 Item 24 - 멤버 클래스는 되도록 static으로 만들라언어/Effective Java 2024. 6. 4. 10:52
중첩 클래스는 다른 클래스 안에 정의된 클래스다. 중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여야 하며, 그 외의 쓰임새가 있다면 톱레벨 클래스로 만들어야 한다. 중첩 클래스 종류 정적 멤버 클래스(비정적)멤버 클래스익명 클래스 지역 클래스 정적 멤버 클래스를 제외한 나머지는 내부 클래스(inner class)다.정적 멤버 클래스 클래스 내부에 static으로 선언된 클래스다.다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도 접근 가능. 그 외는 일반 클래스와 같다.private으로 선언 시 바깥 클래스에서만 접근 가능하다. public class Animal { private String name = "cat"; // 열거 타입도 암시적 static public en..
-
이펙티브 자바 Item 22,23 - 인터페이스는 타입을 정의하는 용도로만 사용하라, 태그 달린 클래스보다는 클래스 계층구조를 활용하라카테고리 없음 2024. 6. 4. 10:12
아이템 22 인터페이스는 타입을 정의하는 용도로만 사용하라 메서드 없이 상수 필드만 가득한 상수 인터페이스를 만들지마라. -> 이는 안티 패턴이다.상수 인터페이스의 구현은 외부 인터페이스가 아닌 내부 구현에 해당하는데, 내부 구현을 외부로 노출할 우려가 있다. 상수를 공개하고 싶다면, 상수 전용 인터페이스를 구현하지 말고 그와 연관된 클래스나 인터페이스에서 공개하도록 하자.아니면 인스턴스화를 막은 클래스에 담아서 공개하자 상수 공개 방법 1. 클래스나 인터페이스 자체에 상수 추가 방법 [첫 번째 - 클래스, 인터페이스 자체 상수 추가]public final class Integer extends Number implements Comparable { ... @Native public static ..
-
이펙티브 자바 - Item 21 - 인터페이스는 구현하는 쪽을 고려해서 설계하라언어/Effective Java 2024. 6. 4. 09:20
인터페이스에 메서드 추가 자바 8 전에는 기존 구현체를 깨뜨리지 않고 인터페이스에 메서드를 추가할 방법은 존재하지 않았다. 자바 8부터 디폴트 메서드를 통해서 기존 인터페이스에 메서드를 추가할 수 있게 되었다.디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게 된다.단, 이렇게 디폴트 메서드를 추가한다고해도 기존 구현체들과 매끄럽게 연동된다는 보장은 없다. 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어렵기 때문이다. default boolean removeIf(Predicate filter) { Objects.requireNonNull(filter); boolean res..
-
SQL BOOSTER - 소계 구하기 ROLLUP, UNION ALL, 카테시안 조인,CUBE,GROUPING SETSDataBase/SQL 2024. 6. 3. 22:32
1. ROLLUP 이해하기 대부분의 분석 리포트는 소계(중간합계)와 전체합계가 필요하다. 이를 BI툴 없이 순수 SQL만 사용해야한다면, ROLLUP이 가장 효율적이다. ROOLUP은 GROUP BY 뒤에 ROLLUP이라고 적어서 사용한다. GROUP BY ROLLUP(A,B,C,D)로 적으면GROUP BY된 A+B+C+D별 데이터 A+B+C별 소계 데이터A+B별 소계데이터A별 소계데이터전체합계로 나온다. SELECT TO_CHAR(T1.ORD_DT,'YYYYMM') ORD_YM,T1.CUS_ID,SUM(T1.ORD_AMT) ORD_AMTFROM T_ORD T1WHERE T1.CUS_ID IN('CUS_0001','CUS_0002')AND T1.ORD_DT >= TO_DATE('20170301','YY..
-
SQL BOOSTER - GROUP BY와 ROLLUPDataBase/SQL 2024. 6. 2. 18:37
프로젝트를 수행하는데 최소한의 SQL임! 잘 알아두자 1. GROUP BY 데이터를 그룹화하는 문법이다. (같은 값을 가진 데이터끼리 모으는 것을 의미)중복된 값이 제거된 결과로 나오면서, 집계함수를 사용한다.SELECT T1.ORD_DT, T1.PAY_TP,SUM(T1.ORD_AMT)ORD_AMTFROM T_ORD T1WHERE T1.ORD_ST = 'COMP'GROUP BY T1.ORD_DT, T1.PAY_TPORDER BY T1.ORD_DT, T1.PAY_TP;T1.ORD_DT로 1차 그룹화 후 T1.PAY_TP로 2차 그룹화 (주문일시, 지불유형별 주문 금액 합계)자주 쓰는 집계함수는 다음과 같다.SUM,COUNT,MIN,MAXOVER 절과 함께 사용하는 SUM,LEAD,LAG와 같은 분석함..
-
SQL BOOSTER - 기본 셋팅 (테이블 스페이스, 데이터 블록)DataBase/SQL 2024. 6. 2. 16:27
1. 테이블 스페이스 생성 테이블 스페이스란? 테이블, 인덱스, 프로시저, 뷰 등의 객체들을 저장해놓은 오라클의 논리적인 저장공간데이터를 물리적으로 저장하는 단위이다. 하나의 테이블 스페이스는 여러 개의 세그먼트로 구성세그면트는 다시 익스텐스로 분리되고 익스텐스는 데이터 블럭으로 구성된다. 확장자는 dbf 혹은 ora이다. 세그먼트 : 하나의 테이블, 인덱스에 대응한다. (create table 등의 문장으로 생성됨)익스텐스 : 연속된 데이터 블록의 집합, 세그먼트를 처음 만들거나, 세그먼트 저장공간이 더 필요한 경우 연속된 블록의 주소를 갖는 데이터 블록을 할당 받아 세그먼트에 추가데이터블록: 데이터의 최소단위 * 사용자가 입력한 데이터는 테이블에 저장되고 테이블은 물리적 파일 안에서 데이터 블록 ..
-
이펙티브 자바 Item 20 - 추상클래스보다는 인터페이스를 우선시하라언어/Effective Java 2024. 5. 31. 11:45
1. 자바 제공 다중 구현 메커니즘자바가 제공하는 다중구현 메커니즘은 추상클래스와 인터페이스 두가지다.자바 8부터 인터페이스도 디폴드 메서드를 제공할 수 있게되어, 이제 두 메커니즘 모두 인스턴스 메서드를 구현형태로 제공할 수 있다. 2. 추상클래스와 인터페이스 차이 추상클래스가 정의한 타입을 구현하는 클래스는 반드시 추상클래스의 하위클래스가 되어야한다.만약 두 클래스가 아무런 관계가 없는데 상속해야한다면, 혼란을 줄 수 있다. 자바는 단일 상속만 지원하므로, 추상 클래스 방식은 새로운 타입을 정의해야하는 제약을 가진다.반면 인터페이스가 선언한 메서드를 모두 정의하고 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다. 인터페이스 : 다중 상속 가능, 구현한 클래스와 같은..