본문 바로가기
C++ Practice

Study C++ Developer RoadMap (2)

by Srff5123 2025. 2. 17.
728x90

1. Pointer & Reference

 

1. Pointer

포인터는 다른 변수의 메모리 주소를 저장하는 변수이다.

메모리에서 변수의 위치를 가리키며 간접적으로 값에 엑세스를 하거나 수정할 수 있다.

 

포인터의 설정

 

포인터의 기능

 

C++에서 함수 포인터는 함수에 매개변수로 전달될 수 있기에 콜백 함수를 구현하는 기능을 제공할 수 있다.

여기서 콜백함수란 특정 이벤트가 발생한 후 실행되는 함수로, 일반적으로 이벤트 처리에 유리하며

버튼 클릭과 같은 특정 이벤트가 발생한 후에 실행된다.

 

함수 포인터를 사용하면 작업을 수행하는 방법에 대한 지침을 보낼 수 있으며, 또한 포인터를 매개변수로 제공하면

프로그래머가 동작을 결정할 수 있는 유연한 함수와 라이브러리를 구성할 수 있다.

 

2. Reference

참조는 기존 변수의 별칭으로, 동일한 메모리 위치에 대한 다른 이름을 의미한다.

포인터와 달리 참조를 null일 수 없으며 선언될 때 초기화되어야 한다.

참조가 초기화가 되면 다른 변수를 참조하도록 변경이 불가능하다.

 

선언 및 초기화(Declaration and Initailization)

참조를 선언하려면 기호 뒤에 변수 형식과 참조 이름을 사용한다.

참조를 선언할 때 참조를 초기화 해야한다 &

 

원래 변수를 사용하는 것처럼 참조를 사용할 수 있다.

참조 값을 변경하면 둘 다 동일한 메모리 위치를 공유하기에 원래의 변수 값도 수정된다.

 

참조 매개변수 사용

참조를 함수 매개변수로 사용하여 인수에 대한 별칭을 만들 수 있다.

이 작업은 원래 변수를 수정해야 하거나 복사 비용을 피하는 경우에 즉 개체를 전달할 때 일반적으로 사용한다.

 

3. 메모리

메모리 모델은 프로그램이 컴퓨터 메모리의 데이터를 저장하고 액세스하는 방법을 정의한다.

Stack, Heap, Data 및 Code Segment와 같은 다양한 세그먼트로 구성된다.

이러한 각 세그먼트는 서로 다른 유형의 데이터를 저장하는 데 사용되며 특정 특성을 지닌다.

 

1. 스택 메모리(Stack Memory)

스택 메모리는 지역 변수 및 함수 호출 데이터와 같은 자동 저장 기간 변수에 사용된다. 

스택 메모리는 컴파일러에 의해 관리되며 할당 및 할당 취소는 자동으로 수행된다.

스택 메모리는 LIFO(Last In First Out) 데이터 구조이며, 가장 최근에 할당된 데이터가 가장 먼저 할당 취소 된다.

 

2. 힙 메모리(Heap Memory)

힙 메모리는 키워드를 사용하여 만든 개체와 같은 동적 저장 기간 변수에 사용된다.

프로그래머는 and연산자를 사용해 힙 메모리의 할당 및 할당 취소를 제어할 수 있다.

힙 메모리는 스택보다 큰 메모리 풀이지만 액세스 시간이 더 느리다.

 

3. 데이터 세그먼트(Data Segment)

데이터 세그먼트는 초기화된 데이터 세그먼트와 초기화되지 않은 데이터 세그먼트의 두 부분으로 구성된다.

초기화된 데이터 세그먼트는 초기 값과 함께 전역, 정적 및 상수 변수를 저장하는 반면, 초기화되지 않은

세그먼트는 초기화되지 않은 전역 및 정적 변수를 저장한다.

 

4. 코드 세그먼트(Code Segment)

코드 세그먼트, 텍스트 세그먼트(Text Segment)라고도 한다. 프로그램의 실행 코드를 저장한다.

일반적으로 실수로 수정하는 것을 방지하기 위해 메모리의 읽기 전용 영역에 있다.

 

4. 객체 수명(Object Lifetime)

객체 수명은 객체가 생성된 순간부터 소멸될 때까지 객체가 존재하는 시간을 나타낸다

C++에서 객체의 수명은 다음 네 가지 범주로 분류할 수있다.

 

1. 정적 저장 기간

정적 저장 기간이 있는 객체는 프로그램의 전체 실행 동안 존재한다.

이러한 객체는 프로그램 실행이 시작될 때 할당되고 프로그램이 종료될 때 할당이 취소된다.

전역 변수, 정적 데이터 멤버 및 정적 지역 변수가 이 범주에 속한다.

 

2. 쓰레드 저장 기간(Thread Storage Duration)

쓰레드 저장 기간이 있는 객체는 해당 객체가 속한 쓰레드의 수명 동안 존재한다.

쓰레드가 시작될 때 생성되고 쓰레드가 종료될 때 소멸된다.

쓰레드 저장 기간은 키워드를 사용하여 지정할수 있다. 

 

 

3. 자동 저장 기간( Automatic Storage Duration)

자동 저장 기간이 있는 객체는 정의 지점에서 만들어지고 선언된 범위를 종료할 떄 소멸한다.

이러한 객체를 "로컬" 또는 "스택" 객체라고 한다. 함수 매개변수(Function parameters) 와

지역 변수, 인스턴스 변수(local non_static)가 이 범주에 속한다

 

4. 동적 저장 기간(Dynamic Storage Duration)

동적 저장 기간이 있는 객체는 같은 메모리 할당 기능을 사용하여  런타임에 생성된다.

이러한 객체의 수명은 범위가 종료될때 자동으로 할당이 취소되지 않기에 수동으로 관리를 해야 한다.

메모리 누수를 피하기 위해 더 이상 필요하지 않을 때 함수를 사용하여 객체를 파괴해 준다.

 

객체 수명은 프로그램에서 메모리를 효율적으로 관리하고 메무리 누수 및 정의되지 않은 동작과 같은

일반적인 문제를 방지하는 데 필수적이다.

 

클래스의 생성자와 소멸자에 대한 적절한 이해는 다양한 수명의 객체로 작업할 때도 필수적이며, 이를 통해 객체 생성 및 소멸의 동작을 제어할 수 있다.

 

참고 : C++ 개발자 로드맵

728x90

'C++ Practice' 카테고리의 다른 글

Study C++ Developer RoadMap (4)  (0) 2025.02.19
Study C++ Developer RoadMap (3)  (0) 2025.02.18
Study C++ Developer RoadMap (1)  (0) 2025.02.12
Set Library C++  (3) 2024.11.12
String Library  (1) 2024.11.04