반응형
using System;
namespace CSharp {
// 객체 지향 OOP; Object Oriented Programming
// 속성, 기능
// 참조(ref)를 이용한다.
class Knight {
public int hp;
public int attack;
public Knight Clone() {
Knight knight = new Knight();
knight.hp = this.hp;
knight.attack = this.attack;
return knight;
}
public void Move() {
System.Console.WriteLine("Knight Move");
}
public void Attack() {
System.Console.WriteLine("Knight Attack");
}
}
// 복사를 이용.
struct Mage {
public int hp;
public int attack;
}
class Program{
static void KillMage(Mage mage) {
mage.hp = 0;
}
static void KillKnight(Knight knight) {
knight.hp = 0;
}
// Main 함수
static void Main(string[] args) {
Mage mage;
mage.hp = 50;
mage.attack = 30;
KillMage(mage);
Mage mage2 = mage;
mage2.hp = 0;
Knight knight = new Knight();
knight.hp = 100;
knight.attack = 10;
knight.Move();
knight.Attack();
KillKnight(knight);
Knight knight2 = knight;
knight.hp=5; // knight2가 기존 knight 인스턴스를 바라봄
Knight knight3 = new Knight();
knight3.hp = knight.hp;
knight3.attack = knight.attack; // 값만 같은 다른 객체를 생성
// Deep Copy
Knight knight4 = knight.Clone();
knight4.hp = 4;
// Stack 스택 메모리: 불안정하고 임시적으로 사용하는 메모리. ex) 함수 연산을 계산하는 메모장
// 함수가 시작되는 부분부터 끝나는 부분까지 어느정도 사용하는지 추적함. 알아서 동적으로 잘 관리됨.
// 복사되는 것 : 값(int,string..)이 들어감. [struct]. Stack 영역
// 참조되는 것 : 실세 본체가 들어있는 메모리의 주소가 들어감. [object]. Heap 영역에 본체가 할당됨.
// Heap 힙 메모리: 동적으로 할당되는 것
// 메모리 할당을 했을 때, 메모리에 계속 남아 있는 상태. c++은 프로그래머가 할당 후 해제를 해야함. delete
// c#은 언어 차원에서 관리해줌. 본체를 가르키는 부분이 없으면 알아서 해제함
// ref 타입을 사용하면 주소를 사용하는 건 똑같음. stuct를 ref로 넘기면 stack 영역에 본체가 할당되어있을 수도 있다.
}
}
}
반응형
':SERVER > C#(C Sharp)' 카테고리의 다른 글
클래스 특성 - 상속성/은닉성/다형성 (0) | 2022.09.16 |
---|---|
클래스, 생성자, static (0) | 2022.09.16 |
함수, ref, out (0) | 2022.09.15 |
반복문 (0) | 2022.09.14 |
분기문(if문, switch문, 삼항연산자) (0) | 2022.09.14 |