[C# 객체지향] 다형성_메서드 또는 연산자 오버로드

eunjin lee·2022년 6월 22일
0

C# 9.0 프로그래밍

목록 보기
7/50

매개변수의 수나 타입은 다르지만, 같은 기능을 하는 메서드라면 같은 이름으로 오버로드하여 쓰는 것이 좋다.
더 나아가, C#에서는 연산자와 메서드 간의 구분이 없기 떄문에, (모든 연산자는 아니지만) 연산자 또한 오버라이드하여 쓸 수 있다.



1. 메서드 오버로드

  • ✍ 샘플 코드
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Calculator.abs(-5)); 
            Console.WriteLine(Calculator.abs(4.2342));
            Console.WriteLine(Calculator.abs(200.009m));  
        }


    }
    class Calculator
    {
        public static int abs(int value)
        {
            return (value >= 0) ? value : -value; 
        }

        public static double abs(double value)
        {
            return (value>=0) ? value : -value;
        }

        public static decimal abs(decimal value)
        {
            return value>=0 ? value : -value; 
        }
    }
  • ✅ 결과
    5
    4.2342
    200.009

2. 연산자 오버로드

  • ✍ 샘플 코드
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(new Kilogram(10)+new Kilogram(20));
            Console.WriteLine(new Gram(500)+new Gram(1200));
            Console.WriteLine(new Kilogram(3)+new Gram(2300));
            Console.WriteLine(new Gram(320)+new Kilogram(5));
            
        }


    }
    class Kilogram
    {
        public double value;

        public Kilogram(double value) { this.value = value; }
        public static Kilogram operator + (Kilogram k1, Kilogram k2)
        {
            return new Kilogram(k1.value+ k2.value);
        }

        public static Kilogram operator + (Kilogram k1, Gram g1)
        {
            return new Kilogram(k1.value + (g1.value / 1000.0));
        }

        public override string ToString()
        {
            return this.value + "kg";
        }
    }

    class Gram
    {
        public double value;

        public Gram(double value) { this.value = value; }    
        public static Gram operator + (Gram g1, Gram g2)
        {
            return new Gram(g1.value+g2.value);  
        }
        public static Gram operator +(Gram g1, Kilogram k1)
        {
            return new Gram(k1.value * 1000 + g1.value);
        }
        public static Gram operator / (Gram g1, int num)
        {
            return new Gram(g1.value / (double)num);
        }


        public override string ToString()
        {
            return this.value + "g";
        }
    }
  • ✅ 결과
    30kg
    1700g
    5.3kg
    5320g

0개의 댓글