전체 글 143

3장 팩토리 메서드 패턴

팩토리 메서드는 제품의 모르는 서브클래스를 생산하는 메서드입니다. 클래스 구조 일반적인 클래스 구조는 아래와 같습니다. 여기 등장하는 참여자들을 알아봅시다. Product : 제품 추상 클래스 입니다. 팩토리 메서드가 생성하는 객체의 인터페이스 입니다. ConcreteProduct : Product 인터페이스를 실제로 구현합니다. 다양한 제품의 종류에 따라 정의함. Creator : 팩토리 메서드를 선언하는 클래스 입니다. 기본적인 팩토리 메서드를 구현하는 경우도 있고, 그냥 추상 메서드로 남기고 서브클래스에게 구현을 맡기는 경우도 있습니다. 팩토리 메서드를 호출합니다. ConcreteCreator : 다양한 제품의 종류에 따라 각 제품을 생산하도록 팩토리 메서드를 재정의한 클래스 입니다. 구현 방식 기..

3장 빌더 패턴

이번 글에서도 저번 글에 이어서 생성 패턴에 대해 알아봅니다. https://ddukddaksudal.tistory.com/127 3장. 생성 패턴 & 추상 팩토리 패턴 5가지 생성 패턴에 대해 공부해봅니다. 생성 패턴은 이름처럼 인스턴스를 생성하고 복합하는 방법에 대한 패턴들입니다. 여기서는 미로 만들기를 주제로, 각 생성 패턴들을 사용했을 때, 어떤 ddukddaksudal.tistory.com 저번 글에서 처럼 미로를 제작하는 시스템을 설계해 볼 것입니다. 이번에 사용할 패턴은 빌더 패턴입니다. 우선 빌더 패턴에 대해 간략히 설명한다. 빌더 패턴은 제품의 내부 표현과 생성을 분리시키고, 내부 표현을 다양화할 수 있는 패턴이다. 일반화된 클래스 구조를 보자. 참여자는 다음과 같다. Client : 제..

3장. 생성 패턴 & 추상 팩토리 패턴

5가지 생성 패턴에 대해 공부해봅니다. 생성 패턴은 이름처럼 인스턴스를 생성하고 복합하는 방법에 대한 패턴들입니다. 여기서는 미로 만들기를 주제로, 각 생성 패턴들을 사용했을 때, 어떤 다른 구조의 미로가 생성되는지 비교하며 학습해봅니다. 미로에는 방, 벽, 문의 3 가지 요소가 있습니다. 방은 4개의 방향으로 다른 요소와 이어져 있고, 방에서 방으로 Enter()할 수 있습니다. 방에 이어진 문으로 Enter()하면 문에 이어진 또다른 방으로 이동하게 됩니다. 추상 팩토리 패턴 추상 팩토리 패턴은 객체의 생성과 팩토리를 이용하는 시스템을 분리시키는 패턴입니다. 시스템은 추상화된 객체 생성 인터페이스만을 사용하고, 내부적으로 어떤 종류의 객체가 생성되는지는 추상 팩토리 패턴에게 맡깁니다. 기본적인 클래스..

2장 사례 연구: 문서 편집기 설계

이 장에서는 Lexi라는 문서 편집 프로그램의 설계 문제를 디자인 패턴을 사용하여 해결하는 방법을 설명한다. 여기서 보여준 설계 문제는 다음 7가지 이다. 문서 구조 서식 설정 사용자 인터페이스 꾸미기 여러 룩앤필 표준 지원 여러 윈도우 시스템 지원 사용자 조작 철자 검사와 붙임표 처리 이제 각 문제들에 대한 설명과 어떻게 해결했는 지에 대해 알아보자. 1. 문서 구조 문서 편집 프로그램은 편집할 문서에 대한 정보를 구조화할 필요가 있습니다. 쪽, 행, 글자 ,표 등 모든 그려지는 요소들을 글리프(Glyph) 라는 클래스의 서브클래스로 만듭니다. 그리고 재귀적 합성을 통해 글리프 안에 글리프가 들어가는 구조로 만듭니다. 이는 복합체 패턴에 해당합니다. 2. 서식 설정 여기서 말하는 서식이란 대표적으로 문..

