같은편
홍익대 게임소프트웨어전공의 프로그래밍 단련 공간
같은편
깃허브 주소
https://github.com/madongchan
GitHub 아이콘
  • 분류 전체보기 (85)
    • 게임 프로그래밍 패턴 (2)
    • C# 프로그래밍 (26)
    • C++ 프로그래밍 (32)
      • 함수 (8)
      • 클래스 (22)
    • 알고리즘 공부 (2)
      • codingame 사이트 문제 (11)
    • 유니티엔진 - 게임 공부 (3)
    • 언리얼엔진 - 게임 공부 (4)
    • 쓸모 있을 수 있는 팁 (2)
    • 일상이야기 (3)

최근 댓글

태그

  • 람다식
  • 함수
  • 문제 풀이
  • 스레드
  • 예외 처리
  • 객체
  • queue
  • 비동기
  • 알고리즘
  • 탐욕 알고리즘
  • c++
  • 최단 경로
  • 언리얼
  • 언리얼엔진
  • 언리얼엔진4
  • 클래스
  • task
  • C#
  • DFS
  • 복사 생성자

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
같은편

홍익대 게임소프트웨어전공의 프로그래밍 단련 공간

[C++][C#] 클래스 객체 인스턴스 생성
C# 프로그래밍

[C++][C#] 클래스 객체 인스턴스 생성

2023. 2. 22. 17:38

C++에서 객체 인스턴스를 생성하는 방법

1. 스택에 정적으로 객체 인스턴스를 생성하는 방법

class MyClass {
public:
    int value;
};

int main() {
    // 객체 인스턴스 정적 생성
    MyClass myObject;

    // 정적으로 생성된 객체 인스턴스 사용
    myObject.value = 10;

    return 0;
}

위의 코드에서 MyClass의 객체 인스턴스를 정적으로 생성하려면, MyClass의 객체 이름인 myObject를 선언하면 됩니다. 이렇게 하면 myObject가 객체 인스턴스를 직접 생성하고, 객체의 메모리를 스택(stack)에 할당합니다.
 
정적으로 생성된 객체 인스턴스는 프로그램의 실행 중에 계속해서 메모리에 상주하며, 함수 내부에서도 사용할 수 있습니다. 이러한 객체는 함수의 실행이 끝나면 자동으로 파괴됩니다.
 
객체 인스턴스를 사용하려면, 연산자를 사용하여 멤버 변수에 접근할 수 있습니다. myObject.value는 myObject 객체 인스턴스의 value 멤버 변수를 나타냅니다.

2. 힙에 동적으로 객체 인스턴스를 생성하는 방법

class MyClass {
public:
    int value;
};

int main() {
    // 객체 인스턴스 동적 생성
    MyClass* myObject = new MyClass();

    // 동적으로 생성된 객체 인스턴스 사용
    myObject->value = 10;

    // 객체 인스턴스 해제
    delete myObject;
    return 0;
}

위의 코드에서 MyClass의 객체 인스턴스를 동적으로 생성하려면, new 연산자를 사용해야 합니다. new 연산자는 MyClass의 객체 인스턴스를 할당하고, 객체의 주소를 반환합니다. 이 주소는 MyClass의 포인터 변수인 myObject에 저장됩니다.
 
동적으로 생성된 객체 인스턴스를 사용하려면, -> 연산자를 사용하여 멤버 변수에 접근할 수 있습니다. myObject->value는 myObject가 가리키는 객체 인스턴스의 value 멤버 변수를 나타냅니다.
 
객체 인스턴스를 사용한 후에는 delete 연산자를 사용하여 해제해야 합니다. delete 연산자는 객체 인스턴스를 메모리에서 해제하고, 해당 객체의 포인터 변수를 nullptr로 설정합니다. 이렇게 함으로써, 더 이상 객체 인스턴스를 사용할 수 없게 됩니다.


C#에서 객체 인스턴스를 생성하는 방법

public class MyClass {
    public int value;
}

static void Main(string[] args) {
    // 객체 인스턴스 생성
    MyClass myObject = new MyClass();

    // 생성된 객체 인스턴스 사용
    myObject.value = 10;

    // ...
}

위의 코드에서 MyClass의 객체 인스턴스를 생성하려면, new 연산자를 사용해야 합니다. new 연산자는 MyClass의 객체 인스턴스를 할당하고, 객체의 참조를 반환합니다. 참조(reference)는 객체 인스턴스의 주소를 나타내는 값으로, 메모리 내에서 객체 인스턴스를 찾을 수 있는 포인터와 같은 역할을 합니다.
 
C#에서 복합데이터는 참조 형식으로 힙에 올라갑니다.
클래스는 여러 관점에서 그 의미를 이해해야 합니다. 객체 지향적인 관점에서 보면 클래스는 객체를 위한 청사진인 동시에 데이터와 메소드를 묶는 집합입니다. 또 한편으로, 코드에서 보는 클래스는 또 하나의 데이터 형식입니다. 기본 데이터 형식을 조합해서 만드는 복합 데이터 형식 말입니다.
 
C++과 달리 포인터가 안쓰인 이유는
C#에서는 포인터 대신에 참조(reference)를 사용하여 객체 인스턴스에 접근할 수 있습니다. 참조는 포인터와 유사한 역할을 하지만, C# 컴파일러가 해당 참조의 유효성을 확인하고, 런타임에도 안전하게 사용될 수 있도록 보장합니다. 따라서 대부분의 경우 C#에서는 포인터 대신 참조를 사용하는 것이 권장됩니다.
 
또한 C#에서 객체 인스턴스를 생성할 때 포인터를 사용하지 않는 이유는 C#에서 메모리 할당과 해제가 자동으로 이루어지기 때문입니다. C#은 가비지 컬렉션(garbage collection)이라는 메모리 관리 방식을 사용합니다. 가비지 컬렉션은 사용하지 않는 메모리를 자동으로 해제하며, 프로그래머가 직접 메모리 할당과 해제를 할 필요가 없습니다.

저작자표시 비영리 변경금지 (새창열림)

'C# 프로그래밍' 카테고리의 다른 글

[C#] 컬렉션 초기화  (0) 2023.02.24
[C#] 일반화 컬렉션  (0) 2023.02.23
[C#] 컬렉션  (1) 2023.02.23
C++, C# 에서 "call by reference" , "pass by reference"  (0) 2023.02.22
프로퍼티  (0) 2022.10.31
    같은편
    같은편
    책을 통해 이때까지 블로그나 유튜브에서 얻었던 지식의 파편들을 정립하고 합쳐 단단한 발판으로 만들기 위한 블로그

    티스토리툴바