-
Notifications
You must be signed in to change notification settings - Fork 10
/
0005.txt
12 lines (10 loc) · 3.88 KB
/
0005.txt
1
2
3
4
5
6
7
8
9
10
11
12
처음 비디오를 찍을 때 몇 가지 짧게 시리즈를 만들어 보려고 했던 것이 있어요. 그 중에 하나가 제가 사용하는 C++ 11의 기능들인데요... C++이 계속해서 표준(Standard)이 바뀌어가면서 새로운 기능들이 추가가 되잖아요? 근데 저는 그런 기능들을 별로 많이 쓰는 편이 아니에요. 예전에 있던 표준, 새로 바뀌었던 표준은 코드 가독성을 좋지않게 만드는 부분이 많아서 상당히 안 좋아했고요(질색팔색), 그리고 한동안 5~6개의 하드웨어 플랫폼을 동시 개발할 때는 최신의 표준이 지원되지 않는 경우도 많았는데 지금 만드는 게임은 Xbox One하고 PlayStation4, PC 정도이기 때문에 웬만하면 모던 컴파일러를 사용하구요, 요즘 나오는 C, C++ 표준들은 예전보다 많이 간결해지고 유용한게 많아서 쓰고 있는 게 좀 있어서 그런 것들을 하나씩 소개 해 드릴려고 해요.
제가 C++ 11에서 나왔던 기능 중에서 가장 먼저 쓰기 시작했던 것이 auto인데 예를 들어 int i = 0라고 선언된 변수가 있고, i를 다른 변수에 대입한다고 하면 int j = i 이런 식으로 가는 대신 auto j = i 이렇게 하면은 자동적으로 컴파일러(Compiler)가 'i가 원래 정수 형이었으니까 j도 정수 형이구나'라고 알아서 컴파일 해 주는게 auto에요.
자바 스크립트 같은 경우는 굳이 변수 형을 정해 주질 않잖아요? 숫자가 문자열로 바뀌기도 하고 문자열이 숫자로 바뀌기도 하고 코드를 진행하면서 중간에 변수형이 바뀌어도 돼요. 이런 자바스크립트와는 달리 C++에서 제공하는 auto는 다른 형으로 바뀔 순 없어요. 앞에서 i와 j도 언제나 정수인 거죠.
이 auto 장점은 뭐냐면 만약 나중에 int 값, i를 int에서 16비트 short로 바꿀려고 한다면 auto를 사용하지 않았다면 j도 short로 바꿔야 하기 때문에 대입되는 모든 코드를 찾아 바꾸기를 해야 하잖아요? 하지만 auto를 쓰면 그럴 필요가 없는 거죠.
또 하나의 장점은 벡터나 STL 컨테이너에서 반복자가 사용될 때 :: iterator ::만 해도 이게 벌써 20~30자 가까이 되거든요? 되게 복잡하고 칠때마다 짜증도 유발하는데 이걸 auto만 쓰면 알아서 대입이 되기 땜에 귀찮은 타이핑을 줄일 수 있다는 장점이 있는 거죠.
단점은 '이게 무슨 형이지?' 라고 알고 싶을 때가 있을 때 auto만 사용한 코드에서는 바로 파악이 힘들어요. 하지만 이건 비주얼 스튜디오(Visual Studio) 같은 IDE에서 마우스 커서만 올려도 웬만한 정보를 다 알려 주기 때문에 이제는 크게 단점이 되지 않는다고 봐요.
그리고 지금은 이해 되었지만, 처음 auto를 쓰면서 한 가지 조금 헷갈리던게 있었는데, auto는 3가지 형식을 대입할 수가 있어요.
1. auto에 변수를 그대로 대입하는 방법 : int i일 때 그걸 auto에 대입하면 auto는 i가 되겠죠
2. int* i (포인터 변수)일 때 auto*로 받아야 되는지 auto로 받아야 되는지 : 포인터도 그냥 auto로써주면 끝
3. 참조(reference) : 예를 들어서 어떤 함수가 int& 를 반환을 한다 그랬을 때 저는 처음엔 그냥 다 auto로 해결이 될 줄 알았는데 그건 아니더라구요. 그런 경우에는 auto&을 해줘야 제대로 대입이 돼요. 근데 생각해 보면 이게 맞는 게 참조를 변수에 대입해 줄 때도 int&를 일반 int에 저장을 하면은 이게 복사가 일어나기 때문에 복사를 방지하려면, int& 해 주고 대입을 해줘야만 되는 거고 그래서 auto도 똑같은 것 같아요. 개인적으로는 별로인 부분인데 개선 할 방법은 안 보이기 때문에...그래서 이제 제가 첫번째 쓰는 C++11의 기능은 auto였습니다!