Java의 포인터 소개

Haider Ali 2023년10월12일
  1. 자바의 포인터
  2. Java에 포인터 없음
  3. 대안: Java 언어 참조
  4. Java에서 참조를 포인터로 사용하는 단점
Java의 포인터 소개

오늘은 자바에서 포인터에 대해 알아보고 포인터를 사용하여 이점을 얻을 수 있는 방법에 대해 알아보겠습니다. 그렇지 않다면 대안은 무엇입니까?

이 기사에서 이러한 모든 우려에 답할 것입니다. 또한 포인터를 C 및 C++라는 다른 언어와 비교할 것입니다.

자바의 포인터

아시다시피 포인터는 메모리 주소를 저장하는 객체입니다. 주소 관리 및 메모리 할당에 편리하지만 언어에 포인터 산술이 있는 경우에만 작동합니다.

일반적으로 언어에는 포인터 산술이 사전 프로그래밍되어 있지만 Java에서는 그렇지 않습니다. 따라서 Java 언어에 포인터 개념이 없다는 것이 약간 충격적으로 들릴 수 있습니다.

대신 Java 언어에는 포인터로 참조가 있습니다. 포인터를 참조라고 부를 수 있지만 참조는 포인터가 아니므로 그 반대도 마찬가지입니다.

이 가이드의 추가 예제를 통해 이 개념을 자세히 살펴보겠습니다.

Java에 포인터 없음

대다수는 자바가 포인터 없이 더 낫다고 주장합니다. 아래에 언급된 이유 때문입니다.

  1. 산술 - 위에서 언급했듯이 포인터는 산술을 사용하여 작동합니다. 게다가 포인터는 근본적으로 안전하지 않은 메모리 관리와 함께 작동합니다.

    많은 사람들이 그렇지 않다고 주장하겠지만 사실 포인터가 메모리에 액세스하도록 하는 것은 안전하지 않습니다. 이러한 이유로 Java는 포인터 산술을 지원하지 않습니다. 그리고 추가 메모리가 사용되지 않습니다.

  2. 조작 - 사용자가 포인터를 오용하기 쉽습니다. 포인터를 통해 개체를 조작하는 것도 매우 위험합니다. 대체로 Java는 객체 지향 프로그래밍에서 포인터를 필요로 하지 않습니다.

    또한 Java 언어에 포인터를 추가하면 불필요하게 복잡도가 높아집니다.

대안: Java 언어 참조

위에서 언급했듯이 포인터 개념은 Java에서 사용할 수 없습니다. 따라서 포인터 대신 포인터와 동일하게 작동하는 참조가 사용됩니다.

포인터라는 용어는 C 및 C++ 언어를 가리킵니다. Java에서는 포인터를 사용할 수 없으므로 참조라는 대체 방법이 사용됩니다. 언급했듯이 참조는 포인터와 동일하게 작동하지만 사용법은 약간 다릅니다.

참조가 사용되면 함수를 사용하여 수행됩니다. 참조의 복사본은 개체를 호출하는 데 사용되는 함수의 스택에 복사되며 원하는 대로 개체를 조작할 수 있습니다.

사용자가 포인터를 사용하고 싶어도 참조를 자유롭게 사용할 수 있습니다. 다음은 Java에서 참조의 사용을 설명하는 예입니다.

class Shape {
  int length;
  int breadth;
}

public class ShapesUse {
  public static void main(String args[]) {
    /*
    Here, an example1 is used as a reference variable.
    Which means it holds the address of the Shapes object
    */
    Shape example1 = new Shape();

    /*
    example2 is another reference variable used,
    and example2 is initialized with example1
    example1 and example2 reference the same object,
    so no duplication and extra memory are used.
    */
    Shape example2 = example1;

    example1.length = 10;
    example2.breadth = 26;

    System.out.println("length of example 1 is: " + example1.length);
    System.out.println("breath of example 1 is: " + example2.breadth);
  }
}

이 예에서는 example1example2가 참조로 사용됩니다. 그것은 그들이 모양이라는 객체의 주소를 가지고 있고, 이 객체를 통해 길이넓이가 호출되기 때문입니다.

이 프로그램 외부에서 이러한 참조를 사용할 수 없음을 기억하십시오. 다음은 위 코드의 출력입니다. 보시다시피 참조가 원하는 대로 작동합니다.

출력:

length of example 1 is: 10
breath of example 1 is: 26

Java에서 참조를 포인터로 사용하는 단점

Java 언어에 포인터가 없는 몇 가지 단점을 살펴보겠습니다.

  1. 명시적 사용 - 참조를 포인터로 사용할 수 있지만 단점이 있습니다. 참조를 명시적으로 사용할 수 없습니다. Java 프로그램의 범위 밖에서는 이러한 포인터를 사용할 수 없습니다.

    참조를 사용하여 수행되는 모든 작업은 암시적이므로 표시되지 않습니다. 명시적으로 수행할 수 있는 리소스에 액세스하는 데 포인터가 사용되기 때문에 상당히 불리합니다.

    C 프로그래밍에서는 포인터의 주소를 빼거나 더하여 사물을 가리킬 수 있습니다. 그러나 Java에서 참조는 한 가지만 가리킬 수 있습니다.

  2. 엄격한 제어 - 참조는 C 또는 C++보다 훨씬 더 엄격하게 제어됩니다. 안타깝게도 이는 유형 캐스팅을 사용할 수 없음을 의미합니다.

    그러나 포인터에서는 예를 들어 intchar로 캐스트할 수 있습니다. 그러나 Java에서 참조는 동일한 유형의 객체만 가리킬 수 있습니다. 예를 들어 string 유형의 개체에 대한 string 참조만 사용할 수 있습니다.

작가: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn