reference와 pointer는 각각 어떤 때 쓰나요?

조회수 3747회

referencepointer를 어떻게 쓰는 건지는 알고 있습니다. 제가 알고 싶은 건 referencepointer를 쓰는 것 중 어느 것이 더 적절한지입니다.

어떤 경우에는 이게 정해져 있는데(++ 연산자는 reference만 쓰는 등) 안 정해져 있는 경우 보통은 변수가 중간에 바뀌는 경우는 보통 다들 포인터를 쓰더라구요.

소스코드

void add_one(int& n) { n += 1; }
void add_one(int* const n) { *n += 1; }
int main() {
  int a = 0;
  add_one(a); // a가 바뀌는지 안 바뀌는지 모름. a = a+1일 수도 있지만 a+1이 return될 수도?
  add_one(&a); // a가 바뀔 것이라 예상 됨
}

레퍼런스를 쓰는 것 보다 포인터를 쓰는 게 지금 뭘 하고 있는 건지 확실하게 알 수 있으니까 뭘 하는지 분명하게 전달하려면 레퍼런스보다 포인터를 쓰는 게 더 나은 방법인가요? 그러면 레퍼런스는 정말 필요할 때만(++연산자) 써야 하나요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    포인터는 가급적이면 안 쓰는 것이 좋습니다.

    포인터를 쓰면 코드를 읽는 것도 따라가기도 힘들어집니다. 이런 코드는 안전하지 않습니다. 나중에 예기치 못한 상황이 발생할 수 있으니까요.

    그러니 제일 좋은 방법은 다른 방법이 없겠다 싶을 때에만 포인터를 쓰는 겁니다. 예를 들어, 함수가 nullptr을 return할 수 있는 경우에는 포인터를 return해야만 합니다.

    질문하신 코드에서는 다음과 같은 이유로 pointer를 쓸 필요가 없습니다. pointer를 인자 값으로 받는다는 뜻은 nullptr을 인자로 받을 수 있고, nullptr에서도 함수가 잘 작동한다는 뜻으로 받아들여집니다.

    그런데 질문하신 코드에서는

    1. null pointer을 인자로 넘기면 undefined-behaviour인 반면
    2. reference는 1의 상황을 허용하지 않음
    3. reference를 쓰는 경우가 유저에게 더 이해하기 쉬움 - 유저에게 null이 아닌 object만을 써야 한다는 걸 알려줌

    이므로 reference를 쓰는 게 좋습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)