Love Every Moment

〔파이썬〕클래스란? 클래스, 인스턴스, 속성, 메서드 사용법 본문

PROGRAMMING::LANGUAGE/Python

〔파이썬〕클래스란? 클래스, 인스턴스, 속성, 메서드 사용법

해 송 2022. 6. 30. 14:57
반응형

 

1. 클래스와 객체

  • 객체 = 인스턴스, 객체를 클래스와 연관지어 설명할 때에 인스턴스라고 부른다
  • 객체(Object)는 특정한 개념이나 모양으로 존재하는 것을 의미
  • 게임 캐릭터를 예로 들자면 기사, 마법사, 궁수, 웹 브라우저에서는 스크롤 바, 체크박스 등이 각각의 객체가 된다
  • 클래스(Class) 는 프로그래밍으로 객체를 만들 때에 사용하는 것으로, '속성(Attribute)'과 '메서드(Method)'를 가진다
  • 기사라는 클래스는 체력, 마나 등의 속성과 찌르기, 베기 등의 메서드를 가진다
  • 복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해서 문제를 해결하는 방식을 '객체 지향 프로그래밍'이라고 한다

 


 

2. 클래스 사용법

(1) 클래스 생성

class 클래스이름:
    def 메서드(self):
        코드
  • 클래스의 이름은 항상 대문자로 시작한다
  • 메서드의 첫 번째 매개변수는 반드시 self 를 지정해야 한다
  • self 는 인스턴스 자기 자신을 의미한다
  • self 는 파이썬이 함수 호출을 어떤 객체에 적용해주어야 하는지 알려주는 역할을 한다

 


 

(2) __init__()

def __init__(self):
	self.속성 = 값

# 인스턴스 생성 시에 받는 값을 속성에 넣기
def __init__(self, 매개변수1, 매개변수2):
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2
  • 모든 클래스는 __init__() 이라는 특별한 함수를 가진다
  • __init__() 함수를 이용해서 객체의 처음 상태를 직접 정의할 수 있다
__메서드명__() 처럼 앞뒤로 밑줄이 두 개씩 붙은 메서드는 파이썬이 자동으로 호출해주는 메서드로, 스페셜 메서드(special method) 또는 매직 메서드(magic method)라고 부른다

 


 

3. 속성과 메서드 사용하기

# Person 이라는 클래스 생성
class Person:
	def __init__(self, name, age = None):
		self.name = name
		self.age = age

	def greeting(self):
		print('Hello, my name is ' + self.name)
		if self.age:
			print('I\'m ' + str(self.age) + ' years old')

# james 라는 인스턴스 생성
rachel = Person('Rachel', 25)

# 메서드 호출
rachel.greeting()
# >>> Hello, my name is Rachel
# >>> I'm 25 years old
  • 클래스는 특정 개념을 표현만 할뿐 실제로 사용하려면 인스턴스를 생성해야한다
  • 인스턴스를 생성할 때에 인자로 넘겨준 'Rachel' 과 25 이 각각 self.name, self.age 속성에 저장된다
  • 메서드를 호출하는 방법은 인스턴스.메서드() 의 형식으로 사용한다
  • rachel.greeting() 처럼 사용

 

rachel = Person()
rachel.name = 'Rachel'
rachel.age = 25
  • 위에서는 rachel 인스턴스 생성 시에 이름과 나이를 알려주었지만,
  • 지금처럼 먼저 인스턴스를 생성하고서 속성을 추가하는 방법도 있다

 


 

4. 파이썬 내장 함수도 사실 클래스다

(1) type() 으로 확인

a = int(10)
print(a)
print(type(a))
# >>> 10
# >>> <class 'int'>

b = list(range(10))
print(b)
print(type(b))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# <class 'list'>

c = dict(x=10, y=20)
print(c)
print(type(c))
# {'x': 10, 'y': 20}
# <class 'dict'>

maria = Person('Maria')
print(type(maria))
# <class '__main__.Person'>
  • 위와 같이 int(), list(), dict() 등도 클래스이다
  • 따라서 아래와 같이 인스턴스를 생성하여 메서드를 호출할 수 있는 것이다

 

(2) 인스턴스 생성하여 메서드 호출

# b라는 인스턴스 생성
b = list(range(10))
# list 클래스 내부에 정의된 append() 메서드 호출
b.append(20)

 


 

5. 기타 클래스 사용 팁

(1) 메서드 안에서 메서드 호출하기

class Person:
    def greeting(self):
        print('Hello')
 
    def hello(self):
        self.greeting() # self.메서드() 형식으로 클래스 안의 메서드를 호출
 
james = Person()
james.hello()    # Hello
  • self.메서드() 의 형식으로 메서드 안에서 클래스 안의 다른 메서드를 호출할 수 있다

 


 

(2) 특정 클래스의 인스턴스인지 확인하기

class Person:
	pass

james = Person()
isinstance(james, Person)
>>> True
  • isinstance(인스턴스이름, 클래스이름) 으로 확인 가능하다
