╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

Python/Python 기초

[Python] Class (Class 기본, 객체)

재안안 2022. 3. 15. 15:36

이번에 알아볼 것은 클래스(class)이다.

참고로 이번글은 매우매우매우 주관적인 의견이 많이 들어갔으므로 그 점을 감안해야겠다.

 

클래스를 객체(object)의 개념을 사용해서 설명하고 싶으니 우선 객체에 대해 알아보자.

간단하게만 알아보겠다.

 

아래의 사진은 파이썬 공식홈페이지의 용어사전에서 object를 검색한걸 캡쳐해온 것이다.

 

https://docs.python.org/3.9/glossary.html

 

파이썬에서 객체(object)는 선언된 모든 데이터와 정의된 모든 함수들을 포괄하는 단어다.

실체를 가지고 있는 모든 데이터는 객체라고 봐도된다.

이때 실체를 가지고 있다는 것은 '이름'을 가지고 있다는 것과 같다고 생각해도 좋다.

이름으로 접근할 수 있으면 실체가 있는 것이다.

 

본인은 객체를 아래와 같이 생각한다.

 

1차원 객체 : 변수

2차원 객체 : 함수(메소드)

3차원 객체 : 클래스

 

위와같이 생각하는 이유는 객체란 실체를 가지는 모든 데이터를 뜻하는데 그 객체의 구분에 있다.

본인은 그 이름이 어떤 요소를 가지고 있는지, 혹시 어떤 범위를 만드는지로 구분한다.

 

대부분의 변수

함수실행문변수

클래스함수변수를 가지고 있다.

 

아래의 사진을 통해 변수, 함수, 클래스의 포함관계를 표현했다.

변수, 함수, 클래스 포함 관계

 

 

여기까지 객체의 요소와 포함관계를 설명했으니 이제 범위에 대해 알아보겠다.

 

범위 생성의개념를 잘 설명해줄 수 있는 예제로 지역변수(local variable)가 있다.

지역변수란 함수 원형에 선언된 변수를 뜻한다.

 

지역변수 local이 지역변수고 함수 밖에서는 접근할 수 없다.

 

지역변수는 함수 밖에서 접근할 수 없는데 그 이유로는 변수 존재의 여부 때문이다.

지역변수는 범위의 한가지 요소일 뿐이다.

함수 호출시 함수의 '범위'가 생성되고 함수 종료시 함수의 '범위'가 소멸한다.

지역변수를 통해 객체가 가지는 범위의 개념을 설명했다.

 

이제 객체와 범위의 관계를 설명하겠다.

 

변수 : 생성x

함수 : 생성o 지속x

클래스 : 생성o 지속o

 

클래스가 생성하는 범위는 클래스 객체가 없어질 때 없어진다.

 

이처럼 클래스는 3차원 객체라는 개념(?)을 기억하고 이제 클래스를 선언해보자.

 

선언을 통해 원형을 만든다는 점에서는 클래스와 함수의 선언은 비슷하다. 

 

함수 원형의 목적은 필요시마다 호출하는 것이라면 

클래스 원형은 원형을 통해 클래스 자료형 데이터를 생성하는 것이다.

 

아래의 사진을 통해 설명하겠다.

 

class keyword

class 선언 방식은 class classname : suite이다

 

class는 키워드

classname은 클래스 이름

: 범위지정

suite는 실행코드를 뜻한다.

 

아래의 예제를 통해 확인해보겠다.

Class 사용 예제
Class 사용 실행 결과

해당예제에서는 클래스 선언, 생성, 자료형 출력, 클래스 요소 접근방식을 다루고있다. 

 

우선 class키워드를 사용해서 MyClass의 클래스 원형이 생성되었고

클래스의 요소들은 모두 들여쓰기를 통해 작성되었다.

 

class 접근시 __init__을 제일 먼저 실행한다.

클래스함수 __init__에서 init은 initialize(초기화)의 약자이다.

해당 예제에서는 __init__을 통해 클래스를 실체화한다.

 

이후에 myClass1를 초기화했다. 이때 MyClass가 실체화된

myCLass1는 instance object라고 한다.

 

myClass1의 type 출력과 요소 접근을 하였다.

클래스 요소의 접근은 클래스이름.요소이름으로 한다.

클래스 내에서 요소접근은 클래스이름대신 self를 사용한다. self.요소이름

 

여담으로 __init__은 클래스의 요소들을 초기화하는 함수이다.

__init__없이도 클래스의 생성은 가능하다.

 

아래의 예제를 통해 확인하겠다.

 

클래스 생성 예제
실행 결과