[객체지향프로그래밍][Java] Initialization (정적 초기화 블록, 인스턴스 초기화 블록)
·
전공/객체지향프로그래밍
정적 초기화 블록 static { // 정적 멤버 변수 초기화 코드 } 실행 타이밍: 정적 초기화 블록은 클래스가 로드될 때 한 번만 실행(해당 클래스의 첫 번째 인스턴스를 생성하기 전) 실행 순서: 클래스 내에 정의된 순서대로 정적 초기화 블록이 실행 예외 처리: 정적 초기화 블록 내에서 발생하는 예외는 명시적으로 처리해야 함 멤버 변수 초기화: 정적 초기화 블록은 주로 정적(static) 멤버 변수를 초기화하는 데 사용, 이 블록 내에서 정적 멤버 변수에 값을 할당할 수 있으며, 복잡한 초기화 로직이 필요한 경우에 유용하게 사용됨 예시 1 public class Main { public static void main(String[] args) { System.out.println("Cls.field1..
[자료구조] 정렬 2 (외부 정렬 - 합병 정렬)
·
전공/자료구조
외부 정렬 정렬하려는 리스트 전체가 컴퓨터의 메인 메모리에 모두 올라갈 수 없다면 내부 정렬 사용 불가 블록 - 한 번에 디스크로부터 읽거나 디스크에 쓸 수 있는 데이터 단위, 여러 개의 레코드들로 구성 판독/기록 시간에 영향을 미치는 요소 탐구 시간: 판독/기록 헤드가 디스크 상의 원하는 실린더로 이동하는데 걸리는 시간, 헤드가 가로질러야 하는 실린더 수에 따라 결정됨 회전지연 시간: 트랙의 해당 섹터가 판독/기록 헤드 밑으로 회전해 올 때까지 걸리는 시간 전송 시간: 디스크로 오는 디스크로부터 데이터 블록을 전송하는 데 걸리는 시간 합병 정렬 입력 리스트의 여러 세그먼트들을 좋은 내부 정렬 방법으로 정렬 런(run) - 정렬된 세그먼트들 런이 생성되면 외부 저장 장치에 기록됨 1에서 만들어진 런들은 ..
[자료구조] 정렬 1 (내부 정렬 - 삽입 정렬, 퀵 정렬, 합병 정렬, 히프 정렬, 기수 정렬)
·
전공/자료구조
정렬 리스트를 오름차순, 내림차순 혹은 어떤 조건에 대해 순서대로 배열한 것 정렬에 필요성 빠른 탐색을 위해 사용 리스트의 엔트리를 비교하는 방법으로 사용 정렬 방법 내부 방법 - 정렬할 리스트가 작아서 전체적인 정렬이 메인 메모리 상에서 실행될 수 있을 때 사용 외부 방법 - 큰 리스트에 사용 삽입 정렬 template void Insert(const T &e, T *a, int i) { // e를 정렬된 리스트 a[1:i]에 삽입 // 리스트 a[1:i+1]도 정렬되게 함 // 배열 a는 적어도 i+2 원소를 포함할 공간 필요 a[0] = e; while (e < a[i]) { // 리스트의 맨 뒤부터 e가 삽입될 위치인지 탐색하며, a[i + 1] = a[i]; // 배열 a의 원소를 한칸씩 위로 ..
[객체지향프로그래밍][Java] Generics 심화 내용
·
전공/객체지향프로그래밍
Generics 제네릭의 사용 이유 컴파일 시간 단축 캐스트의 제거 Generics class, interface // raw type Box class public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; } } // generic type Box class public class Box { private T t; public void set(T t) { this.t = t; } public T get() { return t; } } 클래스 또는 인터페이스의 이름 뒤에 를 통해 타입 매개변수를 지정할 수 있음 타입 ..
[객체지향프로그래밍][Java] Queue 심화 내용
·
전공/객체지향프로그래밍
Interface Queue Queue는 인터페이스 Collection 상속 메소드 기능 boolean add(E e) e를 큐에 삽입, 성공시 true 반환 용량을 초과한 경우 IllegalStateException 발생 E element() 큐의 head 반환 큐가 비어있으면 예외 발생 boolean offer(E e) e를 큐에 삽입, 성공시 true 반환 용량을 초과한 경우 false 반환 E peek() 큐의 head 검색 큐가 비어있으면 null반환 E poll() 큐의 head 검색 및 삭제 큐가 비어있으면 null 반환 E remove() 큐의 head 삭제 큐가 비어있으면 예외 발생 Queue는 선입선출 방식으로 원소를 저장 head에서는 remove, poll로 인해 삭제가 일어남 re..
[객체지향프로그래밍][Java] Set 심화 내용(HashSet, TreeSet)
·
전공/객체지향프로그래밍
Set HashSet HashSet은 인터페이스 Set의 구현 클래스 Enhanced for문 사용 가능 랜덤 위치에 원소가 저장되므로 입력한 순서에 상관없이 원소가 출력됨 Set는 원소 중복 허용 x Set 원소 중복 import java.util.*; class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } @Override public String toString() { return "Point(" + x + "," + y + ")"; } // @Override // public boolean equals(Object obj) { // Point p = (Point) obj; // if (x == p.x && y =..
[객체지향프로그래밍][Java] List 심화 내용(Iterator)
·
전공/객체지향프로그래밍
List Enhanced for문 사용 // list가 초기화 되어있다고 가정 for(String str: list) { System.out.println(str); } // 위쪽 코드와 같은 기능 for(Iterator i = list.Iterator; i.hasNext(); ) { System.out.println(str); } Interface Iterable 메소드 기능 Iterator iterator() 타입의 반복자 리턴 public interface ListIterator extends Iterator 메소드 기능 void add(E e) 리스트에 원소를 더함 boolean hasNext() 리스트 반복자가 가리킬 다음 원소가 있으면 true boolean hasPrevious() 리스트 ..
[객체지향프로그래밍][Java] 모듈과 패키지 개념 (Object, Wrapper, Integer, String, StringBuffer, StringTokenizer, Math, Calendar)
·
전공/객체지향프로그래밍
패키지 서로 관련된 클래스와 인터페이스의 컴파일 된 클래스 파일들을 하나의 디렉터리에 묶어 놓은 것 패키지 사용하기 import 사용 x - 소스 내에서 패키지 이름과 클래스 이름의 전체 경로명을 써주어야 함 java.util.Scanner import 사용 - 소스의 시작 부분에 사용하려는 패키지 명시(클래스만 명시) import java.util.Scanner; // 특정 클래스의 경로명만 포함 import java.util.*; // 패키지 내의 모든 클래스 포함 패키지 만들기 패키지 선언 package 패키지명; - 컴파일한 클래스 파일을 패키지명의 디렉터리에 저장하라는 명령 - 소스 파일의 첫 줄에 선언 - 클래스의 경로명은 "패키지명.클래스명" 디폴트 패키지와 패키지 특징 디폴트 패키지 - p..
[객체지향프로그래밍][Java] 인터페이스의 구성 요소 심화 내용
·
전공/객체지향프로그래밍
자바 인터페이스의 구성 요소 (취소선 부분 생략 가능) 상수 public static final int X = 10; int X; int X = 10;은 public static final int X = 10;이 생략된 형태로 X라는 상수를 정의한 것이지만, int X;는 변수를 선언하는 것으로 해석되기 때문에 컴파일 에러가 발생 메소드 public abstract (abstract public) 추상 메소드 함수 몸통 부분 없음 사용하려면 반드시 함수 몸체 구현 필요 public default (default public) 인터페이스 내에서 메소드 정의({ } 부분이 필요함, 정의 안하면 컴파일 에러) 인터페이스 상속하여 default 메소드 사용 가능 오버라이딩 가능 Interface A -> Int..
[자료구조] 탐색 (순차 탐색, 이원 탐색, 두 리스트 비교)
·
전공/자료구조
탐색 리스트: 하나 이상의 필드로 된 레코드의 집합 키(key): 레코드를 구분하기 위해서 사용되는 필드 순차 탐색 template int SeqSearch(E *a, const int n, const K &k) { // a[1:n]을 왼쪽에서 오른쪽으로 탐색 // a[i]의 키 값이 k와 같은 가장 작은 i를 반환, 없으면 0 반환 int i; for (i = 1; i n) return 0; // i값을 찾지 못한 경우 return i; // i값을 찾은 경우 } 시간복잡도 - O(n) 순차 탐색의 성능 향상(정렬된 리스트의 경우) SepSearch의 for 조건 부분을 i n을 i > n || a[i] != k로 변경 탐색이 실패할 때 성능 향상 이원 탐색(Binary Search) int Binar..