프로그래밍 언어
-
OOP Design Pattern - Behavioral Pattern 1프로그래밍 언어 2024. 10. 14. 22:28
Chain of ResponsibilityChain-of-Responsibility PatternA behavioral design pattern consisting of a source of command objects and a series of processing objectsEach processing object contains logic that defines the types of command objects that it can handleThe rest are passed to the next processing object in the chainA mechanism exists for adding new processing objects to the end of this chainVar..
-
[C#] Public Field vs Auto-Implemented Property프로그래밍 언어 2024. 4. 6. 22:41
유니티로 게임을 개발하다보면, Property를 자주 접하게 된다. 그런데 Public Field와 Auto-Implemented Property 중 어느 것을 사용해야하는지 매번 고민하게 된다. 이번 글에선 C#의 Property에 대해 알아보고, Property를 사용하는 이유는 무엇인지, Public Field와 Auto-Implemented Property의 차이점이 무엇인지에 대해 작성해보고자 한다. Property란? 객체 지향 프로그래밍에선 캡슐화는 매우 중요한 요소 중 하나이다. 클래스의 데이터를 외부 클래스로부터 보호하여, 의도치 않은 기능을 수행하지 않도록 각 객체의 데이터 오염을 방지한다. 예를 들어, 캐릭터를 구현한다고 가정해보자. 캐릭터 클래스는 캐릭터의 위치 정보를 갖고 있는 p..
-
OOP Design Pattern - Structural Pattern프로그래밍 언어 2024. 1. 18. 21:33
Adapter Adapter Pattern Allow the interface of an existing class to be used as another interface Allow two incompatible interfaces to work together Interfaces may be imcompatible, but the inner functionality should suit the need By converting the interface of one class into an interface Often used to make existing classes work with others without modifying their source code Overview Solves probl..
-
OOP Design Pattern - Creational Pattern프로그래밍 언어 2024. 1. 12. 17:49
Abstract Factory Abstract Factory Pattern An interface for creating families of related or dependent objects without specifying their concrete classes Provides way to create families of related objects without imposing their concrete classes Encapsulating a group of individual factories that have a common theme without specifying their concrete classes The client does not know which concrete obj..
-
[C++] 이동 의미론 Move Semantics프로그래밍 언어 2023. 11. 20. 23:20
C++11부터 복제를 통한 자원의 낭비를 줄이기 위해 객체 자원의 소유권을 이전할 수 있도록 추가된 개념이다. Foreword 이전에는 복제를 통해 자원의 소유권을 이전했었다. 복제 방식은 2가지로 얕은 복제(Shallow Copy)와 깊은 복제(Deep Copy)가 있다. 얕은 복제란 원본 객체의 데이터 맴버를 대상 객체로 단순히 복제하거나 대입하는 방식으로 참조는 복제되지만 참조되는 객체는 복제되지 않는다. 얕은 복제 사용 시 객체의 할당 메모리를 해제할 경우 허상 포인터나 미아(Orphan)으로 인한 메모리 누수의 문제점이 존재한다. 이런 문제점을 해결하기 위해 깊은 복제를 사용하는데 깊은 복제란 참조값의 복제가 아닌 참조된 객체 자체가 복제되는 것을 뜻한다. 단, 깊은 복제를 사용하기 위해선, 클..
-
입실론 테스트프로그래밍 언어 2023. 11. 20. 21:54
이번 글에선 실수를 비교하기 위한 방법인 입실론 테스트에 대해 알아보고자 한다. Foreword 코딩을 하면서 두 실수가 정확하게 같은지를 비교하는 로직을 작성할 때가 많다. 하지만 때때론 잘못된 결과를 출력하는 경우가 발생한다. 예를 들어, 어떤 실수가 정확하게 0과 같은지를 비교할 때이다. float f = sqrt(9.0f) - 3.0f; // 9^2 - 3 if (f == 0.0f) // Works only sometimes { // Equal } Problem Explanation 우선, 이러한 문제는 정수를 비교할 땐 절대 발생하지 않는다. 만약 int타입의 $3$을 int타입의 $3$을 뺀다면, 항상 $0$을 출력할 것이다. 이러한 문제는 실수(C++에선 float 타입과 double 타입)..
-
객체 지향 설계 SOLID프로그래밍 언어 2023. 11. 16. 21:40
C++는 객체 지향 언어이고 객체 지향 프로그래밍 및 설계를 위한 5가지 법칙이 있다. 이를 SOLID 법칙이라고 칭하며 이는 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 리펙토링(Refactoring)을 위한 지침이다. 단일 책임 원칙 Single Responsibility Principle 단일 책임 원칙이란 "한 클래스는 하나의 책임만 가져야 한다"라고 정의할 수 있으며, 이는 "모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함."를 의미한다. 여기서 책임이란 해당 클래스를 변경해야 하는 이유이며, 단일 책임 원칙을 다시 정의해 보면 "클래스나 모듈은 반드시 한 가지의 이유에 의해 변경되어야 한다"라고 생각할 수 있다. 단일 책임 원칙을 지켜야 하는 이유는 어떠한 코..
-
Zero Division with Floating-Point Numbers프로그래밍 언어 2023. 11. 16. 02:04
개발을 하면서 어떠한 값을 0으로 나누는 미친 짓을 하는 개발자는 없겠지만 (그게 나야) 부동소수점에서의 Zero Division을 알아보고자 한다. 우선 두 가지의 배경 지식이 필요하다. 부동 소수점 계산 첫 번째로 흔한 개발자 상식으로 나오는 문제를 살펴보자. $1.1 + 0.1 == 1.2$는 $true$일까? 아님 $false$일까? 정답은 $false$이다. 이는 부동 소숫점을 어떻게 표현하는지에 대해 확인하면 왜 $false$가 나오는지 알 수 있다. float의 경우 부호 $1$비트, 지수 부분 $8$비트, 가수 부분 $23$비트로 구성되고, double의 경우 부호 $1$비트, 지수 부분 $11$비트, 가수 부분 $52$비트로 이루어져있다. 정수와 다르게 부동 소숫점은 정확한 값으로 표현할..