분류 전체보기 250

가비지와 가비지 컬렉션

가비지(Garbage)와 가비지 컬렉션(Garbage Collection) 1. 가비지 (Garbage) 가비지란 응용프로그램에서 더 이상 사용되지 않는 메모리이다. 자바 응용프로그램에서 new 연산자를 이용하여 시스템으로부터 할당받아 사용하다 더 이상 사용하지 않는 객체나 배열 메모리가 가비지가 된다. 더 이상 사용하지 않는다는 뜻은 객체나 배열을 가리키는 레퍼런스가 하나도 없음을 의미한다. 2. 가비지 컬렉션 (Garbage Collection) 가비지는 더 이상 참조되지 않기 때문에 가비지가 차지하고 있는 메모리 공간은 회수되어야 한다. 가비지가 많아지면 상대적으로 자바 가상 기계에서 응용프로그램에게 할당해줄 수 있는 가용 메모리의 양이 줄어들게 된다. 자바에서는 시간이 지날수록 가비지가 점점 늘어..

Java/Java 기본 2018.06.26

선택 정렬 (Selection Sort)

선택 정렬 (Selection Sort) 선택 정렬은 원리가 가장 간단한 정렬 알고리즘 중의 하나이다. 우선 배열 A[1..n]에서 가장 큰 원소를 찾아 이 원소와 배열의 맨 끝자리에 있는 A[n]과 자리를 바꾼다. 이 방식을 n 번째 원소부터 2번째 원소까지 하게 되면 배열은 정렬되게 되는데, 이것이 바로 선택 정렬이다. 선택정렬의 수도코드는 다음과 같다. selectionSort(A[], n) {for last O(n^2) 비교, O(n) 교환- 최선 시간 복잡도 => O(n^2) 비교, O(n) 교환- 평균 시간 복잡도 => O(n^2) 비교, O(n) 교환- 공간 복잡도 => O(1)

알고리즘 2018.06.25

마스터 정리

마스터 정리 마스터 정리는 특정한 모양을 가진 재귀식에 대해 바로 결과를 알 수 있는 아주 유용한 정리이다. 마스터 정리는 다음과 같은 모양을 가진 식에 적용된다. T(n) = a T(n/b) + f(n) 즉, 입력 크기 n인 문제를 풀기 위해 입력 크기 n/b인 문제를 a개 풀고, 나머지 f(n)의 오버헤드가 필요한 알고리즘들이 해당된다. 아주 많은 알고리즘이 이에 해당되기 때문에, 마스터 정리는 아주 유용한 방법이다. - 마스터 정리는 a >= 1, b > 1 에 대해 T(n) = a T(n/b) + f(n)인 점화식에서, n^(log(b) a) = h(n)이라고 할 때, T(n)의 점근적 복잡도를 다음의 기준에 따라 정의한다. 1) 어떤 양의 상수 e에 대해서, f(n)/h(n) = O(1/n^e)..

알고리즘 2018.06.25

점근적 표기

점근적 표기 알고리즘은 입력 크기가 아주 작으면 알고리즘의 효율성에 상관없이 금방 끝난다. 알고리즘의 효율성이 문제가 되는 것은 입력의 크기가 충분히 클 때이다. 그래서 알고리즘의 수행시간을 분석할 때는 항상 입력의 크기가 충분히 클 때에 대해서 분석한다. 즉, 점근적 분석을 한다. 점근적 분석의 필요성 어떠한 문제 해결을 위한 알고리즘의 성능분석을 할 때, 주어지는 데이터의 형태나 실험을 수행하는 환경, 또는 실험에 사용한 시스템의 성능등 다양한 요소에 의해 공평한 결과가 나오기 힘들고 비교 결과가 항상 일정하지 않을 수 있다. 이를 효과적으로 해결하는 방법이 점근적 분석법이다. 점근적 분석법은 각 알고리즘이 주어진 데이터의 크기를 기준으로 수행시간 혹은 사용공간이 얼마나 되는지를 객관적으로 비교할 수..

알고리즘 2018.06.25

재귀(자기 호출)

