[TIL-251224] Class

데비·2025년 12월 26일

본과정

목록 보기
14/79

오늘 배운 내용

- Class


생성자

  • 생성자는 객체에 인스턴스가 생성될 때 호출되는 특수한 메서드이다.
public 클래스명()
  • 예시)
Class PlayerCharacter
{
	int _hp;
    float _ moveSpeed;
    
    // 생성자 생성
    public PlayerCharcter(int hp, float moveSpeed)
	{
		_hp = hp;
        _moveSpeed = moveSpeed;
	}
}

Namespace

  • 프로그램의 규모가 커지고 다른 프로그래머들과 함께 협업을 한다고 가정한다면, 필연적으로 같은 이름으로 인한 프로그램의 충돌이 발생할 수 있다.
  • 예를들어 플레이어와 몬스터가 각각 움직인다는 의미로 각각의 클래스에서 class controller를 선언 한다면, 하나로 합칠때 오류가 생길 것이다.
// Program.cs이라 가정
using System;
using Player; // <-- 이렇게 1개라면 네임스페이스를 호출해도 되지만,
//using Monster;	 두가지를 동시에 호출한다면, 
// 플레이어와 몬스터 네임스페이스 안에 같은 class "Controller"가 호출되기 때문에
// 사용할 수 없다.
class Program
{
	static void Main(string[] args)
    {
		Controller playerController = new();
        Player.Controller playerController = new();
        Monster.Controller PlayerController = new();
        // 위와 같이 클래스를 호출하기 전 네임스페이스를 먼저 호출하고.
        // 클래스를 호출하는 방식으로 사용하면 둘다 사용 가능하다.
    }
}
// Player
namespace Player
{
	public class Controller
	{
	}
}
// Montser
namespace Monster
{
	public class Controller
    {
    }
}

Partial Class

  • 두명의 프로그래머가 같은 클래스 내에서 작업을 해야한다면, 같은 이름으로 class를 만들면 오류가 발생하게 된다.
  • 이때 class 앞에 partial을 써주고 별개선언이 되어있어도 Main에서 하나의 클래스로 동작할 수 있다.
public partial class util // 이 경우 하나의 class를 여러명이서 작업후
						  // 동작시 하나의 클래스로 동작이 가능하게 함

값 타입과 참조 타입

- 깊은 복사

  • 깊은 복사는 구조체(값타입)을 생성 했을 때, 복사를 한다면 두 값은 값타입이기 때문에 stack 메모리에 할당되며, 서로 다른 값이기 때문에 복사한 값을 바꿔줘도 두 값은 서로 다른 값을 출력하게 된다.

- 얕은 복사

  • 얕은 복사는 class(참조타입)를 생성 했을 때, 진짜 데이터는 Heap메모리에 주소가 할당되는것이고 class에는 Heap의 주소를 가르키고 있는 class가 stack에 있는것이다. 이때 class의 인스턴스를 복사해서 새 변수가 생겼다면, 그 변수도 같은 주소를 그대로 복사한것이므로 복사된 변수의 값을 바꾼다면 주소값의 값이 바뀌게 되는것이므로 두 값은 같은 값을 출력하게 된다.

매개변수 한정자

- ref

  • ref 한정자는 변수의 메모리 주소를 전달하여, 메서드 내부에서 그 변수 원본의 값을 참조하고 변경할 수 있도록 한다
  • 두 변수의 값을 교환하거나, 메서드의 호출 과정에서 변수 원본의 값을 변화 시켜야할때 사용할 수 있다.

- in

  • in 한정자는 메서드에 변수의 메모리 주소를 전달하지만, 메서드 내에서는 그 매개변수의 값을 변경할 수 없게한다.
  • 구조체와 같이 크기가 큰 구조체를 함수에서 다뤄야할 때는 유용하면서도 의도치 않은 원본 데이터의 변질을 방지할 수 있다.

- out

  • out 한정자는 메서드가 값을 반환할 때 사용되면 메서드가 여러 값을 반환해야 할 때 유용하다.
  • out 매개변수는 메서드 내에 반드시 할당되어야 한다.

0개의 댓글