파이썬을 객체지향 언어로 만들어주는 방법 : 클래스 생성
- 객체지향 프로그래밍(Object Oriented Programming, OOP) : "객체"들의 모임으로 프로그래밍을 파악
- 클래스(Class) 생성 : 동일한 클래스로 서로 전혀 영향을 주지 않는 독립적인 객체들을 만들수 있다.
## 클래스 기본 구조
class 클래스 이름:
def 매서드(self): # self는 객체 초기화
기능수행코드
호출인스턴스이름 = 클래스() # 인스턴스가 self로 들어가서 기능을 수행
호출인스턴스이름.매서드() # 호출된 인스턴스 내의 매서드를 사용 가능
# 클래스 기본 구조 : 기능을 담은 클래스를 생성하고 호출하게 되면 인스턴스가 생성된다.
## 매직 매서드
class greet:
def __init__(self,name):
self._name = name
def hello(self):
return ("hello {0}".format(self._name))
def bye(self):
return ("bye {0}".format(self._name))
k = greet("james")
print(k.hello()) # hello james
print(k.bye()) # bye james
print(dir(k)) # ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_name', 'bye', 'hello']
# 매직 매서드 : 클래스 내에서 특별한 기능을 담당하는 메서드("__MM__"의 형태) ; dir(인스턴스이름) 의 형태로 확인할 수 있다.
## 클래스의 상속과 오버라이딩
class car1(object):
def move(self,x):
...
class car2(car1):
def move(self,x):
...
class car3(car2):
def move(self,x):
...
k = car3()
k.move(x)
# 클래스 상속: car1의 기능 -> car2로 상속 -> car3로 상속
: 상속을 받으면(파생 클래스) 상속을 해준(기반 클래스) 클래스의 모든 기능 및 값을 사용가능하다.
# 매서드 오버라이딩: car3를 호출하여 move 메서드 사용 -> 가장 마지막의 car3 내의 move가 수행됨
=====================================================================
## 클래스를 생성하는 세가지 방법
1. 변수값을 입력받는 set 함수와, 입력받은 변수값을 리턴하는 get함수로 구성
2. 생성자(__init__)을 사용하여 변수를 입력받아 사용
3. 생성자(__init__)을 사용하여 변수를 입력받고, 받은 변수를 property를 통해 값을 가져와 사용
=====================================================================
1. 변수값을 입력받는 set 함수와, 입력받은 변수값을 리턴하는 get함수로 확실하게 구분하며 기본 클래스 생성 (캡슐화 원칙)
- 캡슐화(encalsulation)원칙 : 객체 내부의 데이터를 외부에서 직접적인 접근을 못하게 하고, 필요한 경우의 접근 방법을 제공
class User():
name = ''
def set_name(self, name): # name을 변수 값으로 설정하는 함수
self._name = name
def get_name(self): # 사용하기 위해 name변수의 값을 리턴하는 함수
return self._name
user1 = User()
user1.set_name('Jaeseok')
print(user1.get_name())
2. 생성자를 이용하여 객체의 값을 초기화 하는 클래스를 생성 (생성자)
- 생성자 __init__ : 사용자가 따로 호출하지 않아도 객체를 생성할 때 자동으로 호출되는 메서드
class User():
def __init__(self,name):
self._name = name
def get_name(self):
return self._name
user1 = User('Jaeseok')
print(user1.get_name())
3. 프로퍼티를 이용하여 메서드를 호출할 필요없이 값을 불러오고 설정할 수 있는 클래스 생성 (프로퍼티)
- 프로퍼티(property) : 데코레이터(decorator) 함수로 속성에 접근하는 방법을 더 간편하고 안전하게 만들기 위한 기능
- @property: 속성에 직접 접근하듯 user.name으로 값을 가져올 수 있도록 한다.
- @name.setter: 속성의 값을 user.name = 'user_name'으로 할당 할 수 있도록 한다.
class User():
def __init__(self,name):
self._name = name
@property
def name(self): # 값 반환 메서드
return self._name
@name.setter
def name(self,value): # 값 설정 메서드
self._name = value
user1 = User("Jaeseok")
print(user1.name)
<참고자료>
- 클래스의 개념: https://wikidocs.net/28
- 객체지향언어 : https://devkingdom.tistory.com/123
- 프로퍼티 : https://blog.naver.com/codeitofficial/221684462326
- 데코레이터 : https://blog.naver.com/codeitofficial/221673642106
- 매직 메소드 : https://wikidocs.net/83755
'Code-note' 카테고리의 다른 글
[프로젝트] BlackJack 구현 - python (2) | 2024.10.01 |
---|---|
[프로젝트]QR code 생성기 -python (2) | 2024.09.11 |
[문제리뷰] 방문 길이-python ; (programmers/Lv2) (2) | 2024.09.10 |
[기초문법]쓸만한 코드 LV.1-2 -python (0) | 2024.08.18 |
[기초문법]쓸만한 코드 LV.0 -python (2) | 2024.07.20 |