25.05.26 (1) - C++ Tutorial 6

김영하·2025년 5월 26일

C++

목록 보기
6/32

C++ Tutorial


C++ Enumeration (enum)

열거형상수의 그룹을 나타내는 특수한 데이터 타입.
열거형을 생성하기 위해선 enum 키워드를 사용하고,
이름을 선언한 뒤, 콤마로 각 아이템 을 구분해서 넣어주면 된다.

enum Level {
LOW,
MEDIUM,
HIGH
};

※ 마지막 아이템까지 콤마를 넣어줄 필요는 없고,
반드시 대문자로 통일할 필요는 없지만 이렇게 작성하는 게 권장된다.

주요점은 ; 가 아닌 , 를 사용하는 것,
예시를 보면 문자열이라고 해서 "" 로 묶어줄 필요도 없는 모양


열거형 내부의 `아이템` 들에 접근하기 위해선 변수를 만들 필요가 있다 `main()` 함수 안에서, `enum` 키워드를 사용해주고, 바로 뒤이어 변수 이름을 지정해준다. ``` enum Level myVar; ``` 이렇게 "열거형 변수" `myVar` 가 생성되었고, 여기에 값을 할당해 줄 수 있다. (반드시 열거형 내부의 아이템 이어야한다) ``` enum Level myVar = MEDIUM; ```

일단 기본적으로,
이러한 아이템 들은 각자 인덱스 값과 동일한 값을 갖고 있는데
위 예시에서는 LOW가 0 , MEDIUM이 1 , HIGH가 2 인 식이다

int main() {
enum Level myVar = MEDIUM;
cout << myVar;


열거형 내부의 값, 아무것도 설정하지 않은 상태에서는 인덱스 값이 나오게 되는데,
열거형의 경우에는 이 값도 지정해 줄 수가 있다
간단하게 열거형을 정의할 때 각 아이템에 = 로 값을 지정해주면 된다

만약 어느 하나의 아이템에만 값을 지정해 준 경우에는,
그에 따라서 인덱스처럼 나머지도 값이 지정된다

enum Level { 
LOW = 5,
MEDIUM, // 얘는 6
HIGH // 7
}

이렇게 할당된 값을 확인하기 위해 switch 문을 사용하기도,
ex)

enum Level {
  LOW = 1,
  MEDIUM,
  HIGH
};

int main() {
  enum Level myVar = MEDIUM;

  switch (myVar) {
    case 1:
      cout << "Low Level";
      break;
    case 2:
      cout << "Medium level";
      break;
    case 3:
      cout << "High level";
      break;
  }
  return 0;
}

열거형은 상수 로 이루어져 있기 때문에,
변하지 않고, 코드를 읽기 쉬운데다가 유지력이 있기 때문에
변하지 않을 것이라 알고 있는 정보들에 대해 사용하기 좋다.
ex) 날짜, 요일, 색상, etc.


References

참조 라는 개념이 존재하는데,
이 "참조 변수" 는 이미 존재하고 있는 변수의 "별명" 같은 것이며,
& 연산자를 사용해 만들 수 있다.

string food = "fried chicken"; // 이렇게 만들어진 변수에
string &dinner = food; // dinner 라는 별명을 붙여 참조, 같은 값을 주는 느낌
// & 는 연산자 지만 이렇게 참조 변수 이름에 딱 붙어서 사용된다

두 값을 출력해 보면 동일한 값이 나온다


**또한, 같은 `메모리 경로` 를 가지고 있기 때문에, 어느 한쪽의 값을 바꾸면 다른 쪽도 같이 수정된다.**

Memory Address

위에서 등장한 참조 기능은,
참조 변수 외에도 변수의 메모리 주소 를 알아낼 때도 쓰인다.
정확히는 "변수가 컴퓨터의 어디에 저장이 되었는지 그 위치"

C++에서 변수가 생성되면, 해당 변수에 메모리 주소가 할당되고,
우리가 그 변수에 '값'을 지정하게 되면, 그 '값'이 이 주소에 저장된다.

이에 접근하기 위해서 똑같이 & 연산자를 사용할 수 있다.

string food = "fried chicken";
cout << &food;

메모리 주소는 16진수 형태, 환경에 따라 달라질 수 있다.


참조 와 아래에 다룰 Pointers
C++ 에서 매우 중요한 기능으로,
★ 이들을 통해 컴퓨터 메모리의 데이터를 조작할 수 있기 때문에,
코드를 줄이고 성능을 향상시킬 수 있기 때문

이러한 특징 때문에 C++ 는 다른 프로그래밍 언어, 파이썬 자바 등과 차이가 있다


Pointers

포인터 는, "메모리 주소" 를 값으로 가지는 변수로,
데이터 타입에 * 연산자로 작용해 생성된다.

데이터타입 변수이름 = 값;
데이터타입* 포인터이름 = &변수이름; // 위아래 데이터타입은 같아야 한다.

일단 포인터 변수를 정의할 때 * 을 반드시 데이터타입에 붙일 필요는 없지만,
이쪽이 권장되기 때문에 다른 경우는 깊게 신경쓰지 않기로.

string* mystring;
string *mystring;
string * mystring; // 셋 다 똑같다

Dereference

앞서 나온 참조포인터 기능의 응용으로,
* 연산자를 다시 사용해 "역참조" 기능으로 변수의 값을 찾을 수 있다.

데이터타입 변수이름 = 값; // 변수 작성
데이터타입* 포인터이름 = &변수이름; // 포인터 생성

cout << 포인터이름 // 이건 아까 나온 '메모리 주소'
cout << *포인터이름 // 이건 '포인터로 지정한 변수의 값'

같은 * 연산자가 사용되서 헷갈릴 수 있으니 주의

  • 무언가를 정의 하는 부분에 사용된 경우 포인터 변수의 정의
  • 그렇지 않은 경우 역참조 연산자

포인터 수정

포인터 의 값을 평소에 변수 덮어쓰기 하듯이 수정해줄수 있는데,
다만 이러한 경우에는 원래 원본 변수의 값도 같이 변해버린다.

profile
내일배움캠프 Unreal 3기

0개의 댓글