재귀 (자기 호출) - Recursion 자기 호출은 컴퓨터 과학 이론의 근간을 이루는 중요한 개념이다. 이것은 어떤 문제를 해결하는 과정에서 자신과 똑같지만 크기가 다른 문제를 발견하고 이들의 관계를 파악함으로써 문제 해결에 간명하게 접근하는 방식이다. 별 생각없이 받아들이면 처음 접하는 듯해 보일 수 있다. 하지만, 사실 대한민국 학생들은 기본적으로 고등학교 시절에 이 재귀와 관련된 훈련을 접해왔다. 고등학교 수학에서 배우는 수학적 귀납법이 이와 관련이 깊다. 수열의 점화식도 이 자기 호출의 기초적인 형태이다. 귀납적 사고라는 것은 성격이 같지만 크기가 다른 문제간의 "관계"를 파악하는 것이다. 재귀니 자기 호출이니 말로만 들어서는 어떤 것인지 감이 오지 않는다. 예제 코드를 통해서 알아 보도록 하자..

알고리즘 2018.06.25

알고리즘 (Algorithm)

알고리즘 (Algorithm) 알고리즘이란 어떤 작업을 수행하기 위해 입력을 수행하기 위해 입력을 받아 원하는 출력을 만들어내는 과정을 기술한 것이다. 알고리즘을 설계하기 위해서는 우선 해야 할 작업을 명확하게 명시해야 한다. 설계하려는 알고리즘이 "무엇을" 하는지는 입력과 출력에 의해 명시할 수 있다. 1. 알고리즘의 명확성 알고리즘이 명확하다는 것은 모호하지 않고 이해하기 쉬움을 뜻한다. 특정 프로그래밍 언어로 변환하는 데 어려움을 느끼지 않을 정도가 되어야 한다. 그렇다고 해서, 특정한 프로그래밍 언어의 문법에 맞추라는 것은 아니다. 이것은 오히려 알고리즘의 명확성을 해칠 수 있다. 명확하다는 것과 자세하다는 것을 혼동하지는 말기 바란다. 2. 알고리즘을 왜 분석하는가? 어떤 알고리즘을 설계하고 나..

알고리즘 2018.06.25

객체의 소멸

객체의 소멸 자바에서는 객체를 생성하는 new 키워드와 생성자는 있지만 객체를 소멸시키는 기능은 없다. 또한 자바에서는 객체가 생성될 때 호출되는 생성자는 정의할 수 있지만, 소멸할 때 호출되는 소멸자 메소드는 정의할 수 없다. 객체 소멸이란 new에 의해 생성된 객체 메모리를 자바 가상 기계에게 돌려주어 가용 메모리(available memory)에 포함시키는 것이다. C++에는 new로 할당받은 객체가 더 이상 필요 없을 때 시스템에게 리턴할 수 있도록 delete 연산자를 두고 있으며, delete 연산자가 실행되어 객체가 소멸되면 소멸자가 호출된다. 소멸자의 역할은 객체가 사라지는 시점에서 필요한 마무리 작업을 수행하는 것이다. 예를 들어, 어떤 객체가 파일을 열어놓고 있다가 소멸되면 소멸자에서 ..

Java/Java 기본 2018.06.25

this(), 다른 생성자 호출

this(), 다른 생성자 호출 this()는 한 클래스 내의 한 생성자에서 다른 생성자를 호출할 때 사용하는 자바 코드이다. 한 클래스 내의 어떤 메소드가 다른 메소드를 호출할 수 있는 것처럼 생성자도 중복된 다른 생성자를 호출할 수 있다. this()는 동일한 클래스 내의 다른 생성자의 호출이다. i.e.public class Book {String title;String author;int ISBN; public Book(Stiring title, String author, int ISBN) {this.title = title;this.author = author;this.ISBN = ISBN;System.out.println("객체 생성!");} public Book (String title, i..

Java/Java 기본 2018.06.25

생성자

생성자 앞에서 클래스는 객체를 생성하기 위한 설계도 또는 틀이며 객체는 설계도 또는 틀로 찍어낸 실체라고 하였다. 생성자는 객체가 생성될 때 초기화를 위해 실행되는 메소드이다. 예를 들어, 얼굴이라는 클래스로 사람 객체를 만들어낼 수 있다. 그런데, 만약 생성자 없이 그냥 객체를 생성한다면 새롭게 생성된 사람 객체는 아무런 옷도, 화장도, 돈도 없는 그냥 맨몸의 사람이 된다. 그런데, 생성자를 통해서 필요한 멤버 변수 등을 초기화 시켜준다면, 옷도 입고 경우에 따라 악세사리나 화장도 한 사람 객체가 될 것이다. 또한 생성자를 호출하여 매개 변수등을 이용해서 키나 몸무게, 머리 색깔, 성격 등을 다르게 하게 되면 다른 특징을 가진 사람 객체를 생성할 수 있다. 1. 생성자 선언과 호출 생성자는 객체가 생성..

Java/Java 기본 2018.06.24