본문 바로가기
IT/Teckweek

반복자 패턴(Iterator Pattern)

by YEON-DU 2021. 3. 27.
반응형

나는 왜... 시험이 끝나고나서야 개념 정리를 하는 걸까..?

슬프니까 바로 정리해봅니다...

 

C++ 개념에서 최근에 G가 물어본 적이 있었다.

.과 ->의 접근 방식 차이었는데, 포인터로 접근할 건지, 다이렉트로 접근할 건지 차이 아닌가? 하면서 대충 넘겼던 기억이 난다. 이게 무슨 데드 플래그도 아니고 그때 나도 다시 한번 찾아봤더라면 기억했을 것 같은데 하하

 

더보기

접근법에 대해 먼저 간단히 짚고가자면,

 

1. -> for accessing object member variables and methods via pointer to object

Foo *foo = new Foo();
foo->member_var = 10;
foo->member_func();

-> (arrow operator)는 객체를 가리키는 포인터를 통해 멤버 변수나 함수에 접근하는 경우이다.

 

2. . for accessing object member variables and methods via object instance

Foo foo;
foo.member_var = 10;
foo.member_func();

. (dot operator)는 참조를 통해 멤버 변수나 함수에 접근하는 경우이다.

 

3. :: for accessing static variables and methods of a class/struct or namespace.

It can also be used to access variables and functions from another scope (actually class, struct, namespace are scopes in that case)

int some_val = Foo::static_var;
Foo::static_method();
int max_int = std::numeric_limits<int>::max();

:: 는 정적 변수나 함수에 접근하는 것이다. 또한 다른 범위(다른 클래스, 구조체, 네임 스페이스 등)에 접근하는 것을 말한다.

 

참고자료 :

stackoverflow.com/questions/11902791/what-is-the-difference-between-and-in-c

 

출처 : 반복자 패턴

 

보통 C++에서 map이나 set을 사용하다보면, for문 내에서 iterator을 자주 사용하게 된다.

혹은 vector 정렬을 위해 sort 함수를 사용할 때에도 begin() 이나 end() 함수 반환하는 값 또한 iterator이다.

이처럼 iterator는 어떠한 객체를 가리키고 있는 일종의 cursor 역할을 한다.

 

이런 반복자iterator를 사용하는 이유는 바로,

 

컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공하기 위해서 사용한다.

예시로는 C++ STL의 Iterator, javaj.utill.Collection 내의 Iterator 메소드 등이 있다.

 

결국은 객체 지향의 '캡슐화' 적인 부분에 중요한 요소라는 것이다.

하지만 역으로 순회하는 알고리즘의 구현부에 따라서 해당 원칙을 위배할 수도 있기 때문에 주의해야 한다.

또한, Iterator는 '객체' 이므로 C++ 내에서는 힙 메모리 해제에 유의해야 한다.

반응형

'IT > Teckweek' 카테고리의 다른 글

Reactive Programing이란?  (0) 2021.04.28
프로세스와 스레드  (0) 2021.04.25
Debounce / Throttle  (0) 2021.03.18
어노테이션Annotation  (0) 2021.02.09
딥 링크Deep Link  (0) 2021.02.05

댓글