관리 메뉴

13. 파이선(Python) 클래스(Class)1 본문

Python/Python 기본 개념

13. 파이선(Python) 클래스(Class)1

ª_ª 2017. 10. 19. 10:04
728x90
반응형


 

클래스(class)?

  클래스란 여러 가지 답변이 존재 하겠지만 공통적으로 이야기 하는 부분은 연관 있는 데이터를 하나로 묶어서 프로그램의 구현 및 관리를 용이하게 합니다. 참고로 c언어에는 클래스가 없습니다. , 클래스가 없더라도 프로그램을 충분히 만들 수 있습니다.

 

클래스 개념

  클래스는 틀(붕어빵, 타코야끼, 와플)이라고 생각하시면 됩니다. 붕어빵 틀로 찍으면 붕어빵(인스턴스)이 생성되고 타코야끼 틀로 찍으면 타코야끼(인스턴스)가 생성되고 와플 틀로 찍으면 와플(인스턴스)이 나오게 됩니다. , 클래스란 설계도면(클래스)이고 인스턴스는 클래스에 의해서 만들어진 것을 뜻합니다.

 

1. 클래스 사용법

함수를 사용할 때는 def라는 키워드를 사용했지만 클래스는 class라는 키워드를 사용합니다.

 

1.1. 클래스 정의

>>> class Student:

pass

 

>>> stu1 = Student()

>>> stu1

<__main__.Student object at 0x02C337D0>

클래스 안에는 변수나 함수를 넣을 수 있습니다. 위 코드에서는 가장 간단한 형태의 클래스 정의를 보여주기 위해 변수나 함수를 넣지 않고 pass라는 키워드만을 사용했습니다. pass 키워드를 사용하면 클래스 내부에 아무것도 넣지 않은 상태의 클래스를 만들 수 있게 됩니다.

 

객체와 인스턴스의 차이점

클래스에 의해서 만들어진 객체를 인스턴스라고도 합니다. 둘이 헷갈리는데 한 번 자세하게 알아보도록 하겠습니다. stu1 = Student() 이렇게 만들게 되면 stu1은 객체입니다. 그리고 stu1라는 객체는 Student의 인스턴스 입니다. , 인스턴스라는 것은 특정 객체(stu1)가 어떤 클래스(Student) 객체인지를 관계 위주로 설명 할 때 사용됩니다.

 

1.2. 클래스 변수

>>> class Student:

name = "홍길동

클래스의 이름은 Student입니다. 이 클래스는 학생의 정보를 제공하기 위해서 만들었습니다. 정보를 확인하기 위해서는 객체를 생성해야 합니다. 아래에 객체를 생성하도록 하겠습니다.

 

>>> stu1 = Student()

위와 같이 하면 stu1라는 객체를 만들어서 Student 클래스를 사용할 수 있습니다.

 

stu1의 객체를 활용해서 클래스 안의 정보를 얻고 싶으면 어떻게 해야 될까요?

>>> stu1.name

'홍길동

‘.’(도트 연산자)를 이용해서 호출 할 수 있습니다. 변수나 함수를 접근할 때 객체.(변수) or 객체.(함수)”를 사용하면 됩니다.

 

1.3. 클래스 함수

>>> class Student:

name = "홍길동"

def ShowInfo(self):

print("이름 : %s" %self.name)

1.2와 같이 클래스의 이름은 Student입니다. 함수를 추가 했습니다. 이름 정보를 보여주는 함수입니다.

 

똑같이 객체를 만들어 보겠습니다.

>>> stu1 = Student() 


함수에 접근하겠습니다.

>>> stu1.ShowInfo()

이름 : 홍길동

정상적으로 출력이 됩니다.

 

2. self 알아보기

클래스를 사용하다보니까 self라는 것을 보게 됩니다.

 

2.1. self 함수 예제 클래스

>>> class Test:

def func1():

print("func1")

def func2(self):

print("func2")

func1self가 없고 func2self가 있습니다.

 

객체를 만들고 테스트 해보겠습니다.

>>> test = Test()

>>> test.func1()

Traceback (most recent call last):

File "<pyshell#18>", line 1, in <module>

test.func1()

