-
TIL.30 클래스와 메서드 사용하기TIL 2020. 11. 7. 23:04728x90
## 클래스, 매서드 사용하기
## 클래스란 == 객체를 표현하기 위한 문법으로
예를 들어 게임 상에의 마법수, 궁수, 사제 등 직업별로 클래스를 만들어 표현 할 수 있다.
# 프로그래밍에서의 클래스는 집, 자동차, 나무 우베 브라우저의 스크롤 바, 체크 박스, 버튼 등이 대표적이다.
## 집, 자동차, 스크롤 바, 체크박스 처럼 특정한 개념이나 모양으로 존재하는 것을 객체(object)라고 부른다.
## 프로그래밍의 객체를 만들때 사용하는 것이 클래스이다.
## 게임 케릭터로 예를 들어보자
## 기사 케릭터를 클래스로 표현해보자.
## 기사 케릭터의 직업은 클래스
## 해당 케릭터의 체력, 마나, 공격력 등의 데이터를 클레스의 속성(attribute)
## 이런 기사가 베고 찌르는 등의 기능을 메서드(method)라고 부른다.
## 이러한 프로그래밍 방법을 객체 지향 (object oriented)프로그래밍이라 부르고
파이썬은 객체 지향 프로그래밍 언어이다.
## 객체 지향 프로그래밍은 복잡한 문제를 잘게 나누어 객체로 만들고, 그 객체를 조합해서 문제를 해결한다.
## 이는 현실 세계의 복잡한 문제를 처리하는데 유용하며 기능 개선 및 발전 시에도 해당 클래스만 수정하면 되므로 유지 보수에도 효율적이다.
## 사실 파이썬에서 사용되는 모든 것들은 객체이다.
## 클래스와 메서드 생성하기
# class 클래스이름:
# def 메서드(self):
# 코드
class Person: def greeting(self): print('Hello')
## 클래스를 생성할때는 함수를 만드는 방법과 유사하다.
## 여기서 클래스의 이름은 보통 대문자로 시작한다. # () 괄호 없음
## 메서드는 클래스 안에 들어이있는 함수를 말하며 특히, 메서드의 첫 번째 매개변수는 반드시 self로 지정한다.
## 클래스 사용하기
# 인스턴스 = 클래스()
class Person: def greeting(self): print('Hello') james = Person()
## 위와 같이 클래스의 ()를 붙인 뒤 변수에 할당하여 사용할 수 있다.
## 여기서 james 는 Person의 인스턴스(instance)이다.
## 클래스는 특정 개념을 표현만 하기때문에 사용하기 위해선 인스턴스를 생성해야 한다.
## 매서드 호출하기
# 인스턴스.메서드()
class Person: def greeting(self): print('Hello') james = Person() james.greeting() :: Hello
## 메서드를 호출 할 경우는 클래스가 아닌 인스턴스를 이용해 호출한다.
## 파이썬에서의 흔히 볼 수 있는 클래스
## 사실 이제껏 사용안 int, list, dict 등도 클래스이다.
(여지껏 클래스, 인스턴스 와 같은 개념을 몰랐을뿐 계속 사용 중 이었다.)
a = int(10) # 10 b = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] c = dict(x=10, y=20) # {'x': 10, 'y': 20}
## int 클래스에 10을 넣어 인스턴스 a 를 만듬
## list 클래스에 range(10)을 넣어 인스턴스 b 를 만듬
## dict 클랙스에 x, y 값을 넣어 인스턴스 c 를 만듬
## 리스트 b에 20이라는 값을 추가할때를 생각해보자
b = list(range(10)) b.append(20) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20]
## 즉 파이썬에서는 자료형도 클래스이므로,
여기서는 list 클래스에 range(10)이라는 값을 넣어 인스턴스 b 를 만들고,
이를 통해 메서드를 사용한 것과 같은 방식이다.
### 인스턴스와 객체의 차이점
## 클래스로 만드는 인스턴스는 사실 객체와 같은 뜻을 가지고 있다.
## 보통 "객체만"을 설명할때는 객체로 표현하고, "클래스와 연관지어" 설명할때는 인스턴스라 표현한다.
a = list(range(10)) b = list(range(20))
## 리스트 변수 a, b 는 객체이며// a 와 b 는 list 클래스의 인스턴스이다.
## 빈클래스 만들기
# 빈클래스를 만들때는 코드 부분에 pass를 넣어주면 된다.
class Person: pass
## 메서드 안에서 메서드 호출하기
class Person: def greeting(self): print('Hello' def hello(self): self.greeting() # self.메서드() 형식으로 클래스 안의 메서드를 호출 james = Person() james.hello() :: Hello
## 메서드 안에서 메서드를 호출할 때는 self.메서드() 형식으로 호출해줘야한다.
## 만약 self 없이 메서드 이름만 사용하면 바깥쪽에 있는 함수를 호출 한다는 뜻이므로 주의하자.
## 특정 클래스의 인스턴스인지 확인하기
## 특정 클래스의 인스턴스가 맞으면 True, 아니면 False를 반환합니다.
# isinstance(인스턴스, 클래스)
class Person: pass james = Person() isinstance(james, Person) :: True
### isinstance 함수 사용하기
## isinstance는 주로 객체의 자료형을 판단할때 사용하는데, 이를 이용해 if 조건문에 적용시킬수 있다.
def factorial(n): if not isinstance(n, int) or n < 0: # n이 정수가 아니거나 음수이면 함수를 끝냄 return None if n == 1: return 1 # 종료 조건 return n * factorial(n - 1) a = factorial(3) print(a) # 6
## 1부터 n까지 양의 정수를 차례대로 곱하는 팩토리얼 함수를 만들때,
실수와 음의 정수는 계산할 수 없다는 것을 isinstance를 사용하여
정수 일때만 계산하도록 만들 수 있다.
728x90'TIL' 카테고리의 다른 글
TIL.32 클래스의 속성과 메서드 (0) 2020.11.09 TIL. 31 클래스의 속성, 비공개 속성 사용하기 (0) 2020.11.08 TIL. 29 전역 변수, 지역변수, 클로저 알아보기 (0) 2020.11.06 TIL. 28 람다 표현식(lambda) 사용하기 (0) 2020.11.05 TIL. 27 재귀 호출(recursive call) (0) 2020.11.04