본문 바로가기

분류 전체보기

(35)
Locality의 관점에서 Quick sort가 Merge sort보다 빠른이유 Quick sort와 Merge sort는 nlogn의 시간복잡도를 가지는 대표적인 정렬 방법이다. 일반적으로 Quick sort가 Merge sort보다 빠르다. 그 이유는 Locality와 관련이 있다. Locality의 개념을 알아보고 왜 Quick sort가 더 빠른지 알아보도록 하자. Locality 지역성(Locality)은 CPU가 짧은 시간 범위 내에 일정 구간의 메모리 영역을 반복적으로 엑세스하는 경향을 말한다. 메모리 내의 정보를 균일하게 엑세스 하는게 아닌, 짧은 시간내에 특정 부분을 집중적으로 참조하는 특성이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void f() { //간단한 작업을 수행 } void g() { int arr[..
[JAVA 디자인패턴] Observer pattern(옵저버 패턴) 데이터의 변경이 발생하였고 변경을 실시간으로 통보해야할 때, OCP를 만족시키면서 데이터의 변경을 통보하는 framework이다. Observer 패턴을 이해하기 위해, 학생의 점수를 입력하고 최대/최소값을 보여주는 클래스를 작성해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class ScoreRecord { private List scores = new ArrayList(); private MinMaxView minMaxView; public void setMinMaxView(MinMaxView minMaxView) { this.minMaxView = minMaxView; } public List getScores() { retur..
[JAVA 디자인패턴] Command pattern(커맨드 패턴) 커맨드 패턴을 이해하기 위해, 만능 버튼을 만들어보자. 만능 버튼은 눌리면 어떠한 기능도 수행할 수 있다. 1 2 3 4 5 public class Lamp{ public void turnOn(){ System.out.println("Lamp on"); } } http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5; text-decoration:none">Colored by Color Scripter 1 2 3 4 5 6 7 8 9 10 public class Button{ private Lamp lamp; public void setLamp(Lamp lamp){ this.lamp = lamp; } public void pressed(..
[JAVA 디자인패턴] SOLID 원칙 - 객체지향프로그래밍(OOP) 설계 각 원칙을 설명하기 위해 문제 상황을 제시하고 어떻게 해결해야하는 지에 대해서 중점적으로 이야기해보도록 합시다. SOLID에 대한 기원등은 위키백과를 참고하시기 바랍니다. SRP(단일 책임 원칙, Single Responsibility Principle) 객체가 단 하나의 책임만을 가지도록 설계해야 한다. 책임이라는 것은, 이 객체가 해야할 일을 의미한다. 즉 어느 객체보다도 가장 잘 할 수 있는 일이 1개여야만 한다. 일이 1개여야하는 것은 메소드가 1개라는 의미가 아니다. 논리적으로 하는 일을 의미한다. 우리가 설계 원칙을 배우는 이유는, 예상치 못한 변경사항이 발생하더라도, 다른 객체들이 크게 변화하지 않고 확장하기 위함이다. 그래서 SRP의 단일 책임 원칙이 중요하다. 이 객체가 SRP의 원칙에 ..
DFS/BFS 다시풀기(JAVA) 연결요소의 개수 촌수계산 나이트의 이동 유기농배추 토마토 상범빌딩 적록색약 안전영역 스타트링크 숨바꼭질 1. 연결요소의 개수 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 import java.util.ArrayList; import java.util.Scanner; public class Main { private static ArrayList[] edge; private static boolean[] visited; static void dfs(int x){ visited[x] = true; for(int i..
[JAVA 디자인패턴] Strategy pattern(스트레티지 패턴, 전략패턴) Strategy pattern(스트레티지 패턴) 같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화되어있다. 특정 알고리즘(전략)을 바꾸려면 해당 클래스를 교체해서, 다른 방식으로 해결할 수 있게 해주는 디자인 패턴이다. 스트레티지 패턴을 이해하기 위해, 로봇들을 만들어보자. Robot 추상 클래스를 작성해서 이를 상속받은 클래스들이 어떠한 역할을 할지 기술하였다. attack과 move 추상메소드는 자식클래스에서 재정의하도록 하였다. 왜냐하면 어떤 로봇인지에 따라 움직이는 방식, 공격하는 방식이 다르기 때문이다. Atom이 펀치를 날린다면, TaekwonV는 미사일을 발사한다. 이와같은 설계방식은 적절해보인다. 다른 로봇을 만들때, 해당 클래스를 상속받아서 재구현하면 된다. OCP를 만족한다. 즉,..
[JAVA 디자인패턴] Singleton pattern(싱글턴 패턴) Singleton pattern(싱글턴 패턴) 인스턴스가 오직 한 개만 생성되는 것을 보장하고, 어떤 위치에서든 접근할 수 있도록 하는 디자인 패턴이다. 싱글턴은 수학용어로서, 단 하나의 원소를 가진 집합에서 유래하였다. 싱글턴 패턴을 이해하기 위해, 프린터 관리자를 만들어 보자. 프린터는 오직 한 개만 존재하는 상황이다. 그렇다면, 생성자도 오직 한 번만 실행되어야한다. 그래서 생성자는 public이 아닌, private으로 한다. 그 후, 다른 메소드가 생성자를 1번만 실행하게 하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Printer{ private Printer printer = null; private Printer(){ } pu..
Static type language vs Dynamic type language 동적타입언어와 정적타입언어의 차이를 알기 위해, 변수의 타입에 대해서 먼저 알아봅시다. 변수의 타입 변수에 들어갈 데이터의 타입에 따라 나눈 것입니다. (변수가 저장되는 데이터의 종류) C language (정적타입 언어) int, float, char등등 다양한 변수 타입이 존재합니다. 이러한 타입은 컴파일 하면서 결정됩니다. 컴파일 하는 과정에서, #include 헤더파일의 내용을 삽입힙니다. 그러면서 int i = 5를 발견하면 그에 맞는 stack공간에 변수를 할당하여 5를 넣습니다. 모든 코드를 컴파일하면, 링킹을 하여 exe파일을 생성합니다. exe파일을 load하고 프로세스가 실행됩니다. int i = 5는 exe파일이 실행되기 전에 변수의 타입이 정해집니다. 데이터 타입에 1대1 대응하는 ..