오늘 배운 내용
- Class
생성자
- 생성자는 객체에 인스턴스가 생성될 때 호출되는 특수한 메서드이다.
public 클래스명()
Class PlayerCharacter
{
int _hp;
float _ moveSpeed;
public PlayerCharcter(int hp, float moveSpeed)
{
_hp = hp;
_moveSpeed = moveSpeed;
}
}
Namespace
- 프로그램의 규모가 커지고 다른 프로그래머들과 함께 협업을 한다고 가정한다면, 필연적으로 같은 이름으로 인한 프로그램의 충돌이 발생할 수 있다.
- 예를들어 플레이어와 몬스터가 각각 움직인다는 의미로 각각의 클래스에서 class controller를 선언 한다면, 하나로 합칠때 오류가 생길 것이다.
using System;
using Player;
class Program
{
static void Main(string[] args)
{
Controller playerController = new();
Player.Controller playerController = new();
Monster.Controller PlayerController = new();
}
}
namespace Player
{
public class Controller
{
}
}
namespace Monster
{
public class Controller
{
}
}
Partial Class
- 두명의 프로그래머가 같은 클래스 내에서 작업을 해야한다면, 같은 이름으로 class를 만들면 오류가 발생하게 된다.
- 이때 class 앞에 partial을 써주고 별개선언이 되어있어도 Main에서 하나의 클래스로 동작할 수 있다.
public partial class util
값 타입과 참조 타입
- 깊은 복사
- 깊은 복사는 구조체(값타입)을 생성 했을 때, 복사를 한다면 두 값은 값타입이기 때문에 stack 메모리에 할당되며, 서로 다른 값이기 때문에 복사한 값을 바꿔줘도 두 값은 서로 다른 값을 출력하게 된다.
- 얕은 복사
- 얕은 복사는 class(참조타입)를 생성 했을 때, 진짜 데이터는 Heap메모리에 주소가 할당되는것이고 class에는 Heap의 주소를 가르키고 있는 class가 stack에 있는것이다. 이때 class의 인스턴스를 복사해서 새 변수가 생겼다면, 그 변수도 같은 주소를 그대로 복사한것이므로 복사된 변수의 값을 바꾼다면 주소값의 값이 바뀌게 되는것이므로 두 값은 같은 값을 출력하게 된다.
매개변수 한정자
- ref
- ref 한정자는 변수의 메모리 주소를 전달하여, 메서드 내부에서 그 변수 원본의 값을 참조하고 변경할 수 있도록 한다
- 두 변수의 값을 교환하거나, 메서드의 호출 과정에서 변수 원본의 값을 변화 시켜야할때 사용할 수 있다.
- in
- in 한정자는 메서드에 변수의 메모리 주소를 전달하지만, 메서드 내에서는 그 매개변수의 값을 변경할 수 없게한다.
- 구조체와 같이 크기가 큰 구조체를 함수에서 다뤄야할 때는 유용하면서도 의도치 않은 원본 데이터의 변질을 방지할 수 있다.
- out
- out 한정자는 메서드가 값을 반환할 때 사용되면 메서드가 여러 값을 반환해야 할 때 유용하다.
- out 매개변수는 메서드 내에 반드시 할당되어야 한다.