개요
- 상속: 기존 클래스의 속성과 메서드를 물려받아 재사용하고 확장할 수 있는 개념.
- 다형성: 동일한 인터페이스(메서드)가 여러 형태로 동작할 수 있게 하는 개념.
- 캡슐화: 객체의 상태와 행위를 하나의 단위로 묶고, 내부 구현을 숨기고 외부와의 인터페이스만 제공하는 개념.
- 추상화: 시스템의 복잡한 세부사항을 숨기고 중요한 기능만을 드러내는 개념.
상속
기존 클래스에서 정의된 속성과 메서드를 새로운 클래스로 물려받아 재사용할 수 있게 해주는 OOP의 기본 개념
자식 클래스는 부모 클래스의 멤버를 상속받고, 이를 확장하거나 변경할 수 있다.
이를 통해 코드 재사용성을 높이고, 유지보수를 용이하게 만든다.
상속을 사용하면 코드 중복을 피할 수 있으며, 일반적으로 "is-a" 관계를 나타낸다.
예를 들어, "자동차"는 "탈 것"이다라는 관계를 표현할 수 있다.
다형성
하나의 인터페이스가 여러 가지 형태를 가질 수 있는 OOP의 개념
같은 메서드 이름이지만, 다양한 클래스에서 다르게 구현되는 형태를 말한다.
메서드 오버라이딩과 메서드 오버로딩을 통해 구현된다.
- 오버라이딩 : 부모 클래스의 메서드를 자식 클래스에서 재정의
- 오버로딩 : 같은 이름의 메서드지만 매개변수의 개수나 타입에 따라 다르게 구현
다형성은 코드의 유연성과 확장성을 높이고, 다양한 객체가 동일한 메시지를 다르게 처리할 수 있게한다.
예를 들어, "동물"이라는 클래스가 있고, 이 클래스를 상속한 "고양이", "개" 클래스가 있을 때, speak()라는 메서드를 각각 다르게 구현할 수 있다.
캡슐화
객체의 상태(속성)와 행위(메서드)를 하나의 단위로 묶고, 그 내부 구현을 외부에서 숨기고 접근을 제한하는 원칙이다.
이를 통해 데이터 보호와 코드 유지보수를 용이하게 할 수 있다.
클래스 내부의 속성(변수)은 private로 설정한다.
외부에서 해당 속성에 접근할 수 있도록 public 메서드(getter, setter 등)를 제공하여 안전하게 데이터를 처리한다.
이를 통해 클래스의 데이터 은닉을 실현할 수 있다.
예를 들어, Account 클래스에서 계좌 잔액을 private로 설정하고, 외부에서는 getBalance() 메서드를 통해 안전하게 확인할 수 있도록한다.
class Account {
private:
double balance; // balance는 외부에서 직접 접근할 수 없다.
public:
void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
double getBalance() const {
return balance;
}
};
위 코드에서 balance는 private로 설정되어 직접 접근할 수 없고, deposit()과 getBalance() 메서드를 통해서만 상태를 변경하거나 조회할 수 있다.
이렇게 외부에서는 인터페이스를 통해 객체의 상태에 접근하고, 내부의 구현은 숨겨진다.
추상화
불필요한 세부사항을 숨기고 중요한 정보만을 드러내는 원칙이다.
이를 통해 복잡한 시스템을 단순화하고, 사용자나 다른 개발자가 시스템의 중요한 부분에만 집중할 수 있게 만든다.
보통 추상 클래스와 인터페이스를 사용하여 구현한다.
추상화는 "무엇을 해야 하는지"는 정의하고, "어떻게 할지"는 각 구현 클래스에서 결정한다.
예를 들어, Shape라는 추상 클래스에서 draw() 메서드를 정의하고, 이를 상속받은 Circle, Rectangle 클래스에서 각기 다른 방식으로 draw() 메서드를 구현할 수 있다.
class Shape {
public:
virtual void draw() = 0; // 추상 메서드, 각 도형의 그리기 방식은 다를 것이다.
};
class Circle : public Shape {
public:
void draw() override {
// 원을 그리는 로직
}
};
class Rectangle : public Shape {
public:
void draw() override {
// 직사각형을 그리는 로직
}
};
여기서 Shape는 추상 클래스이고, draw()는 추상 메서드이다.
사용자는 Shape라는 추상 클래스만 알고 있으면 되고, 구체적인 구현은 각 서브클래스에서 결정된다.
해당 예제에서는 다형성 또한 구현되었다.
'컴퓨터 과학(CS)' 카테고리의 다른 글
네트워크 프록시 (3) | 2024.10.23 |
---|---|
네트워크 보안 (1) | 2024.10.23 |
네트워크 HTTPS (1) | 2024.10.16 |
네트워크 기기 (5) | 2024.10.09 |
네트워크 DNS (0) | 2024.10.08 |