오버로딩을 사용하지 않고 구현을 하면 이와 같이 배열을 구현할 수 있다. ()표시나 [] 표시등이 많아서 뭔가 사용하기가 번거롭기도 하는 부분이 생겨서 이를 오버로딩으로 바꿔서 표현하는 방식을 알아보자.
기존의 길었던 코딩을 정말 간략하게 구현할 수 있다는 것을 보여준다.
여기서 &인 reference를 사용하여 구현하는 이유는 값을 넣기도 하고 값을 보여주기도 하기 위해 &을 사용하여 구현한다.
하지만 간혹 const를 사용하여 operator를 구현하는 경우가 있다.
당연히 const로 선언을 했으니 이와 같은 compiler 오류가 나는 것은 당연하다. 값을 바꾸는 것은 불가능하므로 출력만 해주는 프로그램이 될 수 밖에 없다. 이처럼 초기화까지 해주면 제대로 동작하는지 확인 가능하다.
하지만 배열을 사용할 때에는 assert 문을 사용하여 구현하는 것이 좋다. 이처럼 구현해줘야 디버깅 하는데 편할 수 있다.
if문으로 걸어도 되지만, 보통 subscript operator(첨자 연산자) 같은 경우에는 엄청 많이 쓰려고 구현다보니 if문을 남발하면 전체적으로 속도가 느려지는 단점이 있다. 따라서 inline을 사용하여 구현하는 방법도 있다.
만약 class를 동적할당으로 구현하고 포인터를 사용해 구현하고 싶다면 이것에 대한 차이점을 알아야 한다.
list는 하나의 포인터가 되므로 operator에 접근하기 위해선 list -> operator()로 접근이 가능하다. 따라서 list[3] = 10;과 같은 형태로는 당연히 오류가 나는 것이고 이에 접근하기 위해서는 해당 operator을 갖고 있는 것으로 접근하여 즉, (*list)[3] = 10으로 구현이 가능한 것이다.