본문 바로가기
프로그래밍/키워드 정리

[C++] 복습용 키워드 정리 - 4

by Sik.K 2023. 3. 13.

<멤버>

 

c에서 사용자 정의 타입을 구조체라고 부른다. 원하는 자료형들을 묶어 사용자가 정의한 자료형으로 선언하는 것이다. 이것이 c++로 넘어오면서 클래스(class)라는 이름을 가지게 된다. 클래스는 구조체와 본질적으로 구조가 같다. 내부에 사용자가 원하는 자료형들을 묶어서 클래스로 선언한다.

 

여기서 클래스 내부에 선언된 변수들을 멤버 변수라고 한다. 클래스가 가진 변수들을 의미하는 것이다. 또한, 클래스는 변수 이외에 함수를 멤버로 가질 수 있다. 이를 멤버 함수라고 하며 이 함수는 클래스 내부에서 각 객체에 접근하여 객체 별로 함수를 수행할 수 있게 해준다.

 

멤버 변수와 함수로 인해 클래스는 객체 지향 프로그램(OOP)를 수행할 수 있는 것이다.

 

<매크로>

 

특정 값, 혹은 간단한 함수를 사용할 때, 매번 값을 설정하거나 함수를 일부러 작성하여 호출하는 방법은 꽤 번거로운 작업이다. 이럴 경우 사용할 수 있는 것이 매크로 기능이다. 매크로의 경우 컴파일 이전에 전처리기 단계에서 작동하는 것이 특징이다.

 

#define으로 시작하는 매크로 키워드는 바로 뒤에 오는 이름에 특정 값이나 함수를 정의할 수 있다.

 

#define max 20

 

위와 같은 경우 max는 숫자 20을 의미한다. 따라서 for문이나 20을 작성해야하는 경우 max를 입력하는 것으로 대체할 수 있다. 일반적인 매크로 기능의 장점은 특정 숫자에 의미를 부여할 수 있다는 점이다.

 

단순히 20을 적어두면 이 값이 무엇을 의미하는 것인지 알 수 없으나 max라는 매크로를 설정하면 20은 최댓값이라는 것을 프로그래머가 확인할 수 있어 가독성이 높아진다.

 

이를 이용해 매크로 함수를 작성할 수 있는데 작성법은 위와 비슷하다.

 

#define Add(a,b) a+b

 

Add(10,5)를 입력하면 자동으로 내부에서 함수가 실행되어 15라는 값을 반환한다.

 

<변수의 위험성>

 

무분별한 변수의 선언 및 사용은 위험하다. 이유는 변수의 생명 주기를 보면 알 수 있다.

 

변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙여진 이름이다. 따라서 변수의 생명 주기는 메모리 공간이 확보된 시점부터 메모리 공간이 해제되어 가용 메모리에 반환되는 시점까지이다.

 

지역 변수의 생명 주기는 함수의 생명 주기와 같다. 함수가 호출되어 변수를 선언하는 구문을 만나면 변수가 선언되어 함수의 스코프에 등록되고, 함수가 종료될 때(스코프가 소멸될 때) 변수가 사라진다.

 

지역 변수는 초기화를 하지 않으면 쓰레기 값이 저장이 되고 때문에 초기화 없이 접근을 하게 되면 원하지 않는 값이 불러오게 된다. 따라서 지역 변수는 선언 후 초기화를 하는 것이 좋다.

 

전역 변수의 생명 주기는 애플리케이션의 생명 주기와 같다. 전역 변수는 특별한 진입점이 없이 코드가 읽어서 선언 후 초기화를 하고 해당 cpp 내부에 존재하는 모든 함수가 접근이 가능하다.

 

또한 지역 변수와는 다르게 전역 변수는 특정 초기화 값이 없으면 0으로 자동으로 초기화가 된다.

 

단, 특정 함수에서 전역 변수와 같은 이름의 지역 변수가 선언이 되면 해당 함수에서는 전역 변수로의 접근이 불가능하다. 같은 이름의 지역 변수는 전역 변수를 덮어버리기 때문이다. 때문에 전역 변수와 같은 이름의 지역 변수는 필요하지 않는 이상 지양해야 한다.

 

전역 변수는 함수 스코프에서 호출을 하게 되면 스코프 밖에 위치하기 때문에 가장 마지막에 검색이 된다. 즉, 변수에 대한 접근이 느리다.

 

 

댓글