객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 모든 것을 객체로 생각하고 객체 간의 상호 작용을 중심으로 프로그램을 설계하는 프로그래밍 패러다임입니다. C#은 객체 지향 프로그래밍 스타일을 지원하는 강력한 언어로, 다음과 같은 특징을 가지고 있습니다.
캡슐화 (Encapsulation)
캡슐화는 데이터와 해당 데이터에 작용하는 메서드들을 하나의 단위로 묶는 것을 의미합니다. C#에서는 클래스와 인터페이스를 사용하여 캡슐화를 구현할 수 있습니다. 클래스는 데이터(속성)와 메서드(행위)를 하나로 묶어 외부로부터 데이터를 보호하고, 인터페이스는 클래스가 제공하는 기능을 정의하여 객체 간의 상호 작용을 정교하게 조절할 수 있게 합니다.
class Employee
{
private string name;
private int age;
public void SetName(string newName)
{
name = newName;
}
public string GetName()
{
return name;
}
}
상속 (Inheritance)
상속은 기존 클래스의 속성과 기능을 다른 클래스가 재사용하는 것을 의미합니다. C#에서는 단일 상속만을 지원하며, override
및 base
키워드를 통해 메서드 재정의 및 부모 클래스의 메서드 호출이 가능합니다.
class Manager : Employee
{
public void ApproveLeave()
{
// code for leave approval
}
}
다형성 (Polymorphism)
다형성은 여러 형태를 가질 수 있는 능력을 의미합니다. C#에서는 다형성을 메서드 오버로딩과 가상 메서드를 통해 구현할 수 있습니다. 메서드 오버로딩은 동일한 이름을 가진 메서드가 여러 개 정의되어 서로 다른 매개변수에 따라 다르게 동작하도록 하는 것이며, 가상 메서드는 자식 클래스에서 메서드를 재정의할 수 있도록 합니다.
class Shape
{
public virtual void Draw()
{
// code for drawing shape
}
}
class Circle : Shape
{
public override void Draw()
{
// code for drawing circle
}
}
객체 지향 프로그래밍은 코드의 재사용성과 유지보수성을 향상시키며, 코드의 가독성을 높여줍니다. C#은 이러한 객체 지향 프로그래밍의 장점을 최대한 활용할 수 있는 언어로, 유연하고 확장 가능한 소프트웨어를 개발하는 데 큰 도움을 줍니다.