클래스, 객체, 인스턴스, 객체지향

😝 클래스가 뭔가요?

객체지향언어를 공부하면 중요하게 다루는 것 중 하나가 클래스(class)입니다.

📚 클래스(class)

✍ 클래스 안에 정의한 속성들을 데이터 멤버(data member)라고 부르고,
메소드를 멤버함수(member function)라고 부른다.

이정도만 배우고 클래스 생성방법 위주로 코딩을 진행합니다. 하지만 클래스가 언제, 왜 쓰는건지, 클래스가 정확히 무슨의미인지 잘 모릅니다.
(제가수업을제대로안들었을수도있습니다)

😸 그렇다면 이제 천천히 하나씩 정리를 해보도록 하겠습니다.

✨ 클래스의 시작은 객체지향언어부터!


▶ 객체지향언어(Object-Oriented Language)

IT관련 객체 지향 프로그래밍에서 사용하는 언어로서, 객체를 만들고 조작하며 객체끼리 관계를 맺음으로써 다수의 객체가 함께 수행될 수 있게 한다.

😨 사전적인 의미는 이렇게 나옵니다. 근데 저처럼 비전공자같은 경우 '객체? 그건 또 뭔데?'

▶ 객체(object)

객체 지향 프로그래밍(OOP)이나 설계에서, 데이터(실체)와 그 데이터에 관련되는 동작(절차, 방법, 기능)을 모두 포함한 개념.

이렇게 개념적인 글을 읽어보면 상당히 어려운데, 예시를 한 번 본다면 이해가 빨라질겁니다.

예를 들어 기차역에서 승차권을 발매하는 경우, 실체인 ‘손님’과 동작인 ‘승차권 주문’은 하나의 객체이다. 실체인 ‘역무원’과 동작인 ‘승차권 발매’도 하나의 객체이다. 같은 성질(구조와 형태)을 가지는 객체는 등급으로 정의하고, 같은 등급에 속하는 객체는 그 등급의 인스턴스라고 한다.
📢 [네이버 지식백과] 객체 [object, 客體, 客體空間] (IT용어사전, 한국정보통신기술협회)

예시를 잘 읽어보셨다면 이해가 되었으면서도 못한 부분이 있을거라고 생각합니다.

바로 '인스턴스' 입니다.

▶ 인스턴스(instance)

인스턴스(instance)는 같은 클래스에 속하는 개개의 객체로, 하나의 클래스에서 생성된 객체를 말한다. 즉 클래스가 구체화되어, 클래스에서 정의된 속성과 성질을 가진 실제적인 객체로 표현된 것을 의미한다. 이때 추상적인 개념인 클래스에서 실제 객체를 생성하는 것을 인스턴스화(instantiation)라고 한다.
📢[네이버 지식백과] 인스턴스 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 김치수)

📔 정리해보자면

클래스에서 정의되어있는 속성과 성질을 가진 객체가 있습니다.
그 객체를 소프트웨어에서 구현하면 '인스턴스'라고 부를 수 있겠습니다.
즉 instance라는 단어의 뜻처럼 실제 존재하는 것이죠.

자 그럼 이제, 클래스에 대해서 제대로 이해할 수 있을것 같습니다.
클래스를 조금 더 자세하게 알아보겠습니다.

▶ 클래스(class)

클래스는 각각의 객체를 표현하는 멤버 변수(속성)과 함께 그 객체들에 대한 메시지를 처리하는 멤버함수(행동, 메소드)를 정의해 놓은 것 이다. 그리고 객체는 이러한 형판에 따라 만들어진 사례가 되는 것이다.

이제 코드 작성으로 간단한 예시를 들어보겠습니다.

#include <iostream>
using namespace std;

class Circle {
public:
	int radius;
	double getArea();
};

double Circle::getArea() {
	return 3.14 * radius * radius;
}

int main() {
	Circle donut;
	donut.radius = 1;
	double donut_area = donut.getArea();
	cout << "donut 면적은 : " << donut_area << endl;

	Circle pizza;
	pizza.radius = 2;
	double pizza_area = pizza.getArea();
	cout << "pizza 면적은 : " << pizza_area << endl;

	return 0;
}

Circle이라는 클래스를 만들고, 멤버 변수(속성)으로 radius 멤버 함수(행동, 메소드)로 getArea를 만들었습니다.
그리고 donut 인스턴스, pizza 인스턴스를 만들어 속성으로 radius를 1과 2로 주었고, getArea 메소드로 면적을 구한 코드입니다.

😹 클래스를 쓰는이유와 객체지향 프로그래밍에 대해서는 다른 글로 찾아뵙도록 하겠습니다!


Reference

좋은 웹페이지 즐겨찾기