내일배움캠프 7일차 TIL <C# 클래스> 04/15

정광훈(Unity_9기)·2025년 4월 15일

TIL (Today I Learned)

목록 보기
19/110
post-thumbnail
Console.ReadLine().Split(' '); // 공백 기준으로 입력값을 나눈다
입력을 4 5 이런 식으로 입력할 수 있다.

클래스, 객체
● 가상 메서드 (virtual)

  • 가상 메서드는 기본적으로 부모 클래스에서 정의되고 자식 클래스에서 재정의할 수 있는 메서드
  • 가상 메서드는 virtual 키워드를 사용하여 선언되며, 자식 클래스에서 필요에 따라 재정의될 수 있다.
  • 이를 통해 자식 클래스에서 부모 클래스의 메서드를 변경하거나 확장할 수 있다.

● 오버라이딩 (Overriding)

  • 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의
  • 이는 상속 관계에 있는 클래스 간에 발생하며, 메서드의 이름, 매개변수 및 반환타입이 동일해야 함
  • 오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 재정의하여 자신에게 맞는 동작을 구현할 수 있다.

virtual: 가상의실형태가 다를 수 있으니 실형태에 재정의가 되어있는지 확인해라

public class Unit
{
	public virtual void Move() // 자식이 재정의 했을 수도 있다.
    {
    	Console.WriteLine("두발로 걷기");
    }
}
        
public class Marine : Unit
{

}
        
public class Zergling : Unit
{
	public override void Move() // 자식 클래스에서 재정의
	{
    	Console.WriteLine("네발로 걷기");
    }
}        
        
static void Main(string[] args)
{
	List<Unit> list = new List<Unit>();
	list.Add(new Marine());
	list.Add(new Zergling());
	
	foreach (var unit in list)
    {
    	unit.Move();
    }
}    
출력
두발로 걷기
네발로 걷기 (virtual이 없으면 두발로 걷기 출력)

● 추상(Abstract) 클래스와 메서드

  • 추상 클래스는 직접적으로 인스턴스를 생성할 수 없는 클래스 (override를 통해 생성)
  • 주로 상속을 위한 베이스 클래스로 사용
  • 추상 클래스는 abstract 키워드를 사용하여 선언되며, 추상 메서드를 포함할 수 있다.
  • 추상 메서드는 구현부가 없는 메서드로, 자식 클래스에서 반드시 구현되어야 함
abstract class Shape
{
	public abstract void Draw();
}
    class Circle : Shape
    {
		public override void Draw()
        {
        	Console.WriteLine("Drawing a Circle");
        }
    }    
    
static void Main(string[] args)
{
	List<Shape> list = new List<Shape>();
    list.Add(new Circle());
    
    foreach (Shape shape in list)
    {
    	shape.Draw();
    }
}
출력
Drawing a Circle

● out, ref 키워드

  • out, ref 키워드는 메서드에서 매개변수를 전달할 때 사용
  • out 키워드는 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용
  • ref 키워드는 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용
  • out, ref 키워드를 사용하면 메서드에서 값을 반환하는 것이 아니라,
    매개변수를 이용하여 값을 전달할 수 있다.

★ out은 매개변수가 메서드 내에서 무조건 값을 할당해야 함
★ ref는 값이 바뀔 수도 있고 안 바뀔 수도 있다.

// out 키워드 사용 예시
static void Divide(int a, int b, out int quotient, out int remainder)
{
	quotient = a / b;
	remainder = a % b;
}

// ref 키워드 사용 예시
static void Swap(ref int a, ref int b)
{
	int temp = a;
	a = b;
	b = temp;
}

static void Main(string[] args)
{
	// out 키워드 사용 예시
	int quotient, remainder;
	Divide(7, 3, out quotient, out remainder);
	Console.WriteLine($"{quotient}, {remainder}");

	// ref 키워드 사용 예시
    int x = 1, y = 2;
    Swap(ref x, ref y);
    Console.WriteLine($"{x}, {y}");
}
출력
2, 1
2, 1

0개의 댓글