전체 글 169

UML

상속 상속받는 관계. 빈 삼각형 화살표. 예를 들면 Car의 특성을 물려받는 Truck. 의존 일시적인 참조를 나타내는 관계. 어떤 메서드 내에서 임시로 생성, 리턴, 매개변수 등의 형태로 사용되는 관계. 점선 화살표. 예를 들면 Car의 Refuel 메서드에서 임시로 사용하는 GasStation과의 관계. 연관 지속적인 참조를 나타내는 관계. 어떤 클래스의 참조 필드를 가지는 관계. 실선 화살표. 예를 들면 Car 클래스에서 참조 필드로 가지고 있는 Person과의 관계. 집합 연관의 하위 항목. 참조 필드의 묶음. 어떤 클래스의 참조형 묶음 필드를 가진 관계. 빈 다이아몬드 실선 화살표. 예를 들면 자동차 정비소에 맡겨놓아진 자동차들의 목록을 갖는 RepairShop과 Car의 관계. 합성 집합보다 ..

도서/CleanCode 2023.03.30

Casting (Static, Dynamic, Reinterpret )

C++의 캐스터는 static_cast, dynamic_cast, reinterpret_cast 세 가지 종류가 있다. 각 캐스터는 약간씩 다른 방식으로 동작하고, 제약사항도 다르다. 따라서 상황마다 적절한 캐스터를 사용해 주어야 한다. 그럼 각 캐스터의 특징, 사용하면 좋은 상황 등을 알아보자. 미리 3줄요약: static_cast : 기초 유도, 기본 자료형 캐스팅 dynamic_cast: 기본적으로 유도 - > 기초 캐스팅. virtual함수 있으면 유도 기초 캐스팅. 런타임에 안정성 검사. reinterpret_cast : 포인터, 포인터 관련 형 변환 모두 허용. static_cast static_cast는 기본 자료형의 캐스팅, 그리고 기초 클래스와 유도 클래스의 포인터 ..

C++ 2023.03.28

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팀은 그것을 보고 자신들의 최종 승점을 가장 높이는 방법으로 ..