Chat

프로젝트 소개 Github: https://github.com/jidungg/Chat 개발 기간: 2022.1 ~ 2022.6 개발 인원 : 1명 개발 도구 및 환경 : Visual Studio 2022, C++, Python, Windows10 설명: 게임 서버 코어 라이브러리 사용된 기술: Google protobuf CI(github action) AWS EC2(현재 서버 가동중) 주요 기능 다중 접속자 채팅 채팅 방 생성, 접속 서버 채팅 모니터링 실행 화면 이 프로젝트는 ServerCore 라이브러리(https://github.com/jidungg/GameServer)를 사용해 만들었습니다.

프로젝트/Chat 2023.02.14

[프로그래머스 Lv3] 기지국 설치

문제 설명 N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5g 기지국은 4g 기지국보다 전달 범위가 좁아, 4g 기지국을 5g 기지국으로 바꾸면 어떤 아파트에는 전파가 도달하지 않습니다. 예를 들어 11개의 아파트가 쭉 늘어서 있고, [4, 11] 번째 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 만약 이 4g 기지국이 전파 도달 거리가 1인 5g 기지국으로 바뀔 경우 모든 아파트에 전파를 전달할 수 없습니다. (전파의 도달 거리가 W일 땐, 기지국이 설치된 아파트를 기준으로 전파를 양쪽으로 W만큼 전달할 수 있습니다.) 초기에, 1, 2, 6, 7..

[프로그래머스 Lv3] 숫자 게임

문제 설명 xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다. 먼저 모든 사원이 무작위로 자연수를 하나씩 부여받습니다. 각 사원은 딱 한 번씩 경기를 합니다. 각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다. 만약 숫자가 같다면 누구도 승점을 얻지 않습니다. 전체 사원들은 우선 무작위로 자연수를 하나씩 부여받았습니다. 그다음 A팀은 빠르게 출전순서를 정했고 자신들의 출전 순서를 B팀에게 공개해버렸습니다. B팀은 그것을 보고 자신들의 최종 승점을 가장 높이는 방법으로 ..

github action으로 CI구현

우선 이 action이 하는 일은 ChatClient와 ChatServer 프로젝트를 빌드 성공하는 것이다. 그러기 위해서 다음 단계들을 실행했다. 깃허브 레포지토리 복사하기. ServerCore.lib 을 라이브러리 디렉토리에 놓기. libprotobuf.lib 을 라이브러리 디렉토리에 놓기. Chat.sln 빌드하기. 그럼 각 단계들을 어떻게 구현했는지 알아보자. 0. 사전작업. 우선 ci.yml 파일을 만들고 몇 가지 사전작업을 했다. main 브랜치에 push 하거나 pull request를 보내면 ci.yml을 실행하도록 했다. (사실 yml파일 만드니까 기본 세팅이었다.) 아래에서 사용할 환경변수들을 설정해주었다. 빌드 모드나 다운받을 Protobuf의 버전을 명시해 놓았다. on: push:..

프로젝트/Chat 2023.02.08

1장 서론.

디자인 패턴이란 반복적으로 일어나는 문제들에 대한 해법이다. 일반적으로 하나의 패턴에는 다음 4가지 요소가 들어있다. 패턴 이름 : 패턴의 이름. 문제 : 언제 패턴을 사용하는가. 해법 : 설계를 구성하는 요소들과 요소들 간의 책임, 협력관계 서술. 결과 : 패턴을 적용해 얻는 결과와 장단점. 이 책에서는 주로 C++을 사용하고 간간이 스몰토크로 만든 예제가 제시된다. 디자인 패턴 기술하기 디자인 패턴을 설명하는 템플릿들입니다. 패턴 이름과 분류 의도 : 뭘 하는 패턴인지? 다른 이름 : 별명 동기 : 설계 문제 제시. 어떻게 문제를 해결하는지 시나리오. 활용성 : 어떤 상황에 적용할 수 있는지. 구조 : 객체 모델링 기법, 상호작용 다이어그램을 사용해 클래스들을 시각적으로 표기. 참여자 : 패턴을 구성..