분류 전체보기
-
[백준] 7662 이중 우선순위 큐 #JAVA #이진 탐색 트리Algorithm Solving/BAEKJOON 2021. 12. 24. 18:15
[백준] 7662 이중 우선순위 큐 #JAVA #이진 탐색 트리 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Map.Entry; import java.util.StringTokenizer; import java.util.TreeMap; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new S..
-
[GoF]스테이트 패턴(State Pattern)Gof Design Pattern 2021. 12. 20. 21:12
스테이트 패턴(State Pattern) 스테이트 패턴이란? 클래스가 하나의 상태(state)에 따라 내부의 메서드의 기능이 바뀌는 경우(같은 기능에서 분기(if-else)발생)한다고 하면 이를 각각의 클래스로 분리하는 패턴이다. 스테이트 패턴 왜 사용할까? 객체의 기능이 어떤 상태에 있느냐에 따라 달라질 수 있는데(ex 자동차의 에코모드, 스포츠모드) 이러한 상태가 여러가지이면 if-else와 같은 분기로 표현이 되어 수정,삭제, 추가시 단점이 발생 할 수 있다. 이 때, 기능이 상태(특정 변수같은)에 의존적이라면 스테이트 패턴을 사용하여 클래스로 표현하는 것이 적절하다. 스테이트 패턴을 사용하게 되면 상태에 따라 기능을 분리하여 구현 새로운 상태 추가나 삭제가 용이함 클래스 다이어그램 객체 협력 Co..
-
[GoF] 어댑터패턴(Adapter Pattern)Gof Design Pattern 2021. 12. 19. 21:21
어댑터 패턴(Adapter Pattern) 어댑터 패턴이란? 서로 다른 인터페이스를 중간에서 연결해주기 위해 사용하는 패턴입니다. 이미 사용중이거나 정의된 인터페이스들을 중간에서 맞춰서 적용해 줄 수 있습니다. 어댑터 패턴 왜 사용할까? 클라이언트에서 사용하던 방식대로 호출하여 사용할 수 있도록 조정이 가능합니다. 서로 일치하지 않는 인터페이스를 변경하지 않고 중간에서 호출하여 사용할 수 있도록 제공합니다. 일종의 wrapper와 유사합니다. 어댑터 패턴을 사용하게 되면 Adpter 패턴을 사용하여 클라이언트가 사용하는 방식은 동일하면서 여러 기능이 제공될 수 있다. 클래스 다이어그램 1) 객체 어댑터 (상속) 2) 클래스 어댑터 (합성) 객체 협력 Target : 클라이언트가 사용할 인터페이스를 정의 ..
-
[GoF]컴포지트 패턴(Composite Pattern)Gof Design Pattern 2021. 12. 18. 19:09
컴포지트 패턴(Composite Pattern) 컴포지트 패턴이란? 그릇과 내용물을 동일시 하는 패턴으로 하나 이상의 유사한 객체를 구성으로 설계된 객체로 모두 유사한 기능을 나타낸다. 컴포지트 패턴 왜 사용할까? 부분과 전체에 대한 복합 객체의 트리구조를 나타낼 수가 있습니다. 클라이언트가 개별 객체와 복합 객체를 동일하게 다룰 수 있는 인터페이스를 제공합니다. 재귀적인 구조입니다. 컴포지트 패턴을 사용하게 되면 기본 객체는 복합 객체에 포함이 되고, 복합 객체 역시 또 다른 복합 객체에 포함될 수 있다. 클라이언트 코드는 기본객체와 복합객체에 대한 일관된 프로그래밍을 할 수 있다. 기본 객체가 증가하여도 전체 객체의 코드에 영향을 주지 않는다. 새로운 요소의 추가가 편리하고 범용성 있는 설계가 가능하..
-
[백준] 3190 뱀 #JAVA #시뮬레이션Algorithm Solving/BAEKJOON 2021. 12. 17. 13:33
[백준] 3190 뱀 #JAVA #시뮬레이션 코드 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine());//보드 크기 int K = Integer.parseInt(br.readLine());//사과 개수 int[][] board = new int[N][N]; StringTokenizer st; for (int i = 0; i < K; i++) { //..
-
[GoF]데코레이터 패턴(Decorator Pattern)Gof Design Pattern 2021. 12. 16. 22:38
데코레이터 패턴(Decorator Pattern) 데코레이터 패턴이란? 데코레이터 패턴은 장식과 실제 내용물을 동일시 하는 패턴으로 생성된 객체에 동적으로 행위를 추가하는 패턴입니다. ※자바의 I/O 스트림 클래스는 Decorator 패턴을 사용한 것입니다. Socket socket = new Socket(); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 데코레이터 패턴 왜 사용할까? 기능을 확장할 때 IS-A 관계라면 상속을 사용하게 됩니다. 그러나 HAS-A 관계라면 상속을 사용하기 모호한 상황이게 됩니다. 무언가 기능을 유연하게 추가하고자 할때 데코레이터 패턴을 사용하여 기능을 확장할 수..
-
[GoF]브릿지 패턴(Bridge Pattern)Gof Design Pattern 2021. 12. 13. 19:28
브릿지 패턴(Bridge Pattern) 브릿지 패턴이란? 기능의 계층과 구현의 계층을 분리하는 패턴입니다. 추상화와 구현을 분리하여 각각을 독립적으로 변경할 수 있게 합니다. 두 계층을 연결하는 다리(Bridge)를 통해 연결됩니다. 브릿지 패턴 왜 사용할까? 기능의 확장과 구현의 확장을 따로 계층화 하는 것이 목적입니다. 따라서 기능에 대한 여러가지 구현을 다양하게 적용할 수 있습니다. 기능과 구현이 혼재하면 상속의 관계가 복잡하게 섞이게 됩니다. 브릿지 패턴을 사용하게 되면 기능과 구현의 결합도가 약하기 떄문에 기능이 구현 방식에 얽매이지 않는다. 기능의 구현 클래스를 런타임 때 지정이 가능합니다. 구현이 변경되더라도 기능 클래스 부분에 대한 컴파일은 필요 없습니다. 기능과 구현은 독립적으로 확장되..
-
인텔리제이에 spring-boot-devtools 추가하기Spring Boot 2021. 12. 11. 01:58
인텔리제이에 spring-boot-devtools 추가하기 안녕하세요? 장장스입니다. intellij에서 spring-boot-devtools를 추가하는 방법입니다. spring-boot-devtools STEP_1 build.gradle 파일에 spring-boot-devtools 의존성을 추가합니다. runtimeOnly('org.springframework.boot:spring-boot-devtools') dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' testImplement..
-
[GoF]전략 패턴(Strategy)Gof Design Pattern 2021. 12. 10. 16:38
전략 패턴(Strategy) 전략 패턴이란? 상황에 따라 전략이나 알고리즘을 교체하여 사용하는 패턴이다. 전략 왜 사용할까? 다양한 알고리즘(혹은 기능)이 존재할 때, 하나의 클래스로 캡슐화 하여 대체가 가능하도록 할 수 있습니다. 새로운 전략을 반영하거나 기존 전략을 삭제할 때 독립적으로 수행되기에 서로 영향을 끼치지 않습니다. 예를 들어 if-else로 같은 내용이 반복적으로 사용되는 경우 전략 패턴 사용을 고려할 수 있습니다. 전략 패턴을 사용하게 되면 인터페이스에 선언된 기능을 구현한 다양한 정책을 다른 클래스에 영향을 주지 않고 추가, 삭제 할 수 있다. if-else 조건문을 구현하는 것이 아닌 전략 패턴을 사용하여 클래스를 선택하도록 구현하여 유지보수가 용이해진다. 클래스 다이어그램 객체 협..
-
[OS] 스레싱(thrashing)OS 2021. 12. 8. 10:02
스레싱(thrashing) 안녕하세요? 장장스입니다. 프로세스가 원활하게 수행되기 위해서는 일정 수준 이상의 페이지 프레임을 물리적 메모리에 할당 받아야 합니다. 프로세스가 동작하는데 필요한 최소한의 페이지 프레임을 받지 못한다면 성능에 문제가 발생할 수 있습니다. 스레싱(thrashing) 프로세스가 집중적으로 사용하는 페이지들의 집합이 메모리에 한꺼번에 적재되지 못하여 페이지 부재율(page fault)가 많이 발생하게 되고 CPU 이용율이 급격히 떨어지는 현상을 스레싱이라고 합니다. CPU 이용율이 낮다는 것은 메모리에 올라와 있는 프로세스의 수가 너무 적어 프로세스가 모두 I/O작업을 함으로써 준비 큐가 비는 경우가 발생했다는 것입니다. 따라서 CPU 이용율이 낮으면 운영체제는 메모리에 올라가는 ..