[TIL] 6일차 - 강의 수강

김유원·2023년 12월 29일
0

📝 23.12.29

2023년의 마지막 개발 일지이다. 한 해의 마지막인만큼 열심히 강의를 수강했다. 기존에 알던 것들을 재복습하는 시간이지만, 평소 헷갈리던 것을 재정리하는 시간을 가질 수 있었다.

1. 가상 메서드

가상 메서드는 기본적으로 부모 클래스에서 정의되고 자식 클래스에서 재정의할 수 있는 메서드이다. virtual키워드를 사용하여 선언되는데, 자식 클래스에서 필요에 따라 재정의할 수도 있다. 하지만 재정의를 강제하지는 않는다.

public class Unit
{
    public virtual void Move()
    {
        Console.WriteLine("두발로 걷기");
    }

    public void Attack()
    {
        Console.WriteLine("Unit 공격");
    }
}

public class Marine : Unit
{

}

public class Zergling : Unit
{
    public override void Move()
    {
        Console.WriteLine("네발로 걷기");
    }
}

2. 추상 클래스와 메서드

추상 클래스는 직접적으로 인스턴스를 생성할 수 없는 클래스이다. 주로 상속을 위한 베이스 클래스로 사용되는 것인데, 구현부가 없는 메서드이기 때문에 자식 클래스에서 구현하는 것을 강제한다. abstract 키워드를 사용하여 선언되며, 추상 메서드를 포함할 수 있다.

abstract class Shape
{
    public abstract void Draw();
}

class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

class Square : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a square");
    }
}

class Triangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a triangle");
    }
}

3. 오버라이딩과 오버로딩

위의 설명에서 알 수 있듯 오늘은 상속과 관련된 것을 배운 것인데, 여기서 나오는 헷갈리는 개념이 오버라이딩과 오버로딩이다.

1. 오버라이딩

  • 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의하는 것을 의미합니다.
  • 이는 상속 관계에 있는 클래스 간에 발생하며, 메서드의 이름, 매개변수 및 반환타입이 동일해야 합니다.
  • 오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 재정의하여 자신에게 맞는 동작을 구현할 수 있습니다.
public class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing a shape.");
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle.");
    }
}

Shape shape1 = new Circle();

shape1.Draw();  // Drawing a circle.

2. 오버로딩

  • 동일한 메서드 이름을 가지고 있지만, 매개변수의 개수, 타입 또는 순서가 다른 여러 개의 메서드를 정의하는 것을 의미합니다.
  • 오버로딩을 통해 동일한 이름을 가진 메서드를 다양한 매개변수 조합으로 호출할 수 있습니다.
public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }
}

Calculator calc = new Calculator();
int result1 = calc.Add(2, 3);         // 5
int result2 = calc.Add(2, 3, 4);      // 9

평소에 어렴풋이 알고있던, 혹은 헷갈리던 개념을 명확하게 배울 수 있던 시간이었다. 텍스트 rpg 만들기 과제에서도 이를 활용할 일이 많을 것 같아서 정확하게 숙지하려고 노력하였다.

profile
개발 공부 블로그

0개의 댓글

관련 채용 정보