전체 글 31

[Java] PriorityBlockingQueue

PriorityBlockingQueue 란? Comparator 를 이용한 특정 데이터를 기준으로 우선순위를 비교하는 Queue Queue의 특성상 FIFO 방식이 아닌 우선순위 기준으로 데이터 출력 정렬 불가능한 요소의 추가를 허용하지 않음 Example. import java.util.concurrent.PriorityBlockingQueue; // PriorityBlockingQueue를 가지고 있는 클래스 public class PriorityBlockingJobQueue { final static PriorityBlockingJobQueue instance = new PriorityBlockingJobQueue(); PriorityBlockingQueue queue = new PriorityBl..

Java 2020.10.05

[Design Pattern] Observer Pattern

옵저버 패턴 (Observer Pattern) 객체 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 갱신될 수 있게 하는 패턴 자바에서 Observable Class , Observer 인터페이스 제공 통보를 하는 클래스가 Observable 이고, 통보를 받는 클래스가 Observer 이다. Observable는 여러개의 Observer를 가질수 있다. Push 방식 (통보), Pull(원하는 시점에 update) 두가지 방식 구현 가능하다. # Observable를 상속받는 클래스 생성 package ObserverPattern; import java.util.Observable; public class C..

Java/Design Pattern 2020.10.02

[이팩티브 자바3] 제 2장. 객체 생성과 파괴

1. 생성자 대신 정적 팩터리 메서드를 고려하라. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 반면 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사 할 수 있다. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 생성 비용이 큰 객체가 자주 요청되는 상황에서 성능을 상당히 끌어올려 준다. 반복되는 요청에 같은 객체를 반환하는 식으로 정적 팩터리 방식의 클래스는 통제가 가능하다.(인스턴스 통제 클래스) 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. API를 만들 때 구현 클래스를 공개하지 않고도 그 객체를 반환 가능하다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 정적 팩터리 메서드에 흔히 사용하는 ..

[Java] Generics(제네릭)

JAVA 제네릭(Generics) JDK 1.5 버전에 처음 도입되었으며, 클래스 내부에서 사용한 데이터 타입을 외부에서 지정하는 기법을 의미한다. 타양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 한다. 제네릭은 크게 2가지의 장점을 가지고 있다. 타입의 안전성 : 의도하지 않은 타입의 객체가 저장되는 것을 막고, 다른 타입의 객체로 인한 타입 형태가 맞지 않아 발생하는 문제를 없애준다. 불필요한 형변환을 줄여 코드의 간결함 : 타입을 미리 명시함으로써 다른 타입의 객체가 저장되지 않아 객체를 꺼내 사용할 시 형변환을 통한 타입을 맞출 필요가 없어 코드를 간결하게 줄일 수 있다. 1. 제네릭 타입 - 대표적으로 많이 사용되는 클래스는 ArrayList가 있다. - 타입을 파..

Java 2020.09.29

[Java] Heap Memory Dump Analysis

Java Heap Memory Dump Analysis 분석 Eclipse 툴을 이용한 Memory Analizer Tool(MAT) 분석 방식 Memory dump를 분석하는데 있어서 가장 우선적인 접근은 메모리를 점유하고 있는 상태를 파악하는 것이다. MAT 툴을 이용하여 Dump 파일을 열면 기본적으로 아래와 같은 Overview 페이지가 생성된다. Overview의 영역은 크게 1. Details, 2. Biggest Objectes by Retained Size, 3. Actions, 4. Reports, 5. Step By Step 의 영역으로 나뉠 수 있다. Details : heap 영역에 대한 개략적인 정보 제공 Biggest Objectes by Retained Size : heap 영..

Java 2020.09.26

[Design Pattern] Command Pattern

커맨드 패턴( Command Pattern ) 객체의 행위(메서드)를 클래스로 만들어 캡슐화 하는 패턴. 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다. package CommandPattern; // 입력된 Command를 실행시키는 클래스 public class Button { private Command theCommand; public Button( Command theCommand ) { setCommand( theCommand ); } public void setCommand( Command new..

Java/Design Pattern 2020.09.26

[알고리즘] 다이나믹 프로그래밍

다이나믹 프로그래밍 (Dynamic Programming) 큰 문제를 작은 문제로 나눠서 푸는 알고리즘 기법 1. Overlapping Subproblem - 큰 문제와 작은 문제를 같은 방법으로 풀 수 있다. - 문제를 작은 문제로 쪼갤 수 있다. 2. Optimal Substructure - 문제의 정답을 작은 문제의 정답에서 구할 수 있다. - 문제의 정답을 작은 문제의 정답을 합하는 것으로 구할 수 있다. • 다이나믹 프로그래밍에서 각 문제는 한 번만 풀어야 한다. • Optimal Substructure를 만족하기 때문에, 같은 문제는 구할 때 마다 정답이 같다. • 따라서, 정답을 한 번 구했으면, 정답을 어딘가에 메모해놓는다. • 이런 메모하는 것을 코드의 구현에서는 배열에 저장하는 것으로 ..

알고리즘 2020.09.24

[알고리즘] 후위표기식

후위표기식이란? 일반적으로 사용하는 사칙연산은 피연산자(숫자) 사이에 연산자(+-*/) 가 들어가는 형태로 중위표기식 이라고 한다. 그러나 후위표기식은 피연산자가 먼저 쓰이고, 그 뒤로 피연산자가 나오는 형태를 말한다. 예를들어, 4 7 2 + * 일 경우 읽는 법은 1. 왼쪽부터 순차적으로 읽으면서 연산자를 찾는다. 2. +연산자를 찾았다. +연산자를 기준으로 앞쪽 두개의 피연산자 7, 2 를 더한다. 3. 연산을 진행하고 나면 연산된 값을 적어둔다. 4 9 * 4. 다시 순차적으로 연산자를 찾는다. 5. *연산자를 찾았다. 앞쪽 두개의 피연산자를 이용하여 연산을 진행한다. 6. 연산결과는 36 1. 후위표기식2 문제 (1935번) import java.io.BufferedReader; import j..

카테고리 없음 2020.09.21

[알고리즘] 2. 큐 와 덱

Queue 란? • 한쪽 끝에서만 자료를 넣고 다른 한쪽 끝에서만 뺄 수 있는 자료구조 • 먼저 넣은 것이 가장 먼저 나오기 때문에 First In Frist Out (FIFO) 라고도 한다. • push : 큐에 자료를 넣는 연산 • pop : 큐에서 자료를 빼는 연산 • front : 큐의 가장 앞에 있는 자료를 보는 연산 • back : 큐의 가장 뒤에 있는 자료를 보는 연산 • empty : 큐가 비어 있는지 아닌지를 알아보는 연산 • size : 큐에 저장되어 있는 자료의 개수를 알아보는 연산 1. 요세푸스 문제 (1158번) import java.util.Queue; import java.util.Scanner; import java.util.StringTokenizer; import java..

알고리즘 2020.09.19

[Java] StringTokenizer

StringTokenizer 클래스는 구분자를 기준으로 문자열을 분리하고 싶을 때 사용하는 클래스 이다. String str = "1 2 3 4 5"; StringTokenizer tokenizer = new StringTokenizer(s); // 공백을 기준으로 str 문자열을 나누기 위한 객체 생성자 공백을 기준으로 문자열을 나누고 싶다면 생성자에 문자열만 넣어주면 된다. String str = "1,2,3,4,5"; StringTokenizer tokenizer = new StringTokenizer(s,","); // 특정 문자열을 기준으로 나누고 싶다면 문자열과 구분자를 생서자의 인자로 넣어주면 된다. 아래 예제 소스

Java 2020.09.13