객체 지향 프로그래밍(OOP)의 중요 기능은 다음과 같다.
- 추상화 (abstraction)
- 캡슐화 (encapsulation)와 데이터 은닉(data hiding)
- 다형 (polymorphism)
- 상속 (inheritance)
- 코드의 재활용 (reusability of code)
클래스(class)는 이러한 OOP 기능들을 구현하고 결합하는 데 사용되는 가장 중요한 C++의 도구이다.
클래스(class)
- 추상화를 사용자 정의 데이터형으로 변환해주는 C++의 수단으로, 데이터 표현과 데이터를 조작하는 메서드들을 하나의 패키지 안에 결합한다.
인터페이스(interface)
- 인터페이스란 두 시스템간의 상호 작용을 위한 공통된 프레임워크이다.
- 인터페이스는 프로그래머가 클래스 객체와 상호작용하는 코드를 작성할 수 있게 해주며 프로그램이 클래스 객체를 사용할 수 있게 돕는다.
클래스 멤버 접근 제어 - public / private
public
- 객체와 프로그램 사이의 인터페이스를 제공하여 private 멤버와 프로그램을 잇는 다리 역할을 수행한다.
데이터 은닉(data hiding)
- 프로그램이 데이터에 직접 접근하지 못하게 차단하는 것
- 데이터 은닉은 데이터에 직접 접근하지 못하게 막아 줄 뿐만 아니라, 데이터 표현이 어떻게 되어 있는지에 대해 클래스 사용자가 신경 쓰지 않도록 해준다.
캡슐화(encapsulation)
- 세부적인 구현들을 따로 결합하여 추상화와 분리하는 것
- public 인터페이스는 설계의 추상화를 나타낸다.
- 데이터 은닉은 캡슐화의 한 예이다.
클라이언트 - 서버 모델
- OOP 프로그램에서 클라이언트는 클래스를 사용하는 프로그램을 의미하고, 서버는 클래스 메서드를 포함하여, 클래서 선언으로 구성되어 그것을 필요로 하는 프로그램이 사용할 수 있는 리소스를 서버라고 한다.
- 클라이언트의 책임은 public으로 정의된 인터페이스를 통해서만 서버를 사용하여 인터페이스를 이해하는 것이다.
- 서버의 책임은 서버가 그 인터페이스에 따라 신뢰성있고 정확하게 수행되는지 확인하는 것이다.
디폴트 생성자(default constuctor)
- 명시적인 초기화 값을 제공하지 않을 때 객체를 생성하는 데 사용하는 생성자
- 사용자가 어떠한 생성자도 정의하지 않을 경우에만 컴파일러가 디폴트 생성자를 제공한다.
파괴자(destructor)
- 객체의 수명이 끝나는 시점에서 파괴자 멤버 함수를 자동으로 호출하여 객체를 깨끗이 삭제한다.
- 할당된 메모리를 해제하는 데 유용하게 사용된다.
'📚책읽기' 카테고리의 다른 글
[C++] static 멤버, 생성자/파괴자 (0) | 2023.02.03 |
---|---|
[C++] 랜덤함수, explicit(명시적 데이터형 변환), 변환함수, 프렌드 (friend), 연산자 오버로딩, 오버로딩 제약, Vector클래스 (0) | 2023.02.02 |
[C++] 디폴트 매개변수, 함수 오버로딩, 함수 템플릿 (0) | 2023.01.26 |
[C++] 인라인 함수, 참조 변수 (0) | 2023.01.24 |
[C++] 가변배열(동적할당 활용) (0) | 2022.04.04 |