def factorial(n):
    if not isinstance(n, int) or n < 0:    # n이 정수가 아니거나 음수이면 함수를 끝냄
        return None
    if n == 1:
        return 1
    return n * factorial(n - 1)
  • 이와 같이 n이 정수가 아니면 리턴하는 코드에서 유용하게 쓰일 수 있다

 


 

6. 위치 인수와 키워드 인수 사용하기

(1) 위치 인수와 리스트 언패킹

class Person:
    def __init__(self, *args):
        self.name = args[0]
        self.age = args[1]
        self.address = args[2]
 
maria = Person(*['마리아', 20, '서울시 서초구 반포동'])
  • *args 처럼 리스트나 튜플 앞에 * 을 붙여서 매개변수로 사용한다
  • 매개변수에서 값을 가져오려면 args[0] 처럼 사용
 

파이썬 코딩 도장: 30.1 위치 인수와 리스트 언패킹 사용하기

Unit 30. 함수에서 위치 인수와 키워드 인수 사용하기 지금까지 간단하게 'Hello, world!'를 출력하는 함수와 두 수를 더하는 함수를 만들어보았습니다. 파이썬에서는 함수를 좀 더 편리하게 사용할

dojang.io

 


 

(2) 키워드 인수와 딕셔너리 언패킹

class Person:
    def __init__(self, **kwargs):    # 키워드 인수
        self.name = kwargs['name']
        self.age = kwargs['age']
        self.address = kwargs['address']
 
maria1 = Person(name='마리아', age=20, address='서울시 서초구 반포동')
maria2 = Person(**{'name': '마리아', 'age': 20, 'address': '서울시 서초구 반포동'})
  • **kargs 처럼 딕셔너리 앞에 ** 을 붙여서 사용한다
  • 매개변수에서 값을 가져오려면 kargs['name'] 처럼 사용
 

파이썬 코딩 도장: 30.2 키워드 인수 사용하기

지금까지 함수에 인수를 넣을 때 값이나 변수를 그대로 넣었습니다. 그러다 보니 각각의 인수가 무슨 용도인지 알기가 어려웠습니다. 보통은 함수의 사용 방법을 익힐 때 인수의 순서와 용도를

dojang.io

 

파이썬 코딩 도장: 30.3 키워드 인수와 딕셔너리 언패킹 사용하기

지금까지 함수를 호출할 때 키워드 인수로 직접 값을 넣었습니다. 이번에는 딕셔너리를 사용해서 키워드 인수로 값을 넣는 딕셔너리 언패킹을 사용해보겠습니다. 다음과 같이 딕셔너리 앞에 **(

dojang.io

 


 

7. 비공개 속성 사용하기

class Person:
    def __init__(self, name, age, address, wallet):
        self.name = name
        self.age = age
        self.address = address
        self.__wallet = wallet    # 변수 앞에 __를 붙여서 비공개 속성으로 만듦
    
    def pay(self, amount):
        self.__wallet -= amount   # 비공개 속성은 클래스 안의 메서드에서만 접근할 수 있음
        print('이제 {0}원 남았네요.'.format(self.__wallet))
 
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
maria.__wallet -= 10000    # 클래스 바깥에서 비공개 속성에 접근하면 에러가 발생함
maria.pay(3000)            # 클래스 안의 메서드로 비공개 속성에 접근
  • __속성  과 같은 형식으로 비공개 속성의 이름 앞에 밑줄 두 개를 붙여 사용한다
  • 단, __속성__ 처럼 뒤에도 밑줄 두 개가 붙으면 비공개 속성이 아니라는 것을 주의
  • 클래스 밖에서 비공개 속성에 접근하면 에러가 발생한다

 

class Person:
    def __greeting(self):
        print('Hello')
 
    def hello(self):
        self.__greeting()    # 클래스 안에서는 비공개 메서드를 호출할 수 있음
 
james = Person()
james.__greeting()    # 에러: 클래스 바깥에서는 비공개 메서드를 호출할 수 없음
  • 속성과 마찬가지로 메서드도 비공개 메서드로 만들어 사용할 수 있다
  • 이것 역시 클래스 밖에서는 사용할 수 없기 때문에, james.hello() 를 사용해야한다

 


 

참고

 

파이썬 코딩 도장: 34.1 클래스와 메서드 만들기

Unit 34. 클래스 사용하기 ​클래스는 객체를 표현하기 위한 문법입니다. 예를 들어 게임을 만든다고 하면 기사, 마법사, 궁수, 사제 등 직업별로 클래스를 만들어서 표현할 수 있습니다. ▼ 그림 3

dojang.io

 

파이썬 코딩 도장: 34.3 비공개 속성 사용하기

앞에서 만든 Person 클래스에는 hello, name, age, address 속성이 있었습니다. class Person:     def __init__(self, name, age, address):         self.hello = '안녕하세요.'         self.name = name         self.age

dojang.io

 

반응형
Comments