분류 전체보기 187

C++ (복사/이동) 생성자, 할당자, Rule of Three(Five)

Cpp 의 클래스에는 기본 생성자 말고도, 소멸자, 복사 생성자, 복사 할당자, 이동 생성자, 이동 할당자가 존재한다. 위의 다섯가지는 컴파일러가 알아서 만들어 주기 때문에 (기본 생성자 까지도), 일반적으로는 구현할 일이 없지만 만약 클래스에서 raw pointer 멤버 변수 등을 가지고 있어서 메모리 관리가 필요한 경우에는 위와 같은 생성/할당/소멸자를 프로그래머가 직접 구현해 줘야 한다. 이동 생성/할당자를 뺀 세가지를 구현해야 한다는 법칙을 Rule of Three, 이동 생성/할당자를 포함하면 Rule of Five 라고 부른다. 그냥 코드에 주석달았음 참고로 noexcept 같은 경우에는 성능상의 이점도 있다고 한다. C++11 부터는 소멸자 등에 자동으로 컴파일러가 붙여준다고 함 class ..

언어/C++ 2020.11.08

스마트 포인터

RAII RAII : Resource Acquisition Is Initialization 리소스의 라이프사이클과 오브젝트의 라이프사이클을 일치시킨다는 뜻이다. 여기서 리소스란 메모리, 쓰레드, 파일IO, 뮤텍스 ,DB와의 커넥션 등이 있다. C++ 에서는 스마트 포인터를 이용하여 메모리 리소스와 인스턴스의 라이프사이클을 일치시킬 수 있다. unique_ptr 유니크 포인터는 exlusive ownership을 제공하는 스마트 포인터다. 유니크 포인터는 하나의 오브젝트(메모리 영역)을 단 하나의 포인터만 가리키게 한다. include ... class Cat { public : Cat() : mAge{1} {} ~Cat(){} void speak(){cout

언어/C++ 2020.11.08

C# 의 타입 - 2. 기본 타입 (Primitve Type)

기본 타입 (Primitve Type) 32비트의 정수형 변수를 할당한다면 다음과 같이 코드를 쓸 수 있다. System.Int32 a = new System.Int32(); 그런데 이렇게 쓰면 너무 귀찮으니까... 대부분의 컴파일러는 다음과 같이 표현하도록 해준다. int a = 0; 그리고 위와 같은 코드는 System.Int32 타입을 사용한 코드와 의미가 동일한 IL 코드를 만들어준다. 이처럼 컴파일러가 직접 지원하는 데이터 타입들을 기본 타입이라고 부른다. C#의 기본 타입과 FCL에 대응되는 타입은 다음과 같다. 기본 타입 FCL 타입 CLS 호환 비고 sbyte System.SBtye ㄴㄴ byte System.Byte ㅇㅇ short System.Int16 ㅇㅇ ushort System.U..

언어/C# 2020.10.31

C# 의 타입 - 1. 타입의 기초

System.Object c#의 모든 타입들은 System.Object를 상속받는다. class A // class A : System.Object 와 같다. (암시적으로 상속) { // code } Object 클래스에는 필드는 존재하지 않으며 다음과 같은 메서드들이 존재한다. (~Object()는 Finalize 메서드이며 protected임) namespace System { public class Object { public Object(); ~Object(); public static bool Equals(Object objA, Object objB); public static bool ReferenceEquals(Object objA, Object objB); public virtual boo..

언어/C# 2020.10.31

멀티플레이 게임과 동기화

CAP 이론 개요 CAP 이론이란 분산 시스템 선택에 도움을 주는 정리이다. Consistency(일관성) : 시스템에 접근하는 누구나 같은 결과를 봄 Availablity(가용성) : 누구나 언제든지 시스템에 접근(읽기/쓰기) 가능 => lock 거는 일이 없다. Partition Tolerance (분할 용인) : 시스템을 분할할 수 있음 (병렬 처리, 멀티쓰레딩) 이며 CAP를 모두 충족하는 시스템은 없다는 것이 핵심이다. 멀티 플레이와 CAP 멀티플레이 게임은 기본적으로 'P'를 충족해야 한다고 볼 수 있다. 그러면 멀티플레이 동기화에 있어서 선택지는 두 개가 남는다. 'A'를 택할 것인지, 'C'를 택할것인지 멀티플레이의 동기화 방식 1. 비동기형 Clash of Clans 같은 게임이 해당된다..

이론/일반 2020.10.11

L_value와 R_value

L-value & R-value L value는 왼쪽에 있는 거, R value는 오른쪽에 있는 거... 가 아니다. L-value는 나중에 다시 부를 수 있는 것. R-value는 그렇지 못한 것.으로 구분하면 쉽다. 예를 들어, int a=0; int b=a; 에서 a 는 L-value이다. 0은 다시 부를 수 없으므로 R-value이다. b 역시 L이겠지? R-value는 임시적으로 생성된 값이라고 볼 수 있다. 그러면 대체 왜 이런 걸 구분할까? R-value를 잘 이용하면 메모리를 효율적으로 사용할 수 있기 때문이다. 예를 들어, 어떤 값이 R-value이고 이 값을 전달하기 위해 몇 개의 변수를 거친다고 가정해보자. 이 값을 전달하기 위해 변수를 거칠 때마다 값을 복사할 필요가 있을까? 어차피..

언어/C++ 2020.10.11