반응형
안녕하세요? 수구리입니다!
지난 포스팅에서는 연산자들에 대하여 알아보았는데요~
이번 시간에는 타입에 관련된 내용들입니다! 바로 시작하겠습니다.
오타 또는 잘못된 내용이 있다면 알려주시면 감사하겠습니다. ( _ _ ) 꾸벅
- C++ 에서는 기본 타입을 조합해서 더 복잡한 타입을 정의할 수 있다.
- C언어에서도 사용하던 것으로 소개.
- 다른 사람이 작성한 코드를 이해하기 위해서 알아두자 !
1. 열거 타입 (enum)
- 숫자를 나열하는 방식과 범위를 마음대로 정의해서 변수를 선언하는데 활용
// const로 값이 변하지 않도록 정의
const int PieceTypeKing = 0
const int PieceTypeQueen = 1;
const int PieceTypeRook = 2;
const int PieceTypePawn = 3;
// 기타
int myPiece = PieceTypeKing;
- enum type을 적용하면 변수에 지정할 수 있는 값의 범위를 엄격하게 제한
// 변수가 네 가지 값만 가질 수 있도록 제한
enum PieceType{
PieceTypeKing,
PieceTypeQueen,
PieceTypeRook,
PieceTypePawn
};
- enum을 구성하는 멤버는 내부적으로 정수값을 갖는다.
- 위의 예시에서는 King부터 0 ..
- 위의 변수에 대해 사칙연산을 수행하면 컴파일 경고 또는 에러 메시지 발생.
// error 발생
PieceType myPiece;
myPiece = 0;
- enum을 정의할 때 각 멤버에 정숫값 지정 가능
// PieceTypeQueen은 2, PieceTypePawn은 11의 값을 갖게 된다.
enum PieceType {
PieceTypeKing = 1,
PieceTypeQueen,
PieceTypeRook = 10,
PieceTypePawn
};
2. 엄격한 열거 타입
- 스트롱 타입 : 엄격하게 타입을 따지는 것. 타입에 안전하다고 표현함.
- 엄격하게 타입을 적용하고 싶다면? enum class 사용.
// type safe ver.
enum class PieceType{
King = 1,
Queen,
Rook = 10,
Pawn
};
- 스코프가 자동으로 확장되어지지 않으므로 해당 enum class 스코프 안에서만 유효.
// 스코프 지정 연산자를 붙여야 함.
PieceType piece = PieceType::King;
- enum class로 정의한 타입 값은 정수로 타입이 변환되어지지 않는다. 따라서 다음은 잘못된 표현
if (PieceType::Queen == 2) { ... }
// 올바른 표현
static_cast<int>(PieceType::Queen)
열거 타입을 사용할 때는 type-unsafe한 enum 보다는 type-strong 버전인 enum class를 사용하는 것이 좋다.
3. 구조체
- 구조체를 사용하면 기존의 정의된 타입을 한 개 이상 묶어서 새로운 타입으로 정의가 가능하다.
- 구체적인 예로 DB Records가 있다.
// 직원 정보 관리 시스템 구축하기 위한 직원의 정보
// employeestruct.h
struct Employee {
char firstInitial;
char lastInitial;
int employeeNumber;
int salary;
};
// 직원에 대한 레코드를 생성한 뒤, 그 결과를 콘솔에 출력.
#include <iostream>
#include "employeestruct.h"
using namespace std;
int main() {
// 직원 레코드 생성 및 값 채우기
Employee anEmployee;
anEmployee.firstInitial = 'M';
anEmployee.lastInitial = 'G';
anEmployee.employeeNumber = 42;
anEmployee.salary = 80000;
// 저장된 값 출력
cout << "Employee: " << anEmployee.firstInitial << anEmployee.lastInitial << endl;
cout << "Number: " << anEmployee.employeeNumber << endl;
cout << "Salary: $" << anEmployee.salary << endl;
return 0;
}
이상으로 타입에 대하여 알아보았습니다!
다음 포스팅에서 만나요~
반응형
'🌈 프로그래밍 > C++' 카테고리의 다른 글
[C++] 1.1.8 논리 연산자 (0) | 2021.08.13 |
---|---|
[C++] 1.1.7 조건문 (0) | 2021.08.12 |
[C++] 1.1.5 연산자 (0) | 2021.08.12 |
[C++] 1.1.3 ~ 1.1.4 리터럴과 변수 (2) | 2021.08.11 |
[C++] 1.1.2 namespace (0) | 2021.08.10 |