객체 지향이란 프로그래밍이란?
객체와 상호 작용을 사용하여 응용 프로그램과 컴퓨터 프로그램을 설계하는 프로그래밍 패러다임입니다. 데이터와 해당 데이터를 조작하는 코드를 포함할 수 있는 "객체" 개념을 기반으로 합니다.
객체는 객체를 만들기 위한 청사진 또는 템플릿인 클래스의 인스턴스입니다. 클래스는 해당 클래스의 개체가 가질 속성(데이터 멤버) 및 메서드(함수)를 정의합니다. 예를 들어 "Car" 클래스는 "make", "model" 및 "year"와 같은 속성과 "start()" 및 "drive()"와 같은 메서드를 가질 수 있습니다.
객체지향의 4대 특징은 다음과 같습니다.
1. 상속
상속은 클래스가 다른 클래스의 속성과 메서드를 상속할 수 있도록 하는 OOP의 기본 개념 중 하나입니다. 다른 클래스로부터 상속받은 클래스를 하위 클래스라고 하고 상속받은 클래스를 부모 클래스라고 합니다. 이를 통해 코드 재사용 및 클래스 계층 구조 생성이 가능합니다. 다음은 C# 언어로 작성한 상속의 예제입니다.
class Shape {
public double Area() { return 0; }
}
class Rectangle : Shape {
double width, height;
public Rectangle(double w, double h) {
width = w;
height = h;
}
public override double Area() { return width * height; }
}
위 예제에서 "Rectangle" 클래스는 "Shape" 클래스에서 상속되며 "Area()" 메서드에 액세스할 수 있습니다. "Rectangle" 클래스는 또한 자체 구현을 제공하기 위해 "Area()" 메서드를 재정의합니다.
2. 다형성(Polymorphism)
다형성은 OOP의 또 다른 기본 개념으로, 서로 다른 클래스의 객체를 공통 부모 클래스의 객체로 취급할 수 있도록 합니다. 이를 통해 서로 다른 클래스의 개체를 동일한 컨텍스트에서 상호 교환하여 사용할 수 있습니다. 다음은 C# 언어로 작성한 다형성의 예제입니다.
class Shape {
public virtual double Area() { return 0; }
}
class Rectangle : Shape {
double width, height;
public Rectangle(double w, double h) {
width = w;
height = h;
}
public override double Area() { return width * height; }
}
class Circle : Shape {
double radius;
public Circle(double r) { radius = r; }
public override double Area() { return Math.PI * radius * radius; }
}
List<Shape> shapes = new List<Shape>();
shapes.Add(new Rectangle(2, 3));
shapes.Add(new Circle(4));
foreach (var shape in shapes) {
Console.WriteLine(shape.Area());
}
위 예제에서 "Rectangle" 및 "Circle" 클래스는 "Shape" 클래스에서 파생됩니다. "Area()" 메서드는 기본 클래스에서 가상으로 정의되어 파생 클래스에서 자체 구현을 제공할 수 있습니다. 도형 목록은 다양한 유형의 개체를 포함할 수 있으며 "Area()" 메서드의 올바른 버전은 개체의 실제 유형에 따라 런타임에 호출됩니다.
3. 캡슐화
캡슐화는 객체의 구현 세부 사항을 외부 세계로부터 숨기는 관행을 가리키는 OOP의 기본 개념이기도 합니다. 이는 개체의 속성과 메서드를 개인, 보호 또는 공용으로 정의하여 이러한 요소의 액세스 가능성을 제어함으로써 달성됩니다. 다음은 C# 언어로 작성한 캡슐화 예제입니다.
class BankAccount {
private double balance;
public void Deposit(double amount) {
balance += amount;
}
public void Withdraw(double amount) {
balance -= amount;
}
public double GetBalance() {
return balance;
}
}
위 예제에서 "BankAccount" 클래스는 계정 잔액에 대한 정보를 캡슐화하여 외부 세계에서 숨깁니다. 잔액은 잔액에 대한 액세스를 제어하는 "Deposit()", "Withdraw()" 및 "GetBalance()" 메서드를 통해서만 액세스할 수 있습니다.
4. 추상화
추상화는 OOP의 또 다른 중요한 개념으로, 불필요한 세부 사항을 숨겨 복잡성을 줄이는 프로세스를 말합니다. 이를 통해 개발자는 관련 없는 세부 정보를 무시하면서 개체의 필수 기능에 집중할 수 있습니다.
abstract class Shape {
public abstract double Area();
}
class Rectangle : Shape {
double width, height;
public Rectangle(double w, double h) {
width = w;
height = h;
}
public override double Area() { return width * height; }
}
이 예제에서 "Shape" 클래스는 인스턴스화할 수 없음을 의미하는 추상 클래스로 선언됩니다. "Area()" 메서드도 추상으로 선언되며, 이는 기본 클래스에 구현이 없음을 의미합니다. 파생 클래스 "Rectangle"의 "Area()" 메서드의 구현을 제공합니다.
요약하면 객체 지향 프로그래밍은 개발자가 실제 객체와 그 상호 작용을 논리적이고 조직적인 방식으로 모델링할 수 있게 해주는 프로그래밍 패러다임입니다. 이는 클래스, 객체, 상속, 다형성, 캡슐화 및 추상화의 개념을 기반으로 합니다. 이러한 개념은 게임 개발과 같은 크고 복잡한 프로젝트에 중요한 코드 가독성, 유지 관리성 및 재사용성을 개선하는 데 도움이 됩니다.
'공부 > OOP' 카테고리의 다른 글
인스턴스(instance)란? (0) | 2023.01.15 |
---|---|
객체지향의 5대 원칙 (0) | 2023.01.15 |
접근자(Getter)와 설정자(Setter)의 개념 (0) | 2023.01.13 |
캡슐화(Encapsulation)란? (0) | 2023.01.13 |
오버로딩(Overloading)과 오버라이딩(Overriding)의 개념과 차이 (0) | 2022.12.29 |