포인터에 대한 참조의 가장 큰 이점 중 하나는 더 큰 단순성과 가독성입니다. 항상 그렇듯이 무언가를 단순화하면 사용하기가 더 쉬워 지지만 유연성과 제어를 희생시키면서 낮은 수준의 물건을 얻을 수 있습니다 (다른 사람들이 언급했듯이).
포인터는 종종 '추악'하다는 비판을받습니다.
class* myClass = new class();
이제 사용할 때마다 먼저 역 참조해야합니다.
myClass->Method() or (*myClass).Method()
약간의 가독성을 잃고 복잡성을 추가 함에도 불구하고 사람들은 여전히 포인터를 매개 변수로 자주 사용하여 값으로 전달하는 대신 실제 개체를 수정할 수 있고 거대한 개체를 복사 할 필요가없는 성능 향상을 위해 여전히 필요했습니다.
나에게 이것이 포인터와 동일한 이점을 제공하지만 모든 포인터 구문이없는 참조가 처음에 '태어난'이유입니다. 이제 실제 객체 (그 값뿐만 아니라)를 전달할 수 있으며 객체와 상호 작용하는 더 읽기 쉽고 일반적인 방법이 있습니다.
MyMethod(&type parameter)
{
parameter.DoThis()
parameter.DoThat()
}
C ++ 참조는 C # / Java 참조와 다른 점에서 값을 할당하면 다시 할당 할 수 없으며 선언 할 때 할당해야합니다. 이것은 const 포인터 (다른 개체를 다시 가리킬 수없는 포인터)를 사용하는 것과 동일합니다.
Java와 C #은 수년에 걸쳐 C / C ++에 축적 된 많은 혼란을 정리 한 매우 높은 수준의 최신 언어이며 포인터는 분명히 '정리'해야하는 것들 중 하나였습니다.
포인터를 아는 것에 대한 귀하의 의견이 당신을 더 강력한 프로그래머로 만드는 한, 이것은 대부분의 경우에 해당됩니다. 당신이 모르는 사이에 그냥 사용하는 것과는 반대로 어떤 것이 '어떻게'작동하는지 안다면 나는 이것이 종종 당신에게 우위를 줄 수 있다고 말할 것입니다. 항상 변하는 가장자리의 양. 결국 구현 방법을 모른 채 무언가를 사용하는 것은 OOP 및 인터페이스의 많은 아름다움 중 하나입니다.
이 특정 예에서 포인터에 대해 아는 것이 참조에 도움이되는 것은 무엇입니까? C # 참조가 개체 자체가 아니라 개체를 가리키는 것을 이해하는 것은 매우 중요한 개념입니다.
# 1 : 값으로 전달하지 않습니다
. 포인터를 사용할 때 포인터가 주소 만 보유하고 있다는 사실을 알 수 있습니다. 그게 다입니다. 변수 자체는 거의 비어 있으므로 인수로 전달하는 것이 좋습니다. 성능 향상 외에도 실제 개체로 작업하므로 변경 사항이 일시적이 아닙니다.
# 2 : 다형성 / 인터페이스
인터페이스 유형 인 참조가 있고 객체를 가리키는 경우 객체가 더 많은 능력을 가질 수 있더라도 해당 인터페이스의 메서드 만 호출 할 수 있습니다. 객체는 동일한 메서드를 다르게 구현할 수도 있습니다.
이러한 개념을 잘 이해한다면 포인터를 사용하지 않아서 너무 많이 놓치고 있다고 생각하지 않습니다. C ++는 가끔 손을 더럽히는 것이 좋기 때문에 프로그래밍을 배우는 언어로 자주 사용됩니다. 또한 낮은 수준의 측면으로 작업하면 현대 언어의 편안함을 높이 평가할 수 있습니다. 저는 C ++로 시작했고 이제는 C # 프로그래머이며 원시 포인터로 작업하면서 내부에서 진행되는 작업을 더 잘 이해하는 데 도움이 된 것 같습니다.
모든 사람이 포인터로 시작할 필요는 없다고 생각하지만, 중요한 것은 값 유형 대신 참조가 사용되는 이유를 이해하고이를 이해하는 가장 좋은 방법은 조상 인 포인터를 보는 것입니다.