[c#] C# 다형성과 객체 지향 설계 원칙의 연결
C#은 객체 지향 프로그래밍 언어로, 다형성(polymorphism)은 객체 지향 설계의 중요한 개념 중 하나입니다. C#에서의 다형성은 객체 지향 설계 원칙을 따르는 코드 작성을 가능케 합니다.
다형성(Polymorphism)
다형성은 한 가지 개념이 여러 가지 형태를 가질 수 있는 특성을 뜻합니다. C#에서의 다형성은 두 가지 형태로 구현됩니다.
-
정적 다형성(static polymorphism): 메서드 오버로딩(method overloading)을 통해 구현됩니다. 같은 이름의 메서드지만 매개변수의 타입 또는 개수가 다른 경우를 의미합니다.
class Calculator { public int Add(int a, int b) { return a + b; } public double Add(double a, double b) { return a + b; } }
-
동적 다형성(dynamic polymorphism): 상속 및 인터페이스를 활용한 가상 메서드(polymorphic method)를 통해 구현됩니다. 같은 이름의 메서드지만 실제 실행될 때는 객체의 타입에 따라 다르게 동작합니다.
interface IShape { double GetArea(); } class Rectangle : IShape { public double Width { get; set; } public double Height { get; set; } public double GetArea() { return Width * Height; } } class Circle : IShape { public double Radius { get; set; } public double GetArea() { return Math.PI * Radius * Radius; } }
객체 지향 설계 원칙과의 연결
다형성은 객체 지향 설계의 여러 가지 원칙 중에서 개방-폐쇄 원칙(Open/Closed Principle, OCP)과 리스코프 치환 원칙(Liskov Substitution Principle, LSP)을 지원합니다.
- OCP: 기존의 코드를 변경하지 않고도 새로운 함수나 클래스를 추가할 수 있도록 합니다. 다형성을 통해 코드의 유지보수성을 높일 수 있습니다.
- LSP: 파생 클래스는 기본 클래스의 역할을 완전히 대체할 수 있어야 합니다. 다형성을 이용하여 파생 클래스가 기본 클래스의 메서드를 오버라이딩하고 새로운 메서드를 추가하여 대체할 수 있습니다.
이러한 객체 지향 설계 원칙을 준수하면서 다형성을 적절히 활용하면, 유연하고 확장 가능한 소프트웨어 시스템을 설계할 수 있습니다.
C#에서의 다형성은 객체 지향 설계 원칙을 준수하여 유연하고 확장 가능한 소프트웨어를 구축할 수 있도록 도와줍니다. 이는 좀 더 효율적이고 유지보수가 쉬운 코드를 작성할 수 있게 해줍니다.
참고 문헌:
- https://docs.microsoft.com/en-us/dotnet/csharp/
- https://en.wikipedia.org/wiki/Polymorphism_(computer_science)