C# 메모리 2편

2023. 5. 11. 01:38C# 프로그래밍 개념

메모리에 관한 내용

 

Player NewPlayer = new Player();

Int value = 100;

NewPlayer.Test(value);

Class Player(int _dmg)

{

_dmg = 1000;

 public void Test(int _value)

{

   value = _value;

}

}

Console.Write(value);

 

이런 식으로 있다고 가정할 때 

 

Int value의 위치 = Main의 어느 부분(결과적으로 Main에 속해 있다.)

Int _Dmg의 위치 = Test의 어느 부분에 있을 것이다.

 

32바이트 만큼 Main안에 있는 value의 위치를 대략 98이라고 그냥 가정해 본다.

 

NewPlayer.Test는 대략 70~90의 사이에 있다고 하자. NewPlayer.Test(value);로 넘겼을 떄 값만 넘겼다.

98바이트에 있는 100값 만을 받는다.

_Dmg의 값을 바꿔도 value에는 아무런 연관도 없다.

 

떤 함수에 어떤 값을 집어넣고 리턴하고 이런 거를 이해하는 게 중요하다.

_Dmg가 그림과 같은 경우에는 100이 됐다가(value의 값만 받았다가, 1000으로 바뀐다. 함수 내용)

 

이를 이해하기 위해서는 메모리에 대한 이해가 있어야 한다. 별개의 지역변수라는 걸 이해하고 있어야 한다.

 

return _Dmg;를 붙여서 리턴 값을 걸어줘야 value가 그 값을 받을 수 있다. 이거를 값 형의 처리라고 한다.

 

클래스가 객체화된 애는 레퍼런스 형이라는 자료형이 불린다.

 

일반적으로 우리들이 사용하는(여태까지 봐왔던) int나 bool 등의 애들은 값형이라고 한다.

 

기본 자료형을 선언만 하면 그 애들은 값형이 된다. 그리고, 자기가 만든 클래스를 new 클래스이름() 이렇게 어떠한 클래스명을 만든 것을 그 클래스명에 받으면 그것은 레퍼런스 형이 댄다.

 

이 값형과 레퍼런스 형은 메모리의 위치와 사용법이 다르다. 클래스로 만들어진 애들은 값형과는 다르게 동작한다. Monster 클래스가 객체화된 녀석을 받았다.

앞에있는 애들 까지는 스택에 생기는데, NewPlayer는 힙에 생긴다.

위치의 값50, 60이다. 레퍼런스라고 하는 애들은 힙에 생성된 어떠한 메모리의 위치를 가리키는 것이다.

 

NewPlayer라고 하는 애는 내가 가리키고 있는 위치에 있는 HP를 사용하겠다는 의미다.

50이라는 건 이렇게 된다. 나는 얘를 가리키는 애다. 이러한 의미다.

제 뒷 영역의 것들은 힙영역에서 만들어지고 스택에 있는 애들은 그걸 가리키기만 하는 거다.

 

Player가 받는 데미지를 위치가 70이라고 하자. 값은 주소값의 크기이고 50이 되니까 힙에 있는 영역을 가리키고 그걸 실행한다. Monster도 똑같이 60을 가리키고 몬스터의 체력이 깎인다. 그리고 함수가 끝나면 레퍼런스형 지역변수가 사라진다.

 

레퍼런스 값은 어느 위치를 가리키는 거고, 값형은 그냥 값을 나타내는 것이다. 레퍼런스 값은 힙 영역에 생긴다.

 

힙에new 클래스명() 으로 만들어진 클래스 객체들의 본체가 있다.

스택: 함수의 실행 메모리 박스(그 박스 안에 들어있는 지역변수)가 들어가 있다.

 

데이터 영역에는 후에 말하는 static이 들어간다.

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

C# 오버라이딩  (0) 2023.05.13
C# 인터페이스  (0) 2023.05.12
IDE 개발환경  (0) 2023.05.10
C# 오버로딩  (0) 2023.05.10
C# Partial 활용  (0) 2023.05.09