[C++] 객체 지향 프로그래밍
객체 지향 프로그래밍
C++은 객체지향 프로그래밍의 중요한 특징들을 지원한다.
- 캡슐화(encapsulation)
- 데이터와 함수를 하나의 단위(클래스)로 묶는다.
- 클래스 내부의 세부 구현을 숨기고, 외부에서는 필요한 인터페이스만 제공함으로써 코드의 안정성과 보안성을 높인다.
- 추상화(abstraction)
- 공통된 속성과 기능을 추상화한 최상위 클래스를 정의하고, 하위 클래스에서 필요한 부분만 오버라이딩하여 사용한다.
- 코드의 재사용성과 유지보수성을 높인다.
- 상속(inheritance)
- 기존 클래스를 물려받아 새로운 클래스를 확장한다.
- 공통된 기능은 재사용하고 필요한 부분은 덧붙이거나 수정할 수 있다.
- 다형성(polymorphism)
- 같은 이름의 함수지만, 상황에 따라 다르게 동작할 수 있도록 한다.
- 컴파일 타임에 결정되는 함수 오버로딩
- 실행 중 결정되는 가상 함수 오버라이딩
💡 오버로딩(overloading) vs 오버라이딩(overriding)
- 오버로딩
- 같은 클래스 내에서 같은 이름의 함수로 매개변수의 타입이나 개수가 달라야 한다.
- 하나의 이름으로 여러 버전의 기능을 제공하는 것
- 컴파일 타임에 적용
- 오버라이딩
- 상속 관계의 자식 클래스에서 부모 클래스와 같은 이름의 함수로 매개변수의 타입과 개수가 같아야 한다.
- 부모 클래스의 동작을 자식 클래스에서 맞춤형으로 변경하는 것
- 런타임에 적용
절차적/구조적/객체지향
- 절차적 프로그래밍(procedural programming)
- 데이터보다 절차, 즉 알고리즘을 중시하는 방법이다.
- 프로그램이 절차에 따라 진행되는데, 작은 프로그램에서는 괜찮지만 규모가 커지면 코드가 복잡하게 얽혀 스파게티 코드가 될 가능성이 크다.
- 예. 어셈블리어(가장 저수준의 절차적 프로그래밍 언어)
- 구조적 프로그래밍(structured programming)
- 절차적 프로그래밍의 발전된 형태로
- 반복문과 같은 저수준 구조들에서부터 함수와 같은 고수준 구조들을 사용한다.
- 여전히 데이터와 알고리즘은 분리되어 있다.
- 예. C언어
- 객체지향 프로그래밍(Object-Oriented Programming)
- 캡슐화를 통해 데이터와 함수를 하나의 객체로 묶는다.
- 프로그램은 여러 개의 독립된 단위인 객체들의 모음으로 인식한다.
- 다수의 클래스를 먼저 개발하고 조합하여 전체 프로그램을 구현한다.
- 코드 재사용성, 모듈화, 유지보수 용이성 → 대규모 소프트웨어 개발에 많이 사용
- 예. C++, Java
출처 게임으로 배우는 C++
Leave a comment