본문 바로가기

728x90

분류 전체보기

(42)
[Design Pattern] 데코레이터 (Decorator) 패턴 1. 개요데코레이터 디자인 패턴 (Decorator Design Pattern)은 객체에 동적으로 새로운 기능을 추가하기 위한 패턴이다.이 패턴은 상속이 아닌 객체 래핑(Object Wrapping)하여 새로운 기능을 추가한다.2. 상황3. 다이어그램3.1. 설명Component기본 기능을 정의하는 인터페이스 이다.Decorator와 ConcreteDecorator에 의해 구현된다.ConcreteComponentComponent의 구현 클래스 이다.Decorator추상 클래스 이다.Component의 구현 클래스 이면서 Component 인스턴스를 갖고 있다.Component의 메소드를 호출 후 추가적인 동작을 수행한다.ConcreteDecoratorDecorator의 구현 클래스로, 추가적인 기능을 구..
[Project] Tico & Tico Simulator 1. 개요이 포스팅에서는 나의 학교 Open-Source Software Lab (OSSL) 수업의 당시 괴물 같았던 과제들 중 하나인 TICO에 대한 회고 및 정리를 하고자 한다. 그 당시의 나는 과제에 대한 설명을 들었을 때 상당히 흥미롭다는 느낌과 더불어 과연 내가 이것을 해낼 수 있을지 걱정이 앞섰다. 더불어 이 수업은 이와 같은 과제가 계속해서 제시되었기 때문에 다른 수업들도 듣는 나를 비롯한 모든 학생들 입장에서는 큰 부담으로 다가왔었다. 하지만 교수님의 과제는 항상 나에게 있어 가히 흥미로웠기에 완벽을 기하기 위해 노력했던 것으로 기억한다. 상당히 공들였던 과제이니만큼 나의 여럿 프로젝트의 일환으로서 해당 과제의 설명과 해결과정을 상세히 기록한다.2. 과제 설명과제 원문TICO is a si..
[Project] 3D Renderer 1. 개요나를 포함한 대부분의 사람들은 우리가 사는 3차원 세상을 2차원 평면인 화면에 표시하는 형태의 컴퓨터 프로그램을 많이 접한다. 특히 마인크래프트, GTA, 오버워치 등의 3D 게임이 전부 그러하다. 이러한 프로그램들을 보면서 이것들은 어떻게 구현한 것일까에 대한 궁금증을 가지게 되었고 그에 대한 원리를 공부하고 간단한 예제 프로그램을 제작했었는데, 시간이 많이 지나 해당 개념이 가물가물할 현시점에 복습도 할겸 프로그램은 더 발전된 형태로 업그레이드 시키면서, 기록으로도 남겨놓는 것이 좋을 것이라 판단하여 해당 포스팅을 작성한다.2. 기본 아이디어우리의 눈은 $3$ 차원 도형을 관찰할 때, 나와 반대편에 위치한 면에 대한 정보는 알 수 없다. $n$ 차원 세계의 관찰자는 매 관찰하는 순간마다 $n..
[Baekjoon] 10101번 삼각형 외우기 B4 <Short> 10101번 - 삼각형 외우기1. 문제창영이는 삼각형의 종류를 잘 구분하지 못한다. 따라서 프로그램을 이용해 이를 외우려고 한다.삼각형의 세 각을 입력받은 다음, 세 각의 크기가 모두 60이면, Equilateral세 각의 합이 180이고, 두 각이 같은 경우에는 Isosceles세 각의 합이 180이고, 같은 각이 없는 경우에는 Scalene세 각의 합이 180이 아닌 경우에는 Error를 출력하는 프로그램을 작성하시오.Input총 3개의 줄에 걸쳐 삼각형의 각의 크기가 주어진다. 모든 정수는 0보다 크고, 180보다 작다.Output문제의 설명에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력한다.2. 사용 알고리즘수학 (Math)3. 풀이해당 풀이는 가능한..
[Baekjoon] 1068번 트리 G5 1068번 - 트리 1. 문제 트리에서 리프 노드란, 자식의 개수가 0인 노드를 말한다. 트리가 주어졌을 때, 노드 하나를 지울 것이다. 그 때, 남은 트리에서 리프 노드의 개수를 구하는 프로그램을 작성하시오. 노드를 지우면 그 노드와 노드의 모든 자손이 트리에서 제거된다. 예를 들어, 다음과 같은 트리가 있다고 하자. 현재 리프 노드의 개수는 3개이다. (초록색 색칠된 노드) 이때, 1번을 지우면, 다음과 같이 변한다. 검정색으로 색칠된 노드가 트리에서 제거된 노드이다. 이제 리프 노드의 개수는 1개이다. Input 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트)..
[Dart] factory 예약어에 대한 고찰 1. 개요Dart 에서는 factory 의 예약어가 존재한다. 이것이 어떻게 쓰이는지에 대해 살펴보자.2. 설명factory 예약어는 생성자를 정의할 때 사용되고, 객체를 생성하는 과정을 제어할 수 있도록 있도록 하는 특별한 예약어이다.3. 혼동될 여지가 있는 문법들Dart 에서 MyClass.name() 와 같이 표현될 수 있는 형태는 여러 가지가 존재한다. 따라서 실제 그 구현부를 확인하지 않고 해당 클래스를 사용하는 경우, 혼란을 야기할 수 있다. 다음의 세 가지 경우가 전술한 형태로 표현된다.정적 메소드 (Static Method)명명된 생성자 (Named Constructor)팩토리 생성자 (factory constructor)3.1. 정적 메소드 (Static Method)정적 메소드는 특정 ..
[Design Pattern] 싱글톤 (Singleton) 패턴 1. 개요싱글톤 디자인 패턴 (Singleton Design Pattern)은 특정 클래스의 객체가 단 한 번만 생성되고, 그 객체에 대한 전역적인 접근 지점을 제공하는 디자인 패턴이다.2. 상황한 클래스의 인스턴스가 오직 하나만 필요한 경우그 인스턴스에 대한 전역적인 접근이 필요한 경우공유된 자원에 대한 중앙 집중적인 제어가 필요한 경우3. 다이어그램3.1. 설명Singleton 클래스의 생성자는 private 으로 외부에서 사용될 수 없다.private 의 정적 변수 instance 가 존재한다.public 의 정적 메소드 getInstance() 를 통해 instance 에 null 이 아닌 값이 존재하면 그것을 반환하고, 그렇지 않으면 객체를 새로 생성하여 instance 변수를 초기화한 후 그 ..
[Baekjoon] 1193번 분수찾기 S5 <Short> 1193번 - 분수찾기 1. 문제 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. Input 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. Output 첫째 줄에 분수를 출력한다. 2. 사용 알고리즘 수학 (Math) 3. 풀이 해당 풀이는 가능한 한 코드의 길이를 줄이고자..

728x90