typedef
์ ํ ๋ณ์นญ์ ์ ํ์ ์๋ณํ ์ ์๋ ๋ค๋ฅธ ์ด๋ฆ์
๋๋ค. C++์์๋ ๋ค๋ฅธ ์๋ณ์๋ก ์ฐธ์กฐํ ์ ์๋๋ก ๋ชจ๋ ์ ํจํ ํ์์ ๋ณ์นญ์ ์ง์ ํ ์ ์์ต๋๋ค.
C++์๋ ์ด๋ฌํ ์ ํ ๋ณ์นญ์ ์์ฑํ๊ธฐ ์ํ ๋ ๊ฐ์ง ๊ตฌ๋ฌธ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๊ตฌ๋ฌธ์ C ์ธ์ด์์ ์์๋๋ฉฐ ํค์๋ ๋ฅผ typedef์ฌ์ฉ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
typedef existing_type new_type_name ;
existing_typenew_type_name
typedef char C;
typedef unsigned int WORD;
typedef char * pChar;
typedef char field [50];
์ด๊ฒ์ ๊ฐ๊ฐ , , ๋ฐ as C, , ๋ฐ ์ ๋ค ๊ฐ์ง ์ ํ ๋ณ์นญ์ ์ ์ํฉ๋๋ค . ์ด๋ฌํ ๋ณ์นญ์ด ์ ์๋๋ฉด ๋ค๋ฅธ ์ ํจํ ์ ํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ์ ์ธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.WORDpCharfieldcharunsigned intchar*char[50]
C mychar, anotherchar, *ptc1;
WORD myword;
pChar ptc2;
field name;
๋ณด๋ค ์ต๊ทผ์๋ ์ ํ ๋ณ์นญ์ ์ ์ํ๋ ๋ ๋ฒ์งธ ๊ตฌ๋ฌธ์ด C++ ์ธ์ด์ ๋์ ๋์์ต๋๋ค.
using new_type_name = existing_type ;
์๋ฅผ ๋ค์ด ์์ ๋์ผํ ์ ํ ๋ณ์นญ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์์ต๋๋ค.
using C = char;
using WORD = unsigned int;
using pChar = char *;
using field = char [50];
๋ก ์ ์๋ typedef๋ณ์นญ๊ณผ ๋ก ์ ์๋ ๋ณ์นญ using์ ๋ชจ๋ ์๋ฏธ์ ์ผ๋ก ๋์ผํฉ๋๋ค. ์ ์ผํ ์ฐจ์ด์ ์ ๊ทธ๋ ์ง ์์ typedefํ
ํ๋ฆฟ ์์ญ์์ ํน์ ์ ํ์ด ์๋ค๋ ๊ฒ using์
๋๋ค. ๋ฐ๋ผ์ ์ด๋ ฅ์ด ๋ ๊ธธ๊ณ ๊ธฐ์กด ์ฝ๋์์ ๋ ์ผ๋ฐ์ ์ด์ง๋ง ๋ ์ผ๋ฐ์ ์
๋๋ค using. ์๋ก์ด ๊ณ ์ ๋ฐ์ดํฐ ์ ํ ์ ์์ฑ ํ๊ฑฐ๋ ์์ฑ ํ์ง ์์ต๋๋ค. ๊ธฐ์กด ์ ํ์ ๋์์ด๋ง ์์ฑํฉ๋๋ค. ์ด๋ type ์ผ๋ก ์ ์ธ๋ ์ ์ ์ ํ ๋ type ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค . ๋ ๋ค ์ค์ ๋ก ๋์ผํ ์ ํ์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ค์ํ์ง ์์ต๋๋ค.typedef
typedefusingmywordWORDunsigned int
ํ์ ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ๊ธธ๊ฑฐ๋ ํผ๋์ค๋ฌ์ด ํ์ ์ด๋ฆ์ ๊ธธ์ด๋ฅผ ์ค์ผ ์ ์์ง๋ง ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ํ์์์ ํ๋ก๊ทธ๋จ์ ์ถ์ํํ๋ ๋๊ตฌ๋ก ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ ๋ณ์นญ์ ์ฌ์ฉํ์ฌ intํน์ ์ข
๋ฅ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๋์ ์ฌ์ฉํ๋ฉด ํด๋น ๋งค๊ฐ๋ณ์ ๊ฐ ์๋ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์ดํ ๋ฒ์ ์์ ํด๋น ์ ํ int์ (๋๋ ๋ค๋ฅธ ์ ํ) ์ฝ๊ฒ ๋์ฒดํ ์ ์์ต๋๋ค . long์ฌ์ฉ.
Union
Union์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ํ ๋ถ๋ถ์ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ ์ธ ๋ฐ ์ฌ์ฉ์ ๊ตฌ์กฐ์ฒด ์ค ํ๋์ ์ ์ฌํ์ง๋ง ๊ธฐ๋ฅ์ ์์ ํ ๋ค๋ฆ ๋๋ค.
union type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
type_name์ด๊ฒ์ ๋ชจ๋ ๋ฉค๋ฒ ์์๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๋์ผํ ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ ๋ก ์๋ณ๋๋ ์๋ก์ด ๊ณต์ฉ์ฒด ์ ํ์ ๋ง๋ญ๋๋ค . ์ด ์ ํ์ ํฌ๊ธฐ๋ ๊ฐ์ฅ ํฐ ๋ฉค๋ฒ ์์ ์ค ํ๋์ ๋๋ค. ์๋ฅผ ๋ค์ด:
union mytypes_t {
char c;
int i;
float f;
} mytypes;
mytypes์ธ ๊ฐ์ ๋ฉค๋ฒ ๊ฐ ์๋ ๊ฐ์ฒด( )๋ฅผ ์ ์ธํฉ๋๋ค .
mytypes.c
mytypes.i
mytypes.f
์ด๋ฌํ ๊ฐ ๊ตฌ์ฑ์์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ํ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค ๋ชจ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์์น๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฉค๋ฒ ์ค ํ๋๋ฅผ ์์ ํ๋ฉด ๋ชจ๋ ๋ฉค๋ฒ์ ๊ฐ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ฐ๊ฐ์ด ์๋ก ๋
๋ฆฝ์ ์ธ ๋ฐฉ์์ผ๋ก ์๋ก ๋ค๋ฅธ ๊ฐ์ ์ ์ฅํ ์ ์์ต๋๋ค.
๊ณต์ฉ์ฒด์ ์ฉ๋ ์ค ํ๋๋ ๊ฐ ์ ์ฒด์ ์ก์ธ์คํ๊ฑฐ๋ ๋ ์์ ์์์ ๋ฐฐ์ด์ด๋ ๊ตฌ์กฐ๋ก ์ก์ธ์คํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด:
union mix_t {
int l;
struct {
short hi;
short lo;
} s;
char c[4];
} mix;
int์ด ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์์คํ
์ด ํฌ๊ธฐ๊ฐ 4๋ฐ์ดํธ์ด๊ณ ์ ํ ์ด 2๋ฐ์ดํธ์ธ ์ ํ ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด short์์์ ์ ์ํ ๊ณต์ฉ์ฒด๋ 4๋ฐ์ดํธ์ ๋์ผํ ๊ทธ๋ฃน์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉ mix.lํฉ๋๋ค . ์ด ๋ฐ์ดํธ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ: ๋ง์น ๊ทธ๊ฒ์ด type ์ ๋จ์ผ ๊ฐ์ธ ๊ฒ์ฒ๋ผ, ๋๋ ๊ฐ๊ฐ type ์ ๋ ๊ฐ์ธ ๊ฒ์ฒ๋ผ, ๋๋ ๊ฐ๊ฐ ์์ ์ ๋ฐฐ์ด์ธ ๊ฒ์ฒ๋ผ . ์ด ์์ ์์๋ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๊ณต์ฉ์ฒด์์ ์ ํ, ๋ฐฐ์ด ๋ฐ ๊ตฌ์กฐ๋ฅผ ํผํฉํฉ๋๋ค. little-endian ์์คํ
์ ๊ฒฝ์ฐ ์ด ๊ณต์ฉ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ์์ ๊ณต์ฉ์ฒด ๊ตฌ์ฑ์์ ์ ํํ ์ ๋ ฌ๊ณผ ์์๋ ์์คํ
์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ ์ด์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.mix.smix.cintshortchar
์ต๋ช ์ ์กฐํฉ
๊ณต์ฉ์ฒด๊ฐ ํด๋์ค(๋๋ ๊ตฌ์กฐ์ฒด)์ ๊ตฌ์ฑ์์ธ ๊ฒฝ์ฐ ์ด๋ฆ ์์ด ์ ์ธํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ต๋ช ๊ณต์ฉ์ฒด ๊ฐ ๋๋ฉฐ ํด๋น ๊ตฌ์ฑ์์ ํด๋น ๊ตฌ์ฑ์ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด์์ ์ง์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ๋ ๊ตฌ์กฐ ์ ์ธ์ ์ฐจ์ด์ ์ ํ์ธํ์ธ์.
structure with regular union
struct book1_t {
char title[50];
char author[50];
union {
float dollars;
int yen;
} price;
} book1;
structure with anonymous union
struct book2_t {
char title[50];
char author[50];
union {
float dollars;
int yen;
};
} book2;
๋ ์ ํ์ ์ ์ผํ ์ฐจ์ด์ ์ ์ฒซ ๋ฒ์งธ ์ ํ์์๋ ๋ฉค๋ฒ ๊ณต์ฉ์ฒด์ ์ด๋ฆ( price)์ด ์์ง๋ง ๋ ๋ฒ์งธ ์ ํ์์๋ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ฉค๋ฒ dollars๋ฐ yen์ด ์ ํ์ ๊ฐ์ฒด์ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ์ํฅ์ ์ค๋๋ค. ์ฒซ ๋ฒ์งธ ์ ํ์ ๊ฐ์ฒด(์ผ๋ฐ ๊ณต์ฉ์ฒด ํฌํจ)์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
book1.price.dollars
book1.price.yen
๋ฐ๋ฉด ๋ ๋ฒ์งธ ์ ํ์ ๊ฐ์ฒด(์ต๋ช ๊ณต์ฉ์ฒด ํฌํจ)์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
book2.dollars
book2.yen
๋ค์ ๋งํ์ง๋ง, ์ด๊ฒ์ ๋ฉค๋ฒ ๊ณต์ฉ์ฒด(๋ฉค๋ฒ ๊ตฌ์กฐ๊ฐ ์๋)์ด๊ธฐ ๋๋ฌธ์ ๋ฉค๋ฒ dollars์ yen์ค์ ๋ก ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๊ณต์ ํ๋ฏ๋ก ๋ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ ๋์์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ์์ price์ค์ ํ ์ ์์ง๋ง ๋์์ ๋ ๋ค์๋ ์ค์ ํ ์ ์์ต๋๋ค .dollarsyen
์ด๊ฑฐํ(enum)
์ด๊ฑฐํ ์ ๊ฐ๋ฅํ ๊ฐ ์ผ๋ก ์ด๊ฑฐ ์ ๋ผ๊ณ ํ๋ ์ฌ์ฉ์ ์ง์ ์๋ณ์ ์งํฉ์ผ๋ก ์ ์๋ ํ์์
๋๋ค . ์ด๋ฌํ ์ด๊ฑฐ ํ์ ์ ๊ฐ์ฒด๋ ์ด๋ฌํ ์ด๊ฑฐ ์๋ฅผ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
enum type_name {
value1,
value2,
value3,
.
.
} object_names;
์ด๋ ๊ฒ ํ๋ฉด , , , ... ์ค ํ๋๋ฅผ ๊ฐ์ผ๋ก type_name์ฌ์ฉํ ์ ์๋ ์ ํ์ด ์์ฑ ๋ฉ๋๋ค. ์ด ์ ํ์ ๊ฐ์ฒด(๋ณ์)๋ ๋ก ์ง์ ์ธ์คํด์คํํ ์ ์์ต๋๋ค . ์๋ฅผ ๋ค์ด, ๋ค์ ์ ์ธ์ผ๋ก ์์์ ์ ์ฅํ๋๋ก ์ด๋ผ๋ ์๋ก์ด ์ ํ์ ๋ณ์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.value1value2value3object_names
colors_t
enum colors_t {black, blue, green, cyan, red, purple, yellow, white};
์ด ์ ์ธ์ ์ ์์ ๊ธฐ๋ณธ ์ ํ๋ ๋ณตํฉ ์ ํ๋ ํฌํจํ์ง ์๋ ๋ค๋ฅธ ์ ํ์ ํฌํจํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ์์ผ๋ก ๋งํ๋ฉด, ์ด๊ฒ์ ๋ค๋ฅธ ๊ธฐ์กด ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์๊ณ ์ฒ์๋ถํฐ ์์ ํ ์๋ก์ด ๋ฐ์ดํฐ ์ ํ์ ์์ฑํฉ๋๋ค. ์ด ์๋ก์ด ์ ํ์ ๋ณ์ color_t๊ฐ ์ทจํ ์ ์๋ ๊ฐ๋ฅํ ๊ฐ์ ์ค๊ดํธ ์์ ๋์ด๋ ์ด๊ฑฐ์์ ๋๋ค. ์๋ฅผ ๋ค์ด colors_t์ด๊ฑฐํ์ด ์ ์ธ๋๋ฉด ๋ค์ ํํ์์ด ์ ํจํฉ๋๋ค.
colors_t mycolor;
mycolor = blue;
if (mycolor == green) mycolor = red;
๋ก ์ ์ธ ๋ ์ด๊ฑฐํ ์ ๊ฐ enum์ ์์์ ์ผ๋ก ์ ์ํ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ์ฌ์ค, ๊ทธ๋ฌํ ์์ enum๋ ํญ์ ๋ด๋ถ์ ์ผ๋ก ๋๋ฑํ ์ ์ ์ซ์๊ฐ ํ ๋น๋๋ฉฐ, ์ด๋ฅผ ํตํด ์์์ ์ผ๋ก ๋ณํ๋ ์ ์์ต๋๋ค. ๋ฌ๋ฆฌ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ๊ฐ๋ฅํ ๊ฐ์ ํด๋นํ๋ ์ ์ ๊ฐ์ 0, ๋ ๋ฒ์งธ์ ํด๋นํ๋ ๊ฐ์ , 1์ธ ๋ฒ์งธ์ ํด๋นํ๋ ๊ฐ์ 2์
๋๋ค... ๋ฐ๋ผ์ colors_t์์ ์ ์๋ ๋ฐ์ดํฐ ์ ํ์์ black๋ 0, , to ๋ฑ๊ณผ blue๊ฐ์ ๊ฒ ์
๋๋ค...1green2
์ด๊ฑฐํ์ ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ์ ๋ํด ํน์ ์ ์ ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ค์ ์ค๋ ์์ ๊ฐ ์์ฒด์ ์์ฒด ๊ฐ์ด ์ฃผ์ด์ง์ง ์์ผ๋ฉด ์๋์ผ๋ก ๋์ผํ ๊ฐ์ 1์ ๋ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด:
enum months_t { january=1, february, march, april,
may, june, july, august,
september, october, november, december} y2k;
y2k์ด ๊ฒฝ์ฐ ์ด๊ฑฐํ ์ ๋ณ์ ๋ ์์ ๋ก ์ด๋ ํ๊ณ ๋ฐ ์ฌ์ด ์ ๊ฐ์ ํด๋น months_tํ๋ 12๊ฐ์ ๊ฐ๋ฅํ ๊ฐ ์ค ํ๋๋ฅผ ํฌํจํ ์ ์์ต๋๋ค .januarydecember112011january1
์ด๊ฑฐํ ํด๋์ค๊ฐ ์๋ ์ด๊ฑฐํ
๊ทธ๋ฌ๋ C++์์๋ enum์์์ ์ผ๋ก ๋ณํํ int์ ์๊ณ type ์ ์ด๊ฑฐ์ ๊ฐ๋ ๊ฐ์ง ์๊ณ intํ์ enum์์ฒด์ ์ค์ ํ์์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ํ์ ์์ ์ฑ์ด ์ ์ง๋ฉ๋๋ค. ๋ค์ ๋์ enum class(๋๋ ) ์ผ๋ก ์ ์ธ๋ฉ๋๋ค .enum structenum
enum class Colors {black, blue, green, cyan, red, purple, yellow, white};
์ ํ ์ ๊ฐ ์ด๊ฑฐ์ ๊ฐ์ ํด๋น enum class์ ํ์ผ๋ก ๋ฒ์๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค(์ด๋ ์ค์ ๋ก enum์ ํ์์๋ ๊ฐ๋ฅํ์ง๋ง ์ ํ ์ฌํญ์ผ ๋ฟ์ ๋๋ค). ์๋ฅผ ๋ค์ด:
Colors mycolor;
mycolor = Colors::blue;
if (mycolor == Colors::green) mycolor = Colors::red;
๋ก ์ ์ธ๋ ์ด๊ฑฐ ํ์์ enum class๊ธฐ๋ณธ ํ์์ ๋ ๋ง์ด ์ ์ดํ ์๋ ์์ต๋๋ค. ๋ณธ์ง์ ์ผ๋ก ์ ํ์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ ์ญํ ์ ํ๋ char, short๋๋ ์ ๊ฐ์ ๋ชจ๋ ์ ์ ๋ฐ์ดํฐ ์ ํ์ผ ์ ์์ต๋๋ค . unsigned int์ด๊ฒ์ ์ฝ๋ก ๊ณผ ์ด๊ฑฐ ์ ํ ๋ค์์ ์ค๋ ๊ธฐ๋ณธ ์ ํ์ผ๋ก ์ง์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด:
enum class EyeColor : char {blue, green, brown};
์ฌ๊ธฐ์ Eyecolor๋ a char(1๋ฐ์ดํธ)์ ๊ฐ์ ํฌ๊ธฐ์ ๊ตฌ๋ณ ์ ํ์ ๋๋ค.
'๐ Development Study > ๐จ๐พโ๐ป C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํด๋์ค(2) (0) | 2022.08.19 |
---|---|
ํด๋์ค(1) (0) | 2022.08.19 |
๊ตฌ์กฐ์ฒด (0) | 2022.08.19 |
๋์ ๋ฉ๋ชจ๋ฆฌ (0) | 2022.08.19 |
ํฌ์ธํฐ (0) | 2022.08.19 |
๋๊ธ