-객체지향(object oriented)프로그래밍은 복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해 문제를 해결.
-복잡한 문제를 처리하는데 유용하며, 기능 개선, 발전할 때도 해당 클래스만 수정하면 되므로 유지 보수에 효과적
문법*
class 클래스이름:
def 메서드(self):
코드
-메서드의 첫 매개변수는 반드시 self 지정해야 함.
예시
class Person:
def greeting(self):
print("Hello")
-클래스에 괄호 붙인 뒤 변수에 할당해야 한다.
인스턴스 = 클래스()
>>> james = Person()
-Person으로 변수 james를 만들었는데, 이 james가 Person의 인스턴스(instance)임
-클래스는 특정 개념을 표현만 할 뿐 사용하려면 인스턴스를 생성 해야함.
-메서드는 클래스가 아니라 인스턴스를 통해 호출
문법: 인스턴스.메서드 ()
james.greeting() Hello
-인스턴스를 통해 호출하는 메서드를 인스턴스 메서드라고 부름
-int, list, dict, 자료형등도 클래스다.
-이 클래스들 역시 인스턴스를 만들고 메서드를 사용함.
a = int(10)
print(a)
10
-속성(attribute)를 만들 때는 init 메서드 안에서 self.속성에 값을 할당
-앞 뒤로 밑 줄 두개가 붙은 메서드는 파이썬이 자동으로 호출해주는 메서드인데, special method, magic method라고 부름.
문법
class 클래스이름():
def __init__(self):
self.속성 = 값
예제
class Person():
def __init__(self):
self.hello = "안녕하세요"
def greeting(self):
print(self.hello)
james = Person()
james.greeting
실행결과: 안녕하세요
-self는 인스턴스 자기 자신을 의미
-init메서드에서 self 다음에 값을 받을 매개변수 지정.
-매개변수를 self.속성에 넣어준다.
문법
class 클래스이름:
def __init__(self, 매개변수1, 매개변수2):
self.속성1 = 매개변수1
self.속성2 = 매개변수2
예시
class Person:
def __init__(self, name, age, address):
self.hello = '안녕하세요.'
self.name = name
self.age = age
self.address = address
def greeting(self):
print('{0} 저는 {1}입니다.'.format(self.hello, self.name))
maria = Person('마리아', 20, '서울시')
maria.greeting()
print('이름:', maria.name)
print('나이:', maria.age)
print('주소:', maria.address)
결과
안녕하세요. 저는 마리아입니다.
이름: 마리아
나이: 20
주소: 서울시
-클래스 바깥에서 속성에 접근할 떄는 인스턴스.속성 형식으로 한다.
-인스턴스를 통해 접근하는 속성을 인스턴스 속성이라 부름.
-비공개 속성은 속성 앞에 __
를 쓴다. 단, 앞뒤로 사용하면 무효.
-비공개 속성은 클래스 안에 메서드에서만 접근 가능.
-클래스 밖에서 비공개 속성에 접근하면 에러 발생.
-중요한 값을 바깥에서 바꾸지 못하게 할 대 비공개 속성 사용.
비공개 속성 문법
class 클래스이름:
def __init__(self, 매개변수)
self.__속성 = 값
예시
class Person:
def __init__(self, name, age, address, wallet):
self.hello = '안녕하세요.'
self.name = name
self.age = age
self.address = address
self.__wallet = wallet
def pay(self, amount):
self.__wallet -= amount
print('이제 {0}원 남았네요.' .format(self.__wallet))
def greeting(self):
print('{0} 저는 {1}입니다.'.format(self.hello, self.name))
maria = Person('마리아', 30, '서울', 10000)
maria.pay(3000)
결과: 이제 7000원 남았네요.