일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 백준
- 문자열
- vscode
- 파이썬
- 포인터
- 배열
- baekjoon
- 티스토리챌린지
- predictive analysis
- Class
- Deep Learning
- C++
- 함수
- 오블완
- array
- 반복문
- 알고리즘
- Pre-processing
- assignment operator
- programming
- Object Oriented Programming
- Python
- pointer
- function
- Data Science
- raw data
- string
- OOP
- pass by reference
- const
- Today
- Total
Channi Studies
[C++] 클래스와 객체 본문
OOP의 핵심인 클래스와 객체는 각각 무엇일까요?
Class | 클래스
클래스는 '객체들의 청사진' 입니다.
또한 클래스는 '사용자가 지정한 자료형' 입니다.
마치 우리가 사용하던 정수나 실수 자료형처럼 사용할 수 있는 데이터입니다.
(클래스의 선언 방식을 보면 더욱 이해가 될 것 입니다.)
클래스에는 attributes(속성) 들이 있는데,
그것이 우리가 아는 '값 (data)' 과 동일한 역할입니다.
그리고 methods(메소드) 들도 있는데,
이것은 우리가 사용하던 '함수 (function)' 와 동일한 역할입니다.
또한 클래스들은
클래스의 내부적으로만 사용되는 용도의 함수(메소드)와 값(속성) 들을 가지고 있을 수 있습니다.
그리고 이들을 숨길 수 있습니다.
이러한 개념들은 public / private 접근 제한다 구현됩니다.
Class의 궁극적인 목표는
문제 해결에 사용되는 well-defined public interfacte를 구현하는 것 입니다.
vector과 string도 사실은 C++ standard library에 포함된 클래스들입니다.
Object | 객체
객체는 클래스로부터 만들어진 특정 인스턴스를 나타냅니다.
예를 들어 은행 계좌 class를 통해서 제 은행 계좌 객체(인스턴스)를 만들어낼 수 있습니다.
해당 계좌는 제 개인 정보, 계좌 번호와 같은 값이나 입금 출금과 같은 기능을 수행하는 메소드로 이루어졌겠죠?
우리는 하나의 클래스를 통해 수많은 다른 객체들을 만들 수 있습니다.
Basic Syntax
클래스의 선언 syntax는 다음과 같습니다.
class Class_Name
{
// declaration(s);
};
* 클래스의 첫 글자는 대문자로 선언하는 것이 관례입니다.
객체까지 연결된 예시를 살펴볼까요?
게임의 플레이어 클래스를 한번 살펴봅시다.
class Player
{
// attributes (속성)
std::string name;
int health;
int xp;
// methods (메소드)
void talk(std::string text_to_say);
bool is_dead();
};
// Object
Player hero;
Player villain;
Player *enemy = new Player();
delete enemy;
name이라는 이름을 담을 것으로 추정되는 문자열 속성,
체력과 경험치로 추정되는 정수 health, xp 속성이 확인됩니다.
또한 메소드로는 문자열을 입력받아 무언가를 수행하는 talk 메소드와,
boolean 값을 반환하는 is_dead 메소드가 존재하네요.
이를 활용하여 hero와 villain 객체가 선언되었습니다.
또한 동적으로 할당된 플레이어에 대한 포인터 enemy도 존재하네요.
클래스의 속성과 메소드에 접근하는 방법은 다음 포스트에서 살펴보겠습니다 😁
'C++ > 객체지향 프로그래밍 (OOP)' 카테고리의 다른 글
[C++] 함수 혹은 메소드에서 객체의 불필요한 복사를 방지하기 (0) | 2023.12.29 |
---|---|
[C++] 생성자 초기화 리스트 (Constructor Initialization List), 생성자 오버로딩 (0) | 2023.12.28 |
[C++] 헤더가드 (header guards) | #pragma once, #ifndef (2) | 2023.12.28 |
[C++] 클래스 멤버 접근하기 (Accessing Class Members) (0) | 2023.12.26 |
[C++] 객체 지향 프로그래밍 | Object Oriented Programming (OOP) (0) | 2023.12.26 |