이번에는 매개변수가 아닌 반환값에 대해 알아보도록 하겠다.
근데 만약 이런 간단한 프로그램이면 모르겠으나, 추후에 클래스등을 이용하여 거대한 작업을 해야한다면 이런 여러개의 변수를 만들어 return하는 것은 속도 측면에서 안좋을 수 밖에 없다. 그땐 좀더 생각하며 코딩해야 한다.
주소값을 리턴받을 경우에는 안 좋은 2가지 경우가 있다. 왼쪽의 경우에는 값에 포인터를 넣는 경우, 오른쪽의 경우에는 dereferencing하는 경우. 하지만 이들은 단점을 갖는다.
오른쪽의 경우에는 크게 문제되진 않지만, 권장하지 않는다. 그 이유는 함수안의 value가 scope를 벗어나면 사라지게 되는데, 이를 dereferencing하는 것은 안전하지 않다.
왼쪽의 경우는 훨씬 더 위험하다. 왜냐하면 변수는 사라졌는데, 메모리 주소만 알고있는 형태가 되어 버리는 것이다. 더 권장하지 않는다.
간혹 특이한 방법으로 주소를 리턴하는 방법이 있는데,이처럼 사용한다. 지금은 이 내용이 뭔지 모르는게 당연하다. 추후에 객체지향을 배운 다음에 다시 설명할 날이 있을 것!
하지만 이것도 위험성이 있는데, new가 있으면 delete가 있어야 하는데, delete를 main문에다가 해줘야하는 경우가 생긴다. 이렇게 되면 왔다갔다 해야해서 프로그래밍 가독성을 떨어뜨린다.
참조로 사용하여 반환받으면 어떤 일이 생길까?
아래의 경우처럼 array를 사용하여 return 하는 경우가 아주 많다. 배열은 주소인데, main문에 저런식으로 메모리가 완전히 잡혀있는 상태에서 사용하면 문제점이 없다.
이와 같이 사용할 수 있다. 하지만 이는 단점이 너무 명확하다. 구조체 하나당 한개이상의 함수가 필요하다는 것이다.