프로그래밍/C++

프로그래밍/C++

[C++] Multithreaded Data Synchronization 총정리

Multithreading에 대해 컴퓨터에는 CPU라는 연산 장치가 존재한다. CPU의 코어에서는 명령 집합들을 빠른 속도로 처리하는데 이 처리되는 단위를 Thread라 부른다. 현대의 CPU는 여러 개의 코어들로 구성되어 있고, 여러 스레드가 동시에 여러 명령 집합들을 수행할 수 있다. 여러 개의 스레드를 동시에 사용한다면, 하나의 스레드만 사용하는 것보다 훨씬 CPU를 효율적으로 활용할 수 있다. 이처럼 두 개 이상의 스레드를 통해 동시에 실행하는 것을 멀티스레딩이라 부른다. 스레드에 대해 자주 혼동하는 것 중 하나가 있다. 처리되는 단위를 스레드라 부르는데, 이것이 스레드를 코어 개수만큼만 생성해야 한다는 의미는 아니다. 스레드는 1000개 10000개까지도 생성시킬 수 있다. 다만, 코어의 개수가..

프로그래밍/C++

[C++] C++에서 Partial Class 구현 방법

Partial Class란? C#에서 Partial Class는 단일 클래스를 여러 소스 코드 파일에 나눠서 정의할 수 있는 기능이다. Partial Class의 각 부분은 동일한 클래스 정의에 기여하며 컴파일러는 컴파일 중에 해당 부분을 단일 클래스로 병합한다. Partial 클래스는 주로 구현 세부 사항을 분리하고 코드베이스를 보다 체계적이고 유지 관리하기 쉽게 유지하는 데 사용된다. 특히 코드 생성 도구나 여러 개발자가 관련된 시나리오에서 더욱 그렇다. 코드 생성 부분 클래스는 일반적으로 코드 생성 도구(예: Entity Framework)와 함께 사용되어 자동 생성 코드를 사용자 지정 코드와 분리한다. 이러한 분리를 통해 개발자는 생성된 코드에 영향을 주지 않고 사용자 지정 코드를 수정할 수 있다..

프로그래밍/C++

[C++] C++에서 Interface 구현 방법

인터페이스란? Java나 C#과 같은 언어들을 보면 Interface라는 강력한 개념이 존재한다. 인터페이스는 객체에 대한 명세서만 나타내고 구체적인 구현은 각 파생 객체에서 작업하도록 한다. 명세서에는 메서드, 프로퍼티, 이벤트와 같은 것들이 포함될 수 있다. 겉으로만 보면 별로 대단할 것 없어 보이는 개념이지만, 인터페이스를 잘 활용한다면 객체지향 개발에 있어서 신세계를 경험할 수 있다. C++을 이용한 인터페이스 구현 C++은 언어 차원에서 인터페이스를 명시적으로 지원하지는 않는다. 하지만 C++ 자체에서 갖고 있는 개념인 추상 클래스와 순수 가상함수를 조합하여 인터페이스를 구현할 수 있다. class IPrintable { public: virtual void Print() = 0; // Pure..

프로그래밍/C++

[C++] Casting 총정리

C++ Casting C++에는 여러가지 캐스팅 방법들이 존재한다. C Style Casting C에서 계승받은 전통적인 캐스팅 방법으로 여러 캐스팅 작업을 복합적으로 사용한다. 편리할 수 있지만 덜 명확하고 예상치 못한 동작이 발생할 수 있다. 잠재적인 문제를 숨길 수 있으므로 최신 C++ 코드에서는 권장되지 않는다. double numDouble = (double)42; 최신 C++에서는 가능하면 static_cast, dynamic_cast, const_cast와 같은 보다 구체적인 형변환 연산자를 사용하는 것이 일반적으로 권장된다. 이러한 연산자는 더 나은 유형 안전성을 제공하고 코드를 보다 명확하게 구분할 수 있도록 해주기 때문이다. 그러나 하위 수준 작업에 reinterpret_cast를 사용..

프로그래밍/C++

[C++] 객체 복사

객체 복사 C#, Java, Python 같은 다른 많은 언어에서는 객체에 대해 = 연산을 수행하였을 경우 객체 복사를 수행하지 않는다. 하지만 C++에서는 class가 = 연산을 수행하였을 경우 복사가 일어난다. #include #include using namespace std; class Data { public: int data1; int data2; string data3; }; void Print(const Data& data) { cout

프로그래밍/C++

[C++] C++의 데이터 타입 종류

C++ Data Types C++의 모든 타입은 기본 타입, 파생 타입, 사용자 정의 타입으로 구분할 수 있다. 기본 타입 (Primary Type) 기본 타입은 C++에서 기본적으로 사용되는 타입들을 의미한다. 다음과 같은 기본 타입들이 존재한다. // primitive types bool a = false; char b = 'a'; unsigned char c = 255; short d = 32767; unsigned short e = 65535; int f = 2147438647; unsigned int g = 4294967295; long h = 2147438647; unsigned long i = 4294967295; long long j = 9223372036854775807; unsigned..

프로그래밍/C++

[C++] friend

friend 키워드 C++에서는 캡슐화를 위한 접근지정자(private, protected, public)들을 갖고 있다. 그 중 private과 protected로 지정된 함수 및 변수들은 외부에서 접근이 불가능하다. (protected는 하위클래스에서 접근 가능) 이러한 상황에서 어떤 특정 객체 or 함수에서만 예외적으로 접근을 허용하도록 하기 위해 friend 키워드를 이용한다. ex) Item이라는 클래스가 있다. 이 클래스는 Init이라는 함수를 통해 내부 변수들을 초기화한다. 그러므로 외부에서 Item 객체 생성 후 반드시 Init 함수를 따로 호출해야한다. 그리고, Item 클래스는 반드시 ItemManager 클래스를 통해 생성되어야한다. (이유는 여러가지겠지만, ItemManager에서 ..

AlgorFati
'프로그래밍/C++' 카테고리의 글 목록