객체지향 프로그래밍의 특징
객체지향 프로그래밍(OOP)은 몇 가지 주요 특징이 존재하는데, 이번 글에서는 캡슐화, 상속, 다형성, 그리고 추상화에 대해 자세히 살펴보겠습니다.
1. 캡슐화(Encapsulation)
캡슐화는 데이터와 그 데이터를 조작하는 메서드를 하나의 단위로 묶는 것을 의미합니다. 이를 통해 데이터의 무결성을 보호하고 외부에서의 직접적인 접근을 제한할 수 있습니다. C#에서는 접근 제한자를 이용하여 캡슐화를 구현할 수 있습니다.
public class Car
{
private int speed;
public void Accelerate(int amount)
{
speed += amount;
}
public void Decelerate(int amount)
{
speed -= amount;
}
public int GetSpeed()
{
return speed;
}
}
위의 예시에서는 속도(speed)를 private으로 선언하여 외부에서 직접 접근하지 못하도록 하였습니다. 대신에 Accelerate, Decelerate, GetSpeed 메서드를 통해 속도를 조작하고 조회할 수 있습니다.
2. 상속(Inheritance)
상속은 기존 클래스의 특성을 그대로 물려받아 새로운 클래스를 만드는 개념입니다. C#에서는 콜론(:)을 사용하여 상속을 구현할 수 있습니다.
public class Animal
{
public virtual void Speak()
{
Console.WriteLine("Animal speaks");
}
}
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("Dog barks");
}
}
위의 예시에서는 Animal 클래스를 정의하고, 이를 상속받아 Dog 클래스를 정의했습니다. Dog 클래스는 Animal 클래스의 Speak 메서드를 오버라이딩하여 "Dog barks"를 출력하도록 재정의하였습니다.
3. 다형성(Polymorphism)
다형성은 동일한 메서드 호출에 대해 다른 동작을 수행할 수 있는 능력을 의미합니다. C#에서는 메서드 오버로딩과 가상 메서드를 통해 다형성을 구현할 수 있습니다.
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing Shape");
}
}
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing Circle");
}
}
public class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing Rectangle");
}
}
위의 예시에서는 Shape 클래스를 정의하고, 이를 상속받아 Circle 클래스와 Rectangle 클래스를 정의했습니다. 각 클래스는 Draw 메서드를 오버라이딩하여 다형성을 구현하였습니다.
4. 추상화 (Abstraction)
추상화는 복잡한 시스템에서 핵심적인 기능에만 집중하고 불필요한 세부사항을 숨기는 것을 의미합니다. C#에서는 추상 클래스와 인터페이스를 사용하여 추상화를 구현할 수 있습니다.
public abstract class Vehicle
{
public abstract void Move();
}
public class Car : Vehicle
{
public override void Move()
{
Console.WriteLine("Car is moving");
}
}
public interface IAnimal
{
void Speak();
}
public class Dog : IAnimal
{
public void Speak()
{
Console.WriteLine("Dog barks");
}
}
위의 예시에서는 Vehicle 추상 클래스와 IAnimal 인터페이스를 정의하였습니다. 이를 상속받아 Car 클래스와 Dog 클래스를 정의하여 추상화를 구현하였습니다.
객체지향 프로그래밍의 특징인 캡슐화, 상속, 다형성, 추상화를 C#을 사용하여 살펴보았습니다. 이러한 원칙들을 잘 이해하고 활용함으로써 효율적이고 유지보수성이 높은 코드를 작성할 수 있습니다.
'이론 > 개발 지식' 카테고리의 다른 글
블록체인 기술: 분산 원장의 혁신적인 기술 (0) | 2024.04.02 |
---|---|
객체지향 프로그래밍 설계 5원칙 - SOLID (0) | 2024.03.21 |
인터페이스와 추상클래스의 차이점 (0) | 2024.03.21 |
객체지향 프로그래밍: 클래스, 객체, 메서드, 인터페이스, 추상클래스 (0) | 2024.03.21 |