분류 전체보기
-
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. 추상클래스와 인터페이스 차이 추상클래스가 정의한 타입을 구현하는 클래스는 반드시 추상클래스의 하위클래스가 되어야한다.만약 두 클래스가 아무런 관계가 없는데 상속해야한다면, 혼란을 줄 수 있다. 자바는 단일 상속만 지원하므로, 추상 클래스 방식은 새로운 타입을 정의해야하는 제약을 가진다.반면 인터페이스가 선언한 메서드를 모두 정의하고 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다. 인터페이스 : 다중 상속 가능, 구현한 클래스와 같은..
-
이펙티브 자바 Item 19 - 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라언어/Effective Java 2024. 5. 31. 11:14
상속을 고려한 설계와 문서화란? 상속용 클래스를 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야 한다.클래스의 API로 공개된 메서드에서 클래스 자신의 또 다른 메서드를 호출할 수도 있다. 그 메서드가 재정의 가능 메서드(protected, public, final이 아닌 메서드)라면 그 사실을 호출하는 메서드의 API설명에 적시해야한다. API 문서의 메서드 설명 끝에 implementation Requirements로 시작하는 절이 있는데, 이 절이 메서드 내부 동작 방식을 설명하는 곳이다. @implSpec태그를 붙여서 작성하여, 자바독 도구가 생성해준다.해당 설명에 따라 iterator메서드를 재정의하면 remove 메서드에 영향을 준다는 점을 알 수 있다. protect..
-
이펙티브 자바 Item 18 - 상속보다는 컴포지션을 사용하라언어/Effective Java 2024. 5. 31. 10:35
1. 구체 클래스 상속의 위험성 다른 패키지의 구체 클래스를 상속하는 일은 위험하다 (인터페이스 상속말고, 구현 상속)메서드 호출과 달리 상속은 캡슐화를 깨뜨린다.상위 클래스에 따라 하위클래스의 동작에 문제가 생길 수 있기 때문이다.하위클래스가 깨지기 쉬운 이유 상위 클래스의 메서드를 재정의 하여 하위 클래스의 로직을 방어한다. 상위 클래스의 메서드를 동작을 다시 구현하는게 어렵다.오류나 성능을 떨어뜨릴 수도 있다.하위 클래스에서 접근 불가한 private 클래스를 써야한다면 구현이 불가능하다.상위 클래스 릴리즈에서 새로운 메서드를 추가했을 때를 고려해야함하위 클래스에서 허용되지 않은 원소를 추가할 지도 모른다!! 하위 클래스에 추가한 새 메서드가, 상위 클래스 다음 릴리즈에서 같은 시그니처를 가질 때..
-
이펙티브 자바 Item 17 - 변경 가능성을 최소화하라언어/Effective Java 2024. 5. 30. 16:13
불변 클래스는 별다른 동기화 방법을 적용하지 않았다 해도 어느 쓰레드에서건 마음껏 안전하게 사용할 수 있다. 불변 클래스란 그 인스턴스의 내부 값을 수정할 수 없는 클래스를 의미한다. 불변 인스턴스에 간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 달라지지 않는다. String, 기본 타입의 박싱된 클래스, BigInteger, BigDecimal 등이 여기에 속한다. 클래스를 불변으로 만들려면 다음 다섯 규칙을 따르면 된다. 객체의 상태를 변경하는 메서드를 제공하지 않는다.클래스를 확장할 수 없도록 한다.하위 클래스에서 부주의하게 혹은 나쁜 의도로 객체의 상태를 변하게 만드는 상태를 막아준다. 상속을 막는 대표적인 방법은 클래스를 final로 선언하는 것이지만 다른 방법도 살펴보자모든 필드를 f..
-
이펙티브 자바 Item 16 - public 클래스에서는 public필드가 아닌 접근자 메서드를 사용하라언어/Effective Java 2024. 5. 30. 09:52
1. 접근자 메서드를 활용한 데이터 캡슐화 대표적인 클래스 작성 실수: 인스턴스 필드만을 모아놓은 퇴보한 클래스 인스턴스 필드만을 모아놓은 클래스는 데이터 직접 접근할 수 있으나 캡슐화의 이점을 제공하지 못한다.public class Point { public double x; public double y;} 캡슐화가 전혀 안되기 때문에 아래와 같은 단점을 수반한다. API를 수정하지 않고는 내부 표현을 바꿀 수 없다. 불변식을 보장하지 못한다.외부에서 필드에 접근할 때 부수작업을 수행할 수 없다.*API 수정부분 Point.getValue() 같은 메서드를 호출해서 x,y를 얻는다고 했을 때 내부 구현 로직이 캡슐화되어 있기 때문에 얼마든지 바꿀 수 있음 Point.x로 접근했을 때, 만약 ..
-
이펙티브 자바 Item15 - 클래스와 멤버의 접근 권한을 최소화하라언어/Effective Java 2024. 5. 29. 17:28
잘 설계된 컴포넌트란?캡슐화가 얼마나 잘 되었는지.노출되는 API와 실제 구현이 얼마나 잘 분리되었는지.메시지를 주고받는 두 컴포넌트가 서로의 내부 동작을 신경쓰지 않는지. 캡슐화를 잘 지켰을 때 장점서로의 구현을 몰라도 되기 때문에 병렬로 개발이 가능하여 개발 속도가 빨라진다.잘 분리되어있는 컴포넌트는 관리 포인트가 작다. 디버깅도 빠르고, 교체도 빠르다잘 분리되어있는 컴포넌트는 최적화도 그 컴포넌트만 하면 되기 때문에 좋다.외부 컴포넌트에 종속되지 않기 때문에 재사용성이 높다.전체 시스템이 완성되지 않아도 개별 컴포넌트를 검증할 수 있기 때문에 큰 시스템 개발하는 난이도를 낮춰준다.1. 캡슐화의 핵심은 "접근제어자" 공개 API를 설계하고 그것만 public으로 지정한다 > 나머지는 private으로..
-
이펙티브 자바 Item 14 - Comparable을 구현할지 고려하라언어/Effective Java 2024. 5. 29. 16:16
1. Comparable 인터페이스란?Comparable 인터페이스는 객체를 정렬하는데 사용되는 메서드인 compareTo를 정의하고 있다.Comparable 인터페이스를 구현한 클래스는 반드시 compareTo를 정의해야 한다. 1.1 Comparable 인터페이스 특징자바에서 같은 타입의 인스턴스를 비교해야만 하는 클래스들은 모두 Comparable 인터페이스를 구현하고 있다.Boolean 타입을 제외한 래퍼 클래스와 알파벳, 연대같이 순서가 명확한 클래스들은 모두 정렬이 가능하다.기본 정렬 순서는 작은 값에서 큰 값으로 정렬되는 오름차순이다. 1.2 Comparable 인터페이스 구현Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 의미한다.public clas..