Computer Sciences(236)
-
Prototype Pattern
개요 패턴에 앞서 프로토타입이 무슨 뜻인지 생각해보고 가자. 일반적으로 프로토타입이라고 하면 실제 제품을 만들기 전의 샘플 정도라고 알고 있을 것이다. 패턴도 이와 비슷한 맥락이다. 프로토타입 패턴은 생성 비용이 비싼(네트워크를 타거나, 생성 로직이 복잡하다던가) 객체나 비슷한 객체를 생성해야 할 때 사용되는 생성 패턴이다. 예를 들어 DB에서 데이터 구조가 거의 변하지 않는 데이터를 가져온다고 해보자. 필요한 데이터마다 객체를 네트워크를 거쳐서 가져오게 되면 비용이 만만치 않다. 대신 가져온 데이터를 복사해서 일부만 수정하는 방식이 있다. 이는 메모리 상에서 이루어지므로 네트워크 비용보다 훨씬 싸다. 또한 데이터 구조도 거의 비슷하기 때문에 복사하여 수정하는 것이 어렵지 않다. 예제 비슷한 구조에 대해..
2021.12.11 -
[Programmers] 로또의 최고 순위와 최저 순위 - Java
https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 풀이 문제 풀이의 핵심은 최고 순위는 매칭된 숫자 개수 + 0의 개수이고 최저 순위는 매칭된 숫자 개수라는 것이다. 2중 for 문으로 각 요소를 비교한 뒤에 0의 개수를 세는 식으로 다음과 같이 어렵지 않게 풀어낼 수 있다. 아래는 필자가 처음으로 해결했을 때 작성한 코드이다. 먼저 각 배열을 정렬한 후에 0의 개..
2021.12.10 -
[Baekjoon] 1292번: 쉽게 푸는 문제 - Java
https://www.acmicpc.net/problem/1292 1292번: 쉽게 푸는 문제 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. www.acmicpc.net 문제 설명 문제 그대로 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ... 로 이루어진 수열에서 입력받은 숫자 사이의 구간의 합을 구하면 된다. 최대 인덱스가 1000이므로 ArrayList로 숫자를 미리 저장해둔 뒤 해당 구간에 해당하는 숫자들을 읽어서 더하는 식으로 간단하게 풀었다(문제 이름 그대로). 문제 풀이 import java.io.*; import java.util.*; public class Ma..
2021.12.10 -
14. Chain of Responsibility Pattern
문제 클라이언트가 숫자를 필터링하는 프로그램을 개발해달라고 요청했다. 그런데 단순히 하나의 조건만 있는 것이 아니라 여러 필터를 순서대로 처리하고 싶다고 한다. 즉 체인의 형태로 구성하는 필터를 원하는 것이다. 아주 간단하게 프로그래밍한다면 if 문으로 다 처리할 수 있겠지만 프로그램의 규모가 커지고 복잡해질수록 유지보수하기 힘들어진다. 그렇다면 이를 어떻게 해결해야 할까? 해결 방안 이러한 문제는 역할 사슬 패턴으로 효과적으로 처리할 수 있다. 체인 역할을 하는 클래스를 이해하기 쉽도록 필터라고 부르겠다. 필터 클래스는 연결 리스트를 구현할 때처럼 next라는 멤버 변수를 갖고 있다. 이를 통해서 체인을 구현할 수 있는 것이다. 정수기에서 물을 정수하기 위해 여러 가지 필터를 사용한다고 생각하면 이해하..
2021.11.14 -
13. Bridge Pattern
문제 TV를 작동시키는 리모컨은 여러 제조사가 있다. 그래서 TV를 모든 리모컨으로 동작시키기 위해서는 리모컨을 인터페이스화 하고 TV를 컴포지션하여 사용할 수 있었다. 그런데 이젠 TV 제조사가 많아졌다. 기존에는 삼성이 모든 TV를 만들었지만 이젠 LG도 TV를 생산한다고 한다. 이를 어떻게 풀어야 할까? 해결 방안 이 문제를 해결하는 방법은 간단하다. 리모컨에서 한 것처럼 TV도 인터페이스화하고 리모컨에서는 TV 인터페이스를 컴포지션하면 된다. 클래스 다이어그램으로 나타내면 다음과 같다. 그리고 RemoteControl과 TV의 관계를 브릿지 관계라고 한다. Java 코드로 구현하면 다음과 같다. public class Client { public static void main(String[] ar..
2021.11.14 -
[정보보안] 9. 공개 키 암호
키 배송 문제 지금까지 블록 암호인 DES와 AES를 알아보았다. 이들은 대칭 암호이며 암호화, 복호화 시 같은 키를 사용한다. 그래서 이 키를 비밀 키, 대칭 키, 관용 키 등으로 부른다. 그런데 두 사람이 데이터를 주고 받아야 할 때 이 키를 공유하는 방법은 어떤 것을 사용해야 할까? 바로 옆에 있다면 그냥 말로 할 수도 있고 또는 USB에 담아서 줄 수도 있다. 하지만 멀리 떨어져 있는 상황이라면? 이 문제를 어떻게 해결해야 하는가? 1. 키의 사전 공유 키를 사전에 공유하는 방법이다. 직접 전해주기가 이 방법이다. 2. 키 배포 센터 키를 전문 센터의 데이터베이스에서 관리하며 통신 시에 세션 키를 사용하는 방법이다. 3. Diffie-Hellman 키 교환 송신과 수신 사이에 먼저 특정한 정보를 ..
2021.10.25