"깊이"가 다른 게임개발자 허민영

유저에서 게임까지, 철학에서 코딩까지, 본질을 보는 게임개발

2025/05 9

SOLID 원칙: 객체지향 설계의 5가지 핵심 원칙

SOLID 원칙: 객체지향 설계의 5가지 핵심 원칙개요SOLID 원칙은 로버트 마틴(Robert C. Martin)이 제시한 객체지향 프로그래밍과 설계의 다섯 가지 기본 원칙입니다. 이 원칙들은 소프트웨어를 더 이해하기 쉽고, 유연하며, 유지보수하기 쉽게 만들기 위해 고안되었습니다.SOLID는 다음 다섯 원칙의 첫 글자를 따온 약어입니다:Single Responsibility Principle (단일 책임 원칙) : 직관성Open/Closed Principle (개방-폐쇄 원칙) : 확장성Liskov Substitution Principle (리스코프 치환 원칙)Interface Segregation Principle (인터페이스 분리 원칙)Dependency Inversion Principle (의존관..

리팩토링 글버전

다층적 패러다임 개발에서의 리팩토링과 패턴 적용서론: 개발 과정의 진화소프트웨어 개발은 단순히 코드를 작성하는 행위를 넘어, 지속적인 구조 개선과 패턴 적용의 순환 과정입니다. 특히 다층적 패러다임(FP/RP 코어, OOP/PP 셸)을 활용하는 현대적 아키텍처에서는, 리팩토링과 디자인 패턴의 적용이 단순한 코드 개선을 넘어 시스템 전체의 균형과 조화를 이루는 핵심 요소가 됩니다.1. 코어 레이어: FP/RP 영역의 리팩토링1.1. 함수형 코어의 리팩토링함수형 프로그래밍(FP)이 적용된 코어 영역에서는 순수성(purity)과 불변성(immutability)이 핵심입니다. 이 영역의 리팩토링은 이러한 원칙을 강화하는 방향으로 진행됩니다.유니티에서 데미지 계산 로직을 리팩토링할 때는 상태 변이를 제거하고 순수..

잡학다식 2025.05.13

리팩토링

4.3. 패턴 통합의 실제 사례다음은 유니티 게임 개발에서 다양한 패러다임의 패턴을 통합한 사례입니다: csharpusing System;using System.Collections.Generic;using UnityEngine;using UniRx;// 불변 데이터 클래스들 (FP)[Serializable]public class PlayerState{ public readonly string Id; public readonly Vector3 Position; public readonly int Health; public readonly List Inventory; public PlayerState(string id, Vector3 position, int health,..

잡학다식 2025.05.13

TDD or DDD? 인스턴스 or 온톨로지? 프로그래밍의 길

소프트웨어 개발에서 테스트 주도 개발(TDD)과 도메인 주도 설계(DDD)는 각각 독특한 철학을 가진 방법론으로, 이들의 차이는 근본적으로 온톨로지와 인스턴스라는 개념적 구도에서 출발한다. 이 두 방법론은 표면적으로는 상반된 접근법처럼 보이지만, 실제로는 상호보완적인 관계를 형성한다.온톨로지와 인스턴스: 프로그래밍의 두 축프로그래밍의 본질은 '값의 변화'다. 이러한 변화는 런타임의 핵심이자 프로그래밍의 근본적 목적이다. 따라서 인스턴스—실제로 값을 가지고 변화하는 실체—는 프로그래밍의 정수라고 할 수 있다. 모든 프로그램은 결국 데이터의 상태를 변환하고 조작하는 과정이기 때문이다. 그러나 통제되지 않은 인스턴스의 변화는 막대한 사이드 이펙트를 초래할 수 있으며, 이는 소프트웨어의 복잡성을 기하급수적으로 ..

시스템 규모에 따른 최적 결합 메커니즘 선택 가이드

소프트웨어 설계에서 결합(coupling)은 컴포넌트 간의 의존성 정도를 나타내는 중요한 개념입니다. 강한 결합에서 느슨한 결합까지 다양한 메커니즘이 존재하며, 각 메커니즘은 시스템의 특정 규모와 상황에 더 적합할 수 있습니다. 일반적으로 느슨한 결합이 유연성을 제공하지만, 모든 상황에 최적인 것은 아닙니다.결합 메커니즘 개요강한 결합 메커니즘직접/정적 호출: 가장 강력한 결합 형태로, 한 클래스가 다른 클래스의 메서드를 직접 호출하는 방식입니다. 클래스 내부에서 가장 효율적이지만 유연성이 제한됩니다.구체 클래스 주입: 특정 구현 클래스를 직접 주입하는 방식으로, 클래스 간 통신에 적합합니다. 직접 호출보다는 느슨하지만 여전히 구체적인 구현에 의존합니다.인터페이스/추상화: 구체적인 구현보다 인터페이스나 ..

팩토리 패턴(Factory Pattern)

팩토리 패턴(Factory Pattern)팩토리 패턴은 객체 지향 프로그래밍에서 가장 많이 사용되는 디자인 패턴 중 하나입니다. 이 패턴은 객체 생성 로직을 클라이언트 코드와 분리하여 객체 생성의 유연성과 재사용성을 높이는 데 중점을 둡니다.팩토리 패턴의 종류1. 심플 팩토리(Simple Factory)가장 기본적인 형태로, 단일 팩토리 클래스가 모든 객체 생성을 담당합니다.팩토리 클래스는 매개변수에 따라 다른 유형의 객체를 반환합니다.엄밀히 말하면 디자인 패턴이라기보다는 프로그래밍 관행에 가깝습니다.2. 팩토리 메소드(Factory Method)객체 생성을 서브클래스에 위임하는 방식입니다.추상 클래스나 인터페이스에서 객체 생성을 위한 메소드를 정의하고, 구체적인 구현은 서브클래스에서 담당합니다.새로운 ..

관심사의 분리(Separation of Concerns)

개념 정의관심사의 분리는 소프트웨어 엔지니어링의 핵심 설계 원칙 중 하나로, 프로그램을 서로 다른 기능이나 책임을 가진 별개의 섹션으로 나누는 것을 의미합니다. 각 섹션은 하나의 특정한 "관심사(concern)"만을 다루도록 설계되며, 이를 통해 코드의 복잡성을 관리하고 유지보수성을 향상시킵니다.핵심 원리관심사의 분리의 기본 아이디어는 복잡한 시스템을 더 작고 관리 가능한 부분들로 나누는 것입니다. 각 부분은 시스템의 특정 측면에만 집중하며, 다른 부분들과는 최소한의 의존성을 가져야 합니다. 이렇게 함으로써 개발자는 한 번에 하나의 문제에만 집중할 수 있고, 시스템의 한 부분을 수정할 때 다른 부분에 미치는 영향을 최소화할 수 있습니다.실제 적용 사례웹 애플리케이션 개발에서 가장 일반적인 예는 MVC(M..

유니티 커스텀 어트리뷰트

유니티(Unity) 개발에서 커스텀 어트리뷰트는 코드 구성과 엔진 상호작용에 중요한 요소입니다. 다양한 측면에서 이를 분석해 보겠습니다.기본 개념커스텀 어트리뷰트는 C# 클래스, 메서드, 프로퍼티 등에 메타데이터를 추가하는 기능입니다. 유니티에서는 인스펙터 표시부터 에디터 확장까지 다양한 용도로 활용됩니다.주요 용도인스펙터 커스터마이징[SerializeField] - 비공개 필드를 인스펙터에 표시[Range(min, max)] - 슬라이더 형태로 값 제한[Header("텍스트")] - 인스펙터에 섹션 구분용 헤더 추가에디터 확장[CustomEditor(typeof(TargetClass))] - 커스텀 에디터 생성[MenuItem("경로/이름")] - 에디터 메뉴 항목 추가런타임 동작 제어[ExecuteI..