TypeError: func1() takes 0 positional arguments but 1 was given


>>> test.func2()

func2

위에 결과를 보면 self가 없으면 에러 구문을 발생시키고 self가 있으면 정확한 결과 값을 보여주게 됩니다. self는 자기 자신을 표현하는 것이라고 보면 됩니다.


test.func2(self) -> test.func2(test)


* self == test


2.2. self 변수 예제 클래스

>>> class Student:

name = "홍길동"

def SetName(self,name1):

self.name = name1

def ShowInfo(self):

print("이름 : %s" %self.name)

 

>>> stu1 = Student()

>>> stu1.ShowInfo()

이름 : 홍길동


>>> stu1.SetName("임꺽정")

>>> stu1.ShowInfo()

이름 : 임꺽정

위에 예제를 살펴보면 함수뿐만 아니라 일반 변수에도 self를 사용하는 것을 볼 수 있습니다.

 

2.3. self가 있는 변수

>>> class Student:

def SetName(self,name1):

self.name = name1

def ShowInfo(self):

print("이름 : %s" %self.name)


>>> stu2 = Student()

>>> stu2.ShowInfo()

Traceback (most recent call last):

File "<pyshell#9>", line 1, in <module>

stu2.ShowInfo()

File "<pyshell#7>", line 6, in ShowInfo

print("이름 : %s" %self.name)

AttributeError: 'Student' object has no attribute 'name'


>>> stu2.SetName("홍길동2")

>>> stu2.ShowInfo()

이름 : 홍길동2

 

2.4. self가 없는 변수

>>> class Student:

def SetName(self,name1):

name = name1

def ShowInfo(self):

print("이름 : %s" %self.name)

 

>>> stu2 = Student()

>>> stu2.ShowInfo()

Traceback (most recent call last):

File "<pyshell#15>", line 1, in <module>

stu2.ShowInfo()

File "<pyshell#13>", line 6, in ShowInfo

print("이름 : %s" %self.name)

AttributeError: 'Student' object has no attribute 'name'


>>> stu2.SetName("홍길동3")

>>> stu2.ShowInfo()

Traceback (most recent call last):

File "<pyshell#17>", line 1, in <module>

stu2.ShowInfo()

File "<pyshell#13>", line 6, in ShowInfo

print("이름 : %s" %self.name)

AttributeError: 'Student' object has no attribute 'name'

 

self를 사용하는 이유?

첫 번째로 함수에서 self를 사용하는 이유는 정확하게 모르겠지만 사용해야 클래스의 함수를 사용할 수 있다는 것을 알게 되었습니다.

두 번째로 위에 예제를 보면 알 수 있지만 변수에 self를 사용하는 이유는 자기 자신이라는 것을 알려주기 위해서 사용 합니다.

 

3. 클래스의 __init__(self)

  파이썬에서 __init__(self)는 메서드 생성자라고 합니다. 파이썬에서 __를 사용하는 함수는 모두 특별한 메서드입니다. 메서드는 클래스에서 사용하는 함수를 메서드라고 합니다. 참고로 init초기화하다라는 뜻을 가진 initialize 약자입니다.

 

3.1 __init__(self) 예제1

>>> class Test:

def __init__(self):

print("생성자 입니다.")

 

>>> test = Test()

생성자 입니다.

객체를 생성하는 순간 내가 접근하지 않았던 함수가 동작됩니다.

 

3.2 __init__(self) 예제2

>>> class Test:

def __init__(self,name):

self.name = name


>>> test = Test()

Traceback (most recent call last):

File "<pyshell#7>", line 1, in <module>

test = Test()

TypeError: __init__() missing 1 required positional argument: 'name’

여기를 살펴보면 객체를 생성하는 순간 에러가 발생하게 됩니다.

이유는 Test() 안에 값을 넣지 않아서 에러가 납니다.

 

>>> test = Test("홍길동")

이렇게 사용하면 에러가 나지 않습니다. , 여기서 알 수 있는 부분은 __init__(self)라는 부분의 함수를 사용하게 되면 거기에 맞는 값을 넣어 줘야 객체가 생성된다는 것을 알 수 있습니다.





728x90
반응형
Comments