Total

동기화와 비동기화 - 동기화 방식은 한 자원에 대해 동시에 접근하는 것을 제한하는 방식이다. - 다시말해서, 순서를 지키겠다는 말이다. - 비동기화 방식은 한 자원에 대해 동시에 접근이 가능하다 동기화 - System Call이 끝날 때까지 다른 쓰레드의 접근을 막아버리는 것이다. - 한마디로, nextLine()에서 입력을 받을 때까지 대기하는 것과 같다. 비동기화 - System Call이 왔든 말든 상관없이 계속 호출할 수 있다. - Call Back 함수를 통해 결과를 가져온다! * 동기화의 차이? - 결과물을 가져오는 시점이 달라진다!!! Java의 Synchronized 키워드 - 한마디로 Java에서의 멀티 쓰레드에서의 접근을 막는다!! 입니다. 1 2 3 4 5 6 7 8 9 10 11 1..
이론? 현업? - 학사 과정에서 배우는 코딩은 정말 구현 위주의 수업이다. - 이것이 항상 전부라는 생각하는 개발자들이 많고 나 또한 그렇게 생각해왔다. ** 그냥 돌아가기만 하고, 서비스만 되면 되는거 아니에요???? * 정말 그게 그럴까? - 처음부터 완벽하게 짜면 좋지만, 그런 사람은 거의 없기에 - 대.다.수 의 코드가 수정작업에 들어간다. - 만약, 급한일이 생겨서 다른 부서로 옮기거나, 동료 개발자가 그 코드를 고치는 일이 생긴다면? - 코드를 읽을 수 없다....... @-@ - 눈으로 디버깅으로 능한 정도가 아니면 절대 불가능하다. 우리는 좀 더 정성껏 작성할 필요가 있다 - 원활한 코드 커뮤니케이션(?)을 위하여 이미 정해진 규칙이 있다. - Java Code Convention - 정말..
JVM? - JVM : Java Virtual Machine, 자바 가상 머신 - 어떤 OS에서 동작할 수 있다는 이식성이 있으며, 스택기반으로 이루어져 있다! JVM은 다음과 같은 2가지 기능을 제공한다. ① 메모리 관리 ② Garbage Collection Why JVM? - Java 프로그램을 설계할 때, 알 수 없는 버그나 오류가 발생한 경우 빠른 디버깅을 위해 - 프로그래머가 동작과정을 숙지하고 있어야 한다 JVM 구조 Class Loader - 클래스 로더, Runtime시에 동적으로 클래스를 로드하여 링크를 통해 배치하는 작업을 수행하는 역할! - Java는 컴파일 타임에 클래스를 참조하는게 아니라 Runtime에 참조한다!! Execution Engine - Class Loader가 Run..
Insertion Sort? - 가장 기본적인 정렬방법 중(Bubble Sort, Selection Sort)와 같이 시간복잡도 O(N^2)를 가진다. - 안정적인 정렬 방법이다. - 최선의 경우 O(N), 최악의 경우 O(N^2)이다. - N의 크기가 작을수록 O(N^2)의 정렬 방법이 효율이 좋다 * Why ? - Quick, Merge의 경우 Function Call 에 들어가는 비용이 더 커지므로! 시간복잡도에 대한 고찰 - 최선의 경우 : 주어진 key값에 대하여 한번만 비교하고 끝날 때!!!! ( 땡기는 작업 X ) - 최악의 경우 : 주어진 key값에 대하여 모든 원소를 비교해야 할 때!! 정렬 순서 1. 0번째 index는 제외하고, 1번째부터 index를 시작한다! 2. 해당 범위내에 마..
QuickSort? - 말 그대로 빠른 정렬이다. - 퀵 소트는 평균적인 시간복잡도는 O(NlogN), 최악의 경우 O(N^2) 이다. - 따로 메모리를 저장하여 정렬하지 않아서 공간복잡도는 O(1)이다! - 이러한 불규칙적 성질 때문에 불안정 정렬이라 한다. - 일단 이론이 굉장히 어려우므로 바로 설명을 가보도록 하자 과정 1. 리스트 안에 있는 한 요소(pivot)를 고르자! 2. pivot을 기준으로 큰 값은 오른쪽, 작은 값은 왼쪽으로 정렬하자~! 3. pivot의 왼쪽 부분과 오른쪽 부분을 다시 재귀로 정렬하자! 4. 단 리스트의 크기가 0, 혹은 pivot 자신만 있을 때 (1) 이면 하지 않는다! Quick 정렬에 대한 고찰 - 파티션을 나누는 과정이 MergeSort와 동일하게 2분할이다...
MergeSort? - 대표적인 분할정복 정렬 알고리즘 중의 하나 cf> 분할정복(Divide And Conquer) ? : 문제를 작은 2개의 문제로 분리하여, 해결하고 결과를 합치는 전략이다. - 메모리를 잡아먹는 특징 때문에, 안정성이 많이 보장되는 정렬 알고리즘이다. - 시간복잡도는 O(NlogN), 공간복잡도는 O(N) 이다. ++ 배열을 1개로 될 때까지 각각을 n/2로 줄이니 당연히 logN 이다. ++ 합칠 때는 총 N번의 비교연산이 들어가므로 N*logN 이 되는 시간복잡도이다! - 보통 정렬의 공간복잡도는 O(1)인데, 병합정렬의 경우 복사할 배열이 새로 필요하다! 언제 써야될까? 1. 많은 데이터를 정렬할 때, 여분의 메모리가 충분할 때! 2. 반대로, 많은 데이터를 정렬하고 싶은데 ..
huisam
'분류 전체보기' 카테고리의 글 목록 (17 Page)