본문 바로가기

분류 전체보기83

인터페이스와 구현을 분리해도, 인터페이스를 변경해야 하는 경우가 온다면?(책 '객체지향의 사실과 오해'를 읽으며) 개요요즘 책 '객체지향의 사실과 오해'를 읽고 있다. 해당 책에서는 객체지향에 대해 사람들이 갖고 있는 맹목적인 클래스에 대한 오해를 깨부수고 있다. 객체지향에 대한 소프트웨어 설계 철학을 풀어내는 내용이 많아서, 나 같은 초보 개발자에게 도움이 되는 내용이 많은 것 같다.그런데 이 책 '객체지향의 사실과 오해'를 읽으면서 문득 궁금한 점이 생겼다.훌륭한 객체란 구현을 모른 채 인터페이스만 알면 쉽게 상호작용할 수 있는 객체를 의미한다. 이것은 객체를 섥할 때 객체 외부에 노출되는 인터페이스와 객체 내부에 숨겨지는 구현을 명확히 분리해서 고려해야 한다는 것을 의미한다....인간의 두뇌가 한 번에 생각할 수 있는 양에는 한계가 있으므로 변경이라는 강력한 적과의 전쟁에서 승리하기 위해 인간이 취할 수 있는 .. 2025. 9. 13.
Unity DOTS 기술 정리: 2. Burst Compiler 2. Burst CompilerBurst 컴파일러는 유니티의 성능을 끌어올리기 위한 컴파일러 도구이다. C# 코드와 호환되는 최적화된 네이티브 CPU 코드를 작성할 때 필요하다.Burst는 Unity에서 고성능 연산 처리를 위해 도입된 컴파일러로, Unity에서 사용 가능한 C# 코드 컴파일러이다. Burst는 LLVM을 통해 .NET IL( Intermediate Language, 중간 언어)를 대상 CPU 아키텍처에 최적화된 코드로 변환한다.Unity의 Job System을 위해 디자인되었다. 사용 방법은 단순히 클래스에 어트리뷰트로 [BurstCompiler]를 붙이면 된다. 다만 주의사항이 있다면, Burst Compiler를 사용하면 런타임 오류가 발생했을 때 상세 정보를 확인하기 어렵다는 문제.. 2025. 9. 6.
Unity DOTS 기술 정리: 1. Job System 이번에 프로젝트에서 최적화가 필요해 Unity에서 C# Job System과 Burst Compiler를 사용하게 된 일이 있었습니다. 그 내용에 대해 제가 공부한 바를 정리해 놓은 글을 작성하려 합니다. 오류가 있다면 자유롭게 지적 부탁드립니다!1. Job SystemJob이란?유니티에서 멀티스레드 프로그램을 손쉽게 작성할 수 있는 방법.일반적인 멀티스레드와 차이점이 있다면, 유니티 자체 시스템을 활용하기 때문에 별도로 스레드를 생성하지 않고 유니티에서 지원하는 워커 스레드를 가져와 사용한다.다만 워커 스레드는 중간에 중단할 수 없기 때문에, System.Thread.Sleep에 대응되는 기능이 없다는 단점이 있다.IJob, IJobParallel을 상속받는 잡을 만들어서, 이를 이용해서 유니티 내에서.. 2025. 9. 6.
Unity Photon Engine: '빌드 없이' 단일 PC에서 여러 클라이언트 테스트하기(Windows) 이번에 프로젝트를 진행하게 되면서 멀티플레이어 게임을 개발하게 되었다.이때 멀티플레이어 게임을 개발하면서 단일 PC에서 빌드 없이 여러 클라이언트를 바로 테스트해 볼 방법이 있을까?이번 글에서는 Symbolic Link를 직접 사용하거나, 간접적으로 이를 사용하는 Extension을 통해 이를 해결할 방법을 살펴보도록 하겠다(Windows를 대상으로 작성하였으나, 다른 운영체제에서도 성립할 가능성이 높음). 이론멀티플레이어 게임 개발은 여러 명의 클라이언트를 동시에 접속시킨 상태에서 게임을 테스트해야 하는 경우가 자주 발생한다.이때 단일 PC에서 여러 클라이언트를 테스트해야 하는 경우 문제가 생긴다. 보통은 빌드 파일을 만들어서 여러 클라이언트를 동시 접속시키도록 하여 테스트하는데, 매번 빌드해서 테스트.. 2025. 7. 13.
[Effective C++] EC++ 정리하기 - Chapter 2 생성자, 소멸자 및 대입 연산자 (1) 오늘 정리할 내용은 Effective C++의 Chapter 2 전반부(5~8번 항목)이다. 항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자별도로 우리가 기본 생성자, 복사 생성자, 복사 대입 생성자, 소멸자를 선언하지 않으면 public, inline 함수로 컴파일러가 자동 선언해버린다. 이점을 주의해야 한다.// 우리가 작성한 코드class Empty {};// 실제 컴파일러에서 만들어 지는 코드class Empty { public: Empty() { ... }; // 기본 생성자 Empty(const Empty& rhs) { ... }; // 복사 생성자 ~Empty{ ... }; // 소멸자 Empty& operator=(const Empty& rh.. 2025. 6. 28.
[Effective C++] EC++ 정리하기 - Chapter 1 C++에 왔으면 C++의 법을 따릅시다 챕터 명: Chapter 1 C++에 왔으면 C++의 법을 따릅시다Chapter 1의 주요 내용을 정리해 보았다. 다만, 너무 장황하게 정리한 것 같아서 다음부터는 좀 더 짧게 정리해 볼 예정.항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수현대의 C++은 다중패러다임 프로그래밍 언어(multiparadigm programming language)라 불린다. 절차적(procedural) 프로그래밍, 객체 지향(object-oriented), 함수식(functional), 일반화(generic) 프로그래밍을 포함하여 메타프로그래밍(metaprogramming) 개념까지 지원하고 있다. 물론 표현력, 유연성 덕분에 C++는 대체할 만한 도구가 없지만 규칙적으로 혼동을 주는 면이 많다. 그래서 아예 .. 2025. 5. 31.
백준 1644번 - 소수의 연속합(C++) 문제백준, 골드 3, 문제 링크풀이 날짜: 2025.05.18풀이 시간: 23:05~00:11사용 언어: C++문제 해설연속된 소수의 합은 2D 테이블로 표현할 수 있다.$ table[i][j] $ = {i번째 소수부터 j번째 소수까지 연속된 소수의 합}(단, 0 ≤ i ≤ j인 정수 i, j)일반적으로 N 이하의 모든 소수에 대해서는 해당 테이블은 평균적으로 sqrt(N) * sqrt(N)의 셀이 존재한다고 알려져 있다.i > 0일 때, $ table[i][j] = table[0][j] - table[0][i-1] $로 나타낼 수 있다. 왜냐하면, 3~5번째의 연속된 소수의 합은 1~5번째 소수 합에서 1~2번째 연속된 소수의 합을 빼면 되기 때문이다. 이런 식으로 계산하면, table의 첫 번째 행만.. 2025. 5. 19.
[Effective C++] EC++ 정리하기 - Prechapter: 독자 여러분 반갑습니다 C++을 공부하면서, 실제로 깊이까지 공부해 본 적은 없다는 생각이 들어 책 'Effective C++'을 읽고 배운 점을 정리하고자 하였습니다. 잘못된 점이나 오류가 있다면 지적 바랍니다.해당 글은 Effective C++을 정리한 내용이지만, 제가 새로 배우거나 느낀 점 위주로 정리하였습니다. 책 자체가 워낙에 잘 쓰여서, 필요하다면 직접 해당 책을 읽어보시길 권장드립니다.이번 글에서는 도입부에서 알아놓고 가면 좋을 것들을 정리했다. 1. 암시적 타입 변환을 막기 위해 생성자는 explicit을 사용하자생성자를 만들 때, 암시적 타입 변환으로 객체를 생성해서 넣기를 바라지 않는 경우가 있다.이 경우, explicit으로 생성자를 만들자.class B {public:  explicit B(int x =.. 2025. 5. 18.
백준 32205번 - 네모의 꿈(C++) 문제백준, 실버 4, 문제 링크풀이 날짜: 2025.04.28풀이 시간: 15:59~17:37(1시간 38분)사용 언어: C++문제 해설문제: n개의 삼각형과 각 변의 길이가 주어질 때,같은 길이의 변을 맞닿게 붙여서 네모를 만들 수 있는지 확인해보자.이때 각 변의 길이는 최대 100만이다.N의 최댓값은 50만이므로, 가능한 시간 복잡도는 최대 O(NlogN)이다.네모가 만들어지려면 다음 조건을 만족해야 한다. 같은 길이를 갖는 변이 존재해야 한다길이가 같은 변을 이어붙였을 때 나타날 수 있는 두 가지 이상의 방법 중, 사각형이 되는 경우의 수가 있을 때처음 생각했을 때, 길이가 같은 변을 이어붙일 때 사각형이 되는 경우의 수가 존재할 수도 있다고 생각했다. 그래서 모두 검사해 보기로 했다.그렇다면 삼각.. 2025. 4. 28.