본문 바로가기

OOP

C# 메서드 오버로딩과 오버라이딩 차이 및 모범 사례 메서드 오버로딩과 오버라이딩은 이름이 비슷하지만 의도와 동작 시점이 다릅니다. 오버로딩은 같은 이름의 메서드를 매개변수 시그니처로 구분해 컴파일 타임에 선택하며, 오버라이딩은 상속 구조에서 가상 멤버를 재정의해 런타임에 다형적으로 호출됩니다.1. 핵심 개념 요약오버로딩: 같은 이름, 다른 시그니처(매개변수 개수/타입/순서)입니다. 반환형만 다른 것은 오버로딩이 아닙니다. 호출 대상은 컴파일러가 결정합니다.오버라이딩: base에 virtual/abstract 멤버가 있고, 파생 클래스에서 override로 재정의합니다. 호출 대상은 런타임 타입이 결정합니다. sealed override로 더 이상의 재정의를 막을 수 있습니다.2. 오버로딩 예제와 규칙using System;using System.Linq;.. 더보기
C# 인터페이스의 명시적 구현 활용과 주의사항 명시적 인터페이스 구현은 클래스의 공용 API를 간결하게 유지하면서, 인터페이스 요구사항을 충족하거나 이름 충돌을 해결할 때 유용합니다. 다만 호출성이 낮아지고 디버깅이 어려워질 수 있어 목적을 명확히 하고 사용해야 합니다.1. 명시적 구현이란?클래스/구조체가 인터페이스 멤버를 인터페이스 이름으로 한정해서 구현하는 방법입니다. 이렇게 구현된 멤버는 클래스 인스턴스에서 바로 보이지 않고, 인터페이스로 캐스팅해야 호출할 수 있습니다.public interface IFoo { void Run(); }public interface IBar { void Run(); }public class Worker : IFoo, IBar{ void IFoo.Run() { Console.WriteLine("Foo.Run".. 더보기
C# 인터페이스와 추상 클래스 비교 1. 개념 설명인터페이스는 타입이 수행해야 할 계약을 정의합니다. 메서드 시그니처만 제공하며 구현과 상태는 없습니다. 반면 추상 클래스는 일부 공통 구현과 상태를 갖고, virtual/abstract 멤버로 확장 지점을 노출합니다. 상속은 하나만 가능하지만 인터페이스는 여러 개를 구현할 수 있어 역할 조합에 유리합니다.2. 코드 예제아래 예제는 추상 클래스의 기본 구현과 인터페이스 계약을 함께 사용하는 방법입니다.using System;public interface ILogger{ void Log(string msg);}public abstract class Worker{ public abstract void Work(); public void Greet() => Console.Write.. 더보기