[C++] 객체 지향 프로그래밍

객체 지향 프로그래밍

C++은 객체지향 프로그래밍의 중요한 특징들을 지원한다.

  1. 캡슐화(encapsulation)
    • 데이터와 함수를 하나의 단위(클래스)로 묶는다.
    • 클래스 내부의 세부 구현을 숨기고, 외부에서는 필요한 인터페이스만 제공함으로써 코드의 안정성과 보안성을 높인다.
  2. 추상화(abstraction)
    • 공통된 속성과 기능을 추상화한 최상위 클래스를 정의하고, 하위 클래스에서 필요한 부분만 오버라이딩하여 사용한다.
    • 코드의 재사용성과 유지보수성을 높인다.
  3. 상속(inheritance)
    • 기존 클래스를 물려받아 새로운 클래스를 확장한다.
    • 공통된 기능은 재사용하고 필요한 부분은 덧붙이거나 수정할 수 있다.
  4. 다형성(polymorphism)
    • 같은 이름의 함수지만, 상황에 따라 다르게 동작할 수 있도록 한다.
    • 컴파일 타임에 결정되는 함수 오버로딩
    • 실행 중 결정되는 가상 함수 오버라이딩

 

💡 오버로딩(overloading) vs 오버라이딩(overriding)

  • 오버로딩
    • 같은 클래스 내에서 같은 이름의 함수로 매개변수의 타입이나 개수가 달라야 한다.
    • 하나의 이름으로 여러 버전의 기능을 제공하는 것
    • 컴파일 타임에 적용
  • 오버라이딩
    • 상속 관계의 자식 클래스에서 부모 클래스와 같은 이름의 함수로 매개변수의 타입과 개수가 같아야 한다.
    • 부모 클래스의 동작을 자식 클래스에서 맞춤형으로 변경하는 것
    • 런타임에 적용

절차적/구조적/객체지향

  • 절차적 프로그래밍(procedural programming)
    • 데이터보다 절차, 즉 알고리즘을 중시하는 방법이다.
    • 프로그램이 절차에 따라 진행되는데, 작은 프로그램에서는 괜찮지만 규모가 커지면 코드가 복잡하게 얽혀 스파게티 코드가 될 가능성이 크다.
    • 예. 어셈블리어(가장 저수준의 절차적 프로그래밍 언어)
  • 구조적 프로그래밍(structured programming)
    • 절차적 프로그래밍의 발전된 형태로
    • 반복문과 같은 저수준 구조들에서부터 함수와 같은 고수준 구조들을 사용한다.
    • 여전히 데이터와 알고리즘은 분리되어 있다.
    • 예. C언어
  • 객체지향 프로그래밍(Object-Oriented Programming)
    • 캡슐화를 통해 데이터와 함수를 하나의 객체로 묶는다.
    • 프로그램은 여러 개의 독립된 단위인 객체들의 모음으로 인식한다.
    • 다수의 클래스를 먼저 개발하고 조합하여 전체 프로그램을 구현한다.
    • 코드 재사용성, 모듈화, 유지보수 용이성 → 대규모 소프트웨어 개발에 많이 사용
    • 예. C++, Java

출처 게임으로 배우는 C++

Categories:

Updated:

Leave a comment