분류 전체보기 (36) 썸네일형 리스트형 Process와 Thread의 차이 프로세스와 스레드의 차이에 대해서 알아보자. 두개의 차이는 운영체제 수업에서도 아주 중요하게 다루는 주제이다. 또한, 개발자 면접에서도 자주 나오는 주제이다. 해당 주제에 대해서 잘 공부해두면 좋을 것 같다. 1. Thread의 출현 배경 스레드의 출현 배경을 알면, Process의 차이를 더욱 명확하게 알 수 있다. 프로세스의 문제점 1. 프로세스 간 컨텍스트 스위치 오버헤드 CPU가 프로세스A를 실행하다가 B를 실행한다고 하자. 프로세스 A의 컨텍스트를 PCB에 저장하고 B의 컨텍스트를 레지스터에 저장해주어야 한다. 또한, 캐시와 MMU의 TLB도 flush해주어야 한다. 그리고 L1,L2캐시에는 프로세스B의 데이터로 채워준다. 상당히 Time consuming한 작업이다. 2. 프로세스 사이 통신의.. Locality의 관점에서 Quick sort가 Merge sort보다 빠른이유 Quick sort와 Merge sort는 nlogn의 시간복잡도를 가지는 대표적인 정렬 방법이다.일반적으로 Quick sort가 Merge sort보다 빠르다. 그 이유는 Locality와 관련이 있다. Locality의 개념을 알아보고 왜 Quick sort가 더 빠른지 알아보도록 하자. Locality지역성(Locality)은 CPU가 짧은 시간 범위 내에 일정 구간의 메모리 영역을 반복적으로 엑세스하는 경향을 말한다. 메모리 내의 정보를 균일하게 엑세스 하는게 아닌, 짧은 시간내에 특정 부분을 집중적으로 참조하는 특성이다.1234567891011121314151617181920void f(){ //간단한 작업을 수행} void g(){ int arr[1000]; for(int i=.. [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.. 이전 1 2 3 4 5 다음