서론
C++ 에서는 auto라는 keyword가 있다.
쉽게 설명하자면, 타입을 명시적으로 쓰지 않아도, 코드에 맞게 자료형을 추론해주는 키워드이다.
C#에서는 var 변수가 위 설명된 auto와 명시적으로 정의를 해주지 않는다는 점에서는 동일합니다.
저에게는 var 변수가 더 익숙하기에 auto에 대해 이해를 할 때 var와 비슷한 역할을 한다는 정의를 보았을 때 이해가 빨랐습니다.
auto 키워드는 컴파일러가 컴파일 하는 과정에서 자료형을 결정해주기 때문에,
반드시 선언과 동시에 초기화를 해주어야한다.
아래의 이미지를 보자.
또한 컴파일 과정에서 자료형을 결정해준다는 것은 자칫 잘못하면 해당 자료형의 추적이 어려울수도 있고, 직관성이 떨어질 수도 있다.
아래 이미지를 보자. 컴파일 과정에서 자료형을 결정 해주기에, 길어지는 코드에선 헷갈릴 수도 있다.
그리고 C++에서는 참조를 받는 경우가 많다. 또한 포인터 역시 사용이 가능하다.
이런 경우가 있다.
Object* test = new Object;
auto ptest = test;
위의 두 코드는 동일한 포인터이다. 비록 auto에서 포인터(*)를 사용하지 않았어도, 동일한 포인터이다.
포인터를 쓸 경우에는 가독성이 굉장히 좋지않다.
하지만 반복문을 사용 할 경우에는 일일히 적지 않고 단순하게 적을 수 있어 편리하다.
아래 이미지를 보자. C#에서의 foreach와 비슷한 형태를 띈다.
코드가 줄어든다 하나, 가독성이 굉장히 안좋아지는 단점과 비교하였을때,
정말 적절할 경우에만 사용하는것이 좋아보인다.
실제로 내가 코드를 짤 때에는 어떠한 기능을 수행하는 함수 안에서만
var를 사용하고, 해당 변수 var의 자료형에 따라 그 함수를 빠져나오기 전 다시 초기화를 해준다.
결론
- auto keyword는 포인터를 사용 할 경우 가독성이 굉장히 떨어진다.
- auto 키워드를 참조로 받을 경우 복사하거나 대입과는 다르기에, 컴파일러 단계에서 알아채기 힘들기에 & 연산자를 붙여줘야한다.
- 반복문이나 기타 상황에 따라 사용하면 유용하게 쓸 수 있다.
프로젝트가 좀 크고, 여러사람이 붙어서 협업하는 경우 안쓰는게 낫다고 본다.
'🔥 Programming > C++' 카테고리의 다른 글
[C/C++] 동적할당 malloc, calloc, realloc들의 차이란? (0) | 2023.01.10 |
---|---|
[C/C++] C++ 벡터 사용시, () 선언과 [] 선언의 차이 (0) | 2022.10.14 |
[C/C++] C++ 배열 초기화 (std::fill_n, std::fill, memset) (0) | 2022.10.13 |
[C/C++] C++ ios_base::sync_with_stdio(false), cin.tie(0) (0) | 2022.08.19 |