보통 우리가 반복문을 작성할 때, for문을 사용하거나 while문을 사용하는데, for-each문은 도대체 무엇인가? C에서도 따로 배운적이 없었다.
우리가 알고 있던 For문과는 확연히 다르다. const auto &number : fibonacci
이처럼 구현을 하면 주석에 써있는 그대로 number에는 fibonacci 배열의 element들이 하나씩 들어가서 출력하게 된다. 뭔가 기본의 for문보다 더 편한 이 느낌은 무엇인가...
그럼 fibonacci 배열 안의 element를 바꾸어 출력해본다면? 바뀌지 않는다....? 뭐지 왜 안바뀌지? 이는 함수의 매개변수처럼 작동하는 개념이다. 따라서 for문밖으로 나오면 내부에서 계산을 아무리 했더라도 본래의 값을 잃어버린다. 매우 중요하다. 따라서 reference variable을 사용하여 for문을 사용하면 값이 바뀌는 것을 볼 수 있다.
fibonacci 배열에서 가장 큰 값을 출력하는 프로그램인데, 예전 같은 경우에는 이를 for문으로 좀더 길게 코드를 작성했던 기억이 난다. 하지만 라이브러리의 발전을 통해 코드가 진짜 정말 깔끔해지고 있다.
for-each문을 사용할 수 없을 때가 있는데, array를 동적 할당으로 불러오게 되면 for-each문은 사용할 수 없다. 무조건 미리 할당을 받아야 가능한 건가 싶다. 무조건 compile runtime에서 한번 거쳐야 가능한 것 같다. 쩝.. 하지만, 다른 좋은 기능이 있는데 그것이 바로 #include <vector>
이다. 나중에 좀더 상세히 설명하겠지만 어떤 기능인지 살짝 얘기를 하자면 다음과 같다.
위에서 우리가 배열을 선언하여 작성한 방식과 vector을 include하여 사용하는 방식은 동일한 출력을 내보낸다. 뒤에 상세하게 더 설명하겠지만, 객체 지향을 하거나 동적할당을 할 경우에 이 vector는 아주 편하게 사용할 수 있도록 std에 들어가 있으므로 지금은 제대로 몰라도 된다.
다시 for-each문으로 돌아오자. for-each문 같은 경우에는 array를 동적할당으로 받아와서 사용할 수가 없다고 했다. 그렇다면 동적할당 array 대신 vector을 사용할 수 있다면 vector을 사용하여 for-each문으로 작성할 수 있다는 것인가? 나의 대답은 그렇다 라고 할 수 있다.
vector를 사용한다는 것은 동적할당으로써 사용한다는 것이므로 os에게 자료형의 size를 빌려와 메모리를 잠시 빌려오는 것에 해당한다. 일반 new를 사용해서 for-each문을 돌릴 수 없으므로 vector에 대한 사용법은 알고 있어야 한다.