본문 바로가기
반응형

C++26

C++ Static 함수와 Static 변수에 대해서 Static 함수static 함수는 Heap이나 Stack 영역이 아닌 Code 영역에 위치한다. Code 영역에 위치하기 때문에 읽기 전용(Read-Only)이며 그 내용이 변경되지 않음을 보장한다. 그래서 Thread-Safe 하고 안정성이 높다. 변경될 여지가 없기 때문이다.클래스 안에 정의된 전역 함수전역 함수이기 때문에 인스턴스를 생성하지 않아도 접근 및 호출 가능해당 클래스로 선언된 모든 객체에서 공용으로 사용 가능공용으로 사용하기 때문에 아무리 많은 인스턴스가 생성되어도 오직 한개만 존재한다.멤버변수에 접근할 수 없다.This 포인터가 없기 때문에 const 키워드를 사용할 수 없다.Static 변수static 변수는 Heap이나 Stack 영역이 아닌 Data 영역에 위치한다. static.. 2026. 4. 18.
C++ *와 & 연산자 톺아보기 * 역참조 연산자타입 선언 시 사용하게 되면 해당 타입이 포인터 타입이라는 것을 명시하는 용도로 사용한다.이 변수는 '주소를 저장하는 바구니입니다.' 라고 선언int* ptr; (ptr은 주소 저장용)변수 앞에 사용하게 되면 해당 포인터 타입 변수가 가리키는 주소의 실제 알맹이를 가져오겠다는 의미로 사용한다.*ptr = 10; (주소지에 10을 넣음)& 참조 연산자타입 선언시 사용하게 되면 기존에 선언된 변수의 별칭을 명시하는 용도로 사용한다.이 변수는 '기존 변수의 별칭을 저장하는 변수입니다.' 라고 선언int& ref = val; (ref는 val의 별명)변수 앞에 사용하게 되면 해당 변수의 주소값을 가져온다.ptr = &val; (val의 주소를 추출)예제 코드int main() { int n.. 2026. 3. 29.
C++ 역참조 연산자와 화살표 연산자에 대해 * 역참조 연산자역참조 연산자는 C++ 프로그래머가 많이 사용하는 연산자이지만 명칭을 일이 없다보니 입에 잘 붙지 않는 명칭이다.역참조 연산자는 *(애스터리스크, Asterisk)를 이용해서 표현한다. 포인터인 변수 앞에 *를 붙이면, 해당 포인터가 가리키고 있는 메모리 주소의 실제 값에 접근한다.포인터 선언 : int* ptr = new int();역참조 연산자 사용 : int value = *ptr문법 : *포인터만약 포인터가 객체(구조체나 클래스)를 가리키고 있다면, 이 상태에서 멤버에 접근하기 위해서는 괄호가 필요하다.(*ptr).member; // 포인터를 먼저 역참조하여 객체로 만든 뒤, 멤버에 접근괄호를 사용하는 이유는 . 연산자(점 연산자)가 * 연산자보다 우선순위가 높기 때문에 *ptr... 2026. 3. 29.
C++ operator<< 삽입 연산자 톺아보기 operator클래스를 선언하고 구현할 때 가장 익숙하지 않은 연산자라고 한다면 개인적으로 삽입 연산자를 꼽고 싶다. 보통은 직접 구현하지 않고 다른 사람이 작성한 클래스에서 발견되고는 하는데 해당 연산자를 어떻게 사용하는지에 대해서는 깊게 생각을 해본 적이 없었다. 하지만 알게 되면 생각보다 간단한 법이라는 것을 우린 알고 있다. 이번 기회에 간단하게 짚고 넘어가 보자. operator는 삽입 연산자(Insertion Operator)라고 불린다. 원래는 비트 단위 왼쪽 시프트(Bitwise Left Shift)를 수행하는 연산자이지만, C++ 표준 입출력 라이브러리에서 출력 스트림에 데이터를 보낼 때 사용하는 용도로 오버로딩 되기에 오히려 삽입 연산자로 널리 쓰인다.사용자 정의 객체 출력기본 타입(i.. 2026. 3. 14.
메모리 모델(Memory Model)이란? 메모리 모델(Memory Model)메모리 모델이란, 여러 개의 스레드가 공유 메모리에 접근할 때, 어떤 순서로 데이터가 보일지 정의한 약속 또는 규칙을 말한다.CPU와 컴파일러는 성능을 위해 우리가 짠 코드의 실행 순서를 멋대로 바꾸곤 하는데, 이때 메모리 모델은 그 멋대로의 허용 범위를 결정한다.메모리 모델의 두 가지 측면원자성(Atomicity) : "데이터를 수정할 때, 중간 단계가 다른 스레드에 보이지 않게 하라"예를 들어, 64비트 데이터를 저장할 하위 32비트만 먼저 저장되어 이상한 값이 읽히는 상황을 방지하는 규칙이다.가시성과 순서(Visibility & Ordering) : 한 스레드가 수정한 내용이 언제, 어떤 순서로 다른 스레드에게 보일 것인가?C++ 11 이전과 이후의 차이사실 2.. 2026. 2. 24.
생산자 - 소비자 패턴으로 스레드 공부하기 생산자 - 소비자 패턴으로 스레드 공부하기최근에 스레드에 대해서 배움이 부족한 것을 느껴서 스레드에 대해서 공부하고 있다. 스레드를 공부할때 가장 기본이 되는 생산자 소비자 패턴에 대해서 알아보자.예제 코드해당 예제에서는 chef()와 waiter() 함수가 존재하는데 해당 함수를 스레드를 생성해서 동작시킨다. chef()는 음식을 계속 만들고 waiter()는 order 큐에 음식이 들어있으면 이를 서빙한다. 완벽한 생산자와 소비자의 모습을 보여준다. 그리고 order 큐에 더 이상 음식이 없고 영업이 종료되었다면 모두가 퇴근하게 된다. 주목해야할 점은 std::condition_variable을 사용해서 wait를 통해서 잠에 들고 notify_one을 사용해서 깨우는 구조이다. 만약 std::con.. 2026. 2. 21.