Major

01 다중 키 화일 1. 다중 키 화일의 개념 1) 단일 키화일 - 지금까지 살펴 본 화일들로 기본 키를 사용하는 화일 - 순차 화일, 직접화일, 인덱스된 순차화일 2) 다중 키 화일 - 하나의 데이터 화일에 대해 여러 다른 탐색키를 이용한 여러 개의 접근 경로를 제공 3) 구현 방법 - 데이터를 중복 이용하여 각 응용에 맞는 화일을 각각 구성 - 한 화일에 대한 다수의 접근 경로 구축 : 다중 키 화일 역 화일 : 인덱스 이용 다중리스트 화일 : 레코드 사이의 리스트 이용 02 역 화일 1. 역 화일 구조 - 역 인덱스를 이용하는 구조 - 역 : 인덱스와 데이터 레코드 화일을 연결 2. 역 인덱스 1) 특징 - 데이터 화일에 있는 키 필드 값을 인덱스 키로 포함 - 인덱스 엔트리 = (키 값, 레코드 ..
· Major/Java
1. 리팩토링 1) 클래스 추출 - 기존 클래스에서 필드와 메서드를 추출하여 새로운 클래스로 옮기는 것 2) 리팩토링 카탈로그 이름 클래스 추출(Extract Class) 상황 클래스를 작성함 문제 한 클래스가 너무 많은 책임을 지고 있음 해법 묶을 수 있는 필드와 메서드를 찾아 새로운 클래스로 추출 결과 o 클래스가 작아짐 o 클래스의 책임이 명확해짐 x 클래스의 개수가 늘어남 2. 예제 프로그램 클래스명 역할 Book 책 클래스 Author 저자 클래스(리팩토링으로 작성) Main Book 사용법 예제 클래스 1) 리팩토링 전 public class Book { private String _title; private String _isbn; private String _price; private St..
01. 직접 화일의 개념 1. 직접화일 1) 임의 접근 화일 = 직접 화일 - 다른 레코드를 참조하지 않고도 개개 레코드에 접근 가능 - 인덱스된 화일, 인덱스된 순차 화일, 상대 화일, 해시 화일 2) 상대 화일 - 레코드의 키와 레코드의 위치 사이에 설정된 관계를 통해 레코드에 접근 - 상대 레코드 번호 : 화일이 시작되는 첫 번째 레코드를 1번으로 지정, 기준으로 번호 지정 > 사상 함수 - A : 키 값 => 주소 - 레코드 기록 시 : 키 값 => 레코드가 저장될 주소 - 레코드 검색 시 : 키 값 => 레코드가 저장되어있는 주소 - 모든 레코드에 직접 접근 가능(메인 메모리, 디스크등 직접 저장 장치에 저장하는 것이 효율적) - 사상함수 구현방법 : 디렉터리 검사, 계산을 이용한 방법 3) 디..
1. 인덱스된 순차화일의 구조 1) 구조 - 순차적으로 정렬된 순차데이터 화일과 이 데이터 화일에 대한 포인터를 가지는 인덱스로 구성 - 각 화일은 블록으로 구성 : 인덱스 블록(트리 구조), 데이터 블록(데이터 레코드와 자유공간) ⓐ 마스터 인덱스 : 최상위 레벨의 인덱스 블록 ⓑ 인덱스 엔트리의 구성 : ⓒ 자유 공간 : 레코드의 추가를 위해 남겨둔 여분의 공간, 화일 생성 시 각 블록에 만듦 > 인덱스된 순차 화일 - 키 값에 따라 정렬된 레코드를 순차적으로 접근 or 직접 접근하는 경우 사용 - 사전 검색 시 사전 옆면의 색인이 인덱스랑 같은 역할 * 일괄처리와 대화식 처리가 적합한 경우 2) 삽입 - 최대 키값에 따라 삽입, 만약 블록이 꽉찼다면 반으로 분할한다. - 분할됐으면 포인터 되는 키 ..
· Major/Java
1. 리팩토링 1) 메서드 추출 - 한 메서드에 세세한 처리가 많을 때 그런 처리를 묶어서 나누고 독립된 메서드로 추출하는 것 2) 리팩토링 카탈로그 이름 메서드 추출(Extract Method) 상황 메서드를 작성함 문제 메서드 하나가 너무 김 해법 기존 메서드에서 묶을 수 있는 코드를 추출해 새로운 메서드를 작성함 결과 O 각 메서드가 짧아짐 X 메서드 개수가 늘어남 2. 예제 프로그램 클래스명 역할 Banner 테두리 안에 문자열을 출력하는 클래스 Main 동작 확인용 클래스 1) 리팩토링 전 public class Banner { private final String _content; public Banner(String content) { _content = content; } public vo..
1. m-원 탐색 트리 1) 특징 : 이원 탐색 트리보다 분기율을 높여 m개 서브트리로 만든 것 ① 장점 : 트리의 높이가 감소(특정 노드 탐색시간 감소) ② 단점 : 삽입, 삭제 시 트리의 균형 유지를 위해 복잡한 연산이 필요함 ③ 노드 구조 : ex) 3-원 탐색 트리 2) m-원 탐색 트리의 검색 - 루트부터 시작하여 찾으려는 노드의 키 인덱스를 증가시키면서 키 값과 찾으려는 키 값이 동일하면 탐색을 멈춘다. ⓐ 탐색 시간 : 탐색 경로 길이(높이)에 비례 ⓑ 한 노드에는 m-1개 키 값을 저장 ⓒ 높이가 h일 때 - 최대 키 값의 개수: m^h-1 개 - 최소 높이 : logm(n+1) - 최대 탐색 시간 : O(logm(n+1)) 2. B-트리 1) 특징 : 균형된 m-원 탐색트리 ⓐ 루프와 리..
1. 인덱스 1) 특징 : 파일의 레코드들에 대한 효율적 접근 - 쌍 2) 종류 - 키에 따른 인덱스 : 기본 인덱스, 보조 인덱스 - 파일 조직에 따른 인덱스 : 집중 인덱스, 비집중 인덱스 - 데이터 범위에 따른 인덱스 : 밀집 인덱스, 희소 인덱스 3) 이진 트리 : 왼쪽 서브트리와 오른쪽 서브트리로 구성 2. 이원 탐색 트리 - 이진트리이면서 각 노드 Ni 레코드 키Ki와 이 키를 가지고 있는 레코드 포인터를 포함함 - 왼쪽 서브트리 Ki : 루트의 오른쪽 서브트리를..
· Major/Java
1. 리팩토링 1) 널 객체 도입 - 널 객체를 사용하면 '이 변수는 현재 null인가' 라는 확인을 생략할 수 있음 2) 리팩토링 카탈로그 이름 널 객체 도입 (Introduce Null Object) 상황 객체를 다룸 문제 Null 확인이 너무 많은 경우 해법 Null을 나타내는 특별한 개체를 도입해 ‘아무것도 안 함’ 이라는 처리를 하자 결과 장점 : null 확인이 줄어든다. 단점 : 널 객체만큼 클래스가 늘어난다. 2. 예제 프로그램 클래스명 역할 Person 사람을 나타내는 클래스(이름과 메일 주소를 담는다) Label 표시 가능한 문자열을 나타내는 클래스 Main 동작 확인용 클래스 1) 리팩토링 전 public class Person { private final Label _name; pr..
· Major/Java
1. 리팩토링 1) 어서션 도입 - 어서션 : 프로그램의 의도를 확실히 밝히면서 실행 시 조건이 반드시 성립함을 보장 2) 리팩토링 카탈로그 이름 어서션 도입(Introduce Assertion) 상황 코드 속에 성립해야 할 조건이 있음 문제 주석으로 ‘이런 조건이 성립한다'라고 적어도 프로그램 실행 시 확인되지 않음 해법 어서션 넣기 결과 o 해당 부분에서 성립해야 할 조건이 명확해지고 소스 코드의 가독성이 좋아짐 o 버그를 빨리 발견 가능함 o 어서션을 활성화하면 어서션이 성립하는지 자동으로 확인 가능함 o 어서션을 비활성화하면 어서션이 무시되어 성능이 개선됨 x 어서션을 지나치게 사용하면 오히려 읽기 어려워짐 주의 • 자바 컴파일러는 어서션을 무효화해도 어서션 부분 코드를 삭제하지 않음 • 어서션 ..
BeNI
'Major' 카테고리의 글 목록 (2 Page)