이번 시간은 파이썬에서 사용하는 클래스라는 개념에 대해 알아보겠습니다.
클래스는 객체 지향 프로그래밍 언어에 항상 나오는 녀석입니다.
그럼 먼저 객체 지향 프로그래밍에 대해 알아보겠습니다.
객체 지향 프로그래밍( Object-Oriented Programming Language )이란?
과거 프로그래밍 언어는 현재처럼 범용적으로 사용되는 것이 아니었습니다.
당시에는 프로그래밍이란 매우 특수한 분야,
특히나 사람이 직접 수행하기에는 한계가 있는 과학이나
군사적 모의실험(시뮬레이션)을 목적으로 사용되었습니다.
그 당시(1960년도)에는 하드웨어의 성능이 지금처럼 좋지 못해서
소프트웨어의 속도가 더 중요하기에 절차지향 프로그래밍 언어를 사용하였습니다.
절차지향 프로그래밍 언어(C 언어)는 객체지향 프로그래밍 언어보다
동일한 조건에서 속도가 같거나 빠르다고 합니다.
하지만 시간이 흘러 하드웨어의 발달과 객체지향 프로그래밍 언어의 발전으로
소프트웨어의 속도 외에도 많은 요소들이 중요하게 생각되었습니다.
특히나 과학자들은 기존의 2차원적인 개념의 시뮬레이션의 한계를 극복하고자
객체라는 개념을 이용해 실제 세계와 유사한 3차원적인 개념을
표현해내려 노력한 끝에 나온 것이 객체지향 프로그래밍 언어입니다.
객체란 존재하는 모든 형태의 사물을 뜻합니다.
현실 세계는 사물(객체)로 이루어져 있고,
발생하는 모든 사건들은 사물간의 상호작용을 통해 이루어 집니다.
객체란 객체의 속성을 이루는 데이터들 뿐만 아니라
그 데이터의 조작방법에 대한 내용도 포함하고 있어서,
그것을 다루는 개념이 객체지향입니다. 즉, 객체는 속성와 기능을 가지고 있는 것이 핵심입니다.
여기서 클래스의 개념이 포함된 내용을 빨간색으로 표시했습니다.
클래스는 객체라는 사물을 만들기 위한 틀입니다.
클래스에는 객체의 속성을 이루는 데이터와
데이터를 조작하는 방법의 내용이 포함됩니다.
그럼 한번 C++에서 클래스 사용을 한번 해보겠습니다.
그럼 위의 클래스를 이용해서 계산기를 한번 만들어보겠습니다.
/* OOP Language C++
How to Class
"calculator.h"
*/
#include<iostream>
class Calculator
{
private:
int mNum1;
int mNum2;
int mSelect;
int mResult;
public:
Calculator(); //객체의 시작
~Calculator(); //객체의 종료
int AddNumber(int,int);
int SubNumber(int,int);
int MultNumber(int,int);
int DivNumber(int,int);
};
Calculator::Calculator()
{
//객체의 시작 - 생성자
mNum1 = 0;
mNum2 = 0;
mSelect = 0;
mResult = 0;
}
Calculator::~Calculator()
{
//객체의 종료 - 소멸자
mNum1 = 0;
mNum2 = 0;
mSelect = 0;
mResult = 0;
}
int Calculator::AddNumber(int a,int b)
{
return a+b;
}
int Calculator::SubNumber(int a,int b)
{
return a-b;
}
int Calculator::MultNumber(int a,int b)
{
return a*b;
}
int Calculator::DivNumber(int a,int b)
{
return a/b;
}
클래스 틀이 만들어졌습니다. 클래스를 이용한 객체를 통해 계산기 예제를 만들어보겠습니다.
# cpp 구현부
#include "calculator.h"
using namespace std;
int main()
{
Calculator cal;
cout << "num1을 입력하세요 :" <<endl;
cin >> cal.num1;
cout << "num2을 입력하세요 :" <<endl;
cin >> cal.num2;
cout << "원하는 계산을 선택하세요" << endl;
cout << " 1: 덧셈, 2: 뺄셈, 3: 곱셈, 4: 나눗셈, 5: 종료" << endl;
cin >> cal.mSelect;
switch(cal.mSelect)
{
case 1:
{
cal.mResult = cal.AddNumber(cal.num1, cal.num2);
cout << " num1 + num2 = "<<cal.mResult<< endl;
break;
}
case 2:
{
cal.mResult = cal.SubNumber(cal.num1, cal.num2);
cout << " num1 - num2 = "<<cal.mResult<< endl;
break;
}
case 3:
{
cal.mResult = cal.MultiNumber(cal.num1, cal.num2);
cout << " num1 * num2 = "<<cal.mResult<< endl;
break;
}
case 4:
{
cal.mResult = cal.DivNumber(cal.num1, cal.num2);
cout << " num1 / num2 = "<<cal.mResult<< endl;
break;
}
case 5:
}
return 0;
}
어떤가요? 그냥 C로 짜도 똑같은데 왜 이렇게 짜냐고요?
클래스라는 녀석은 한번 만들어놓고 재사용이 가능합니다.
만들어 놓은 클래스를 선언하고 객체를 만든 뒤 어디서나 사용가능하며
과자1, 과자2, 과자3, 과자4, ....., 과자N 을 생성하듯이 같은 객체를
무한히 쓰고 싶을 때 생성할 수 있고, 내부에 선언한 함수 역시 마찬가지입니다.
이 수업은 파이썬 수업이기 때문에 기본적인 클래스 내용은 여기까지 하겠습니다.
그럼 본격적으로 파이썬에서 클래스의 사용에 대해 알아보겠습니다.
파이썬에서 클래스 생성할 때 기본 문법 먼저 확인해보겠습니다!
# Python Class
class 클래스이름(상속 클래스명):
#변수 선언
클래스 변수1
클래스 변수2
#함수 선언
def 클래스 함수1(self, 인자1, 인자2):
수행할 문장1
수행할 문장2
def 클래스 함수2(self, 인자1):
수행할 문장1
수행할 문장2
파이썬 클래스도 기본 구조는 비슷합니다.
그럼 이제 문법을 확인했으니, 계산기의 기본 동작을 구현해보겠습니다.
파이썬은 switch문이 없습니다.
따라서 함수 구현을 해야합니다.
switch함수 구현은 다음 시간에 다뤄보도록하겠습니다.
지금은 if~elif~else문을 사용해서 계산기를 구현했습니다.
클래스는 다음과 같이 구성합니다.
클래스를 사용할 때는 다음과 같이 객체를 만듭니다.
그리고 연산을 위해 값을 입력하고 기호를 선택합니다.
그리고 기호에 따라 해당 함수의 계산을 수행합니다.
오늘은 파이썬의 클래스에 대해 배워봤습니다.
'개발 이야기' 카테고리의 다른 글
[파이썬 완전정복] 파이썬 GUI [1] - tkinter Window (1) | 2020.06.25 |
---|---|
[파이썬 완전정복] PyCharm에 Github 연동하기 (0) | 2020.06.25 |
[파이썬 완전정복] 예외처리의 활용 방법 (0) | 2020.06.22 |
[파이썬 완전정복] 파일 관리 (txt, csv, xls) (2) | 2020.06.20 |
[파이썬 완전정복] 운영체제 모듈 (os module) [1] (0) | 2020.06.20 |