객체지향(Object Oriented) 프로그래밍
객체지향 프로그래밍은 복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해서 문제를 해결합니다.
현실세계의 복잡한 문제를 처리하는데 유용하며 기능을 개선하고 발전시킬 때도 해당 클래스만 수정하면 되므로,
큰 프로젝트의 유지보수에도 매우 효율적입니다.
객체가 가진 데이터를 클래스의 속성(Attribute)이라 부르고 객체가 갖는 기능을 메서드(Method)라고 부릅니다.
클래스(Class)
클래스는 사용자, 정의 객체를 만들기 위한 주형이라고 생각하면 됩니다.
클래스 정의는 보통 클래스의 인스턴스를 대상으로 연산하는 메서드 정의를 포함하고 있습니다.
# 클래스명으로 주로 PascalCase(UpperCamelCase)를 씁니다.
class ClassName:
def method_name(self):
method_body
class_body
지금까지 사용해온 int, list, dict 등도 클래스입니다. 우리는 이 클래스로부터 인스턴스를 만들고
메서드를 사용해왔습니다.
객체(Object) ? 인스턴스(Instance)?
객체를 언급할 땐 단어 하나만 활용하여 단지 '객체'라고 표현합니다.
그와 달리 인스턴스(Instance)는 특정 클래스로 만든 실체라고 생각하시면 됩니다.
예를 들어 인스턴스의 경우 '리스트 클래스로 만들어진 인스턴스다'라고 말할 수 있습니다.
부르는 구체적인 것은 조금 달라도 결국 둘은 같은 말입니다.
인스턴스의 생성은 아래의 예제처럼 클래스명 오른편에 소괄호를 붙여서 만듭니다.
# 공간을 만들었다고 생각하면 쉬움
instance_variable = ClassName()
메서드(Method)
메서드(Method)는 클래스 바디 안에서 정의 되는 함수입니다.
클래스의 인스턴스의 어트리뷰트(attribute)로서 호출되면, 그 메서드는 첫번째 인자로 인스턴스 객체(self)를 받습니다.
첫번째 인자를 설정 안하면 에러가 발생합니다. 이 첫 번째 인자를 'self'라고 씁니다.
class ClassName:
def method_name(self):
method_body
class_body
클래스 속성(Attribute)
클래스 속성(Attribute)를 만들 때는 init 메서드 안에서 self.속성에 값을 할당하면 됩니다.
Class Person:
def __init__(self):
self.hello = "안녕하세요"
james = Person()
print(james.hello)
__init__ 메서드는 james = Person()처럼 클래스에 소괄호(())를 붙여서 인스턴스를 만들 때 호출되는
특별한 메서드(special method, magic method)입니다.
__init__은 initialize의 줄임말로 인스턴스(객체)를 초기화(메모리에 공간을 할당하고 값을 부여함)합니다.
밑줄 두개(__double under, 던더)가 양 옆으로 붙어있는 메서드는 파이썬이 자동으로 호출하는 메서드입니다.
스페셜 메서드(special method) 혹은 매직 메서드(magic method)라고 부릅니다.
던더 메서드로 불리기도 합니다.
파이썬의 여러가지 기능을 사용할 때, 이 던더 메서드를 구현하는 식으로 사용하게 됩니다.
속성은 __init__ 메서드에서 만든다는 점과 self에 마침표(.)를 붙여 속성명을 붙이고 값을
할당하는 점을 기억해두세요.
클래스 바디에서도 속성을 접근할 때 self.속성과 같이 self에 마침표를 찍고 사용하면 됩니다.
class Person:
def __init__(self):
self.hello = "안녕하세요"
def greeting(self):
print(self.hello)
james = Person()
james.greeting()
self란
self는 인스턴스 자기 자신을 의미합니다.
위 예제에서 인스턴스가 생성될 때 self.hello = "안녕하세요"처럼 자기 자신에 속성을 추가하여 사용했습니다.
__init__의 매개변수 self에 들어가는 값은 Person() 인스턴스라고 할 수 있습니다.
self가 완성된 후에는 변수인 james에 할당 되었습니다.
이후 메서드를 호출하면 현재 인스턴스가 자동으로 매개변수 self에 들어옵니다.
그래서 greeting 메서드에서 print(self.hello)처럼 속성을 출력할 수 있었습니다.
self.dic
dic를 통해서 인스턴스의 객체를 확인할 수 있습니다.
예제
class Person:
def __init__(self, name, age, adress):
self.name = name
self.age = age
self.adress = adress
a = Person(input('이름은 무엇인가요?'), input('나이는 무엇인가요?'), input('주소는 무엇인가요?'))
b = Person(input('이름은 무엇인가요?'), input('나이는 무엇인가요?'), input('주소는 무엇인가요?'))
print(f"첫번째 이름 : {a.name}")
print(f"첫번째 나이 : {a.age}")
print(f"첫번째 주소 : {a.adress}")
print(f"두번째 이름 : {b.name}")
print(f"두번째 나이 : {b.age}")
print(f"두번째 주소 : {b.adress}")
비공개 속성 만들기
class Person3:
def __init__(self, name, age, address, wallet):
self.hello = "안녕하세요."
self.name = name
self.age = age
self.address = address
self.__wallet = wallet # 비공개 속성, 언더스코어 두개 붙이면 된다. 외부 접근 불가
def __greeting(self): # 비공개 속성
print(f"{self.hello} 제 이름은 {self.name}입니다.")
def amount(self):
print(self.__wallet)
iks = Person3("이기수", 88, "경기도 시흥", 20000)
Person3.amount(iks)
# 하지만 비공개 속성을 메서드로 간접적으로 제어할 수는 있다.

staticmethod, classmethod
클래스 자체에서 클래스에 영향을 미치는 함수를 짜고 싶을 수도, 클래스, 객체 둘다 상관없이 동작하는 함수를 짜고 싶을 때 사용한다. 추후 설명 보완
@staticmethod
# 객체와 상관없이 동작하는 메서드, class, self 둘 다 안씀
def pay(amount):
pass
@classmethod
# 클래스 자체에 동작하는 메서드(self 안씀)
def from_string(cls, string):
name, age , address, __wallet = string.split(',')
return cls(name, age, address, __wallet) # cls는 클래스의 줄임말
'데이터 분석 및 시각화 > 파이썬' 카테고리의 다른 글
[Python] 기초 정리(Pandas_Series) (2) | 2023.01.18 |
---|---|
[Python] 기초 정리(Numpy) (0) | 2023.01.16 |
[Python] 기초 정리(전역변수, 지역변수, 람다(lambda)) (0) | 2023.01.13 |
[Python] 기초 정리(함수, 문자열 메서드 join) (0) | 2023.01.12 |
[Python] 기초 정리(tuple, random, set) (0) | 2023.01.11 |
객체지향(Object Oriented) 프로그래밍
객체지향 프로그래밍은 복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해서 문제를 해결합니다.
현실세계의 복잡한 문제를 처리하는데 유용하며 기능을 개선하고 발전시킬 때도 해당 클래스만 수정하면 되므로,
큰 프로젝트의 유지보수에도 매우 효율적입니다.
객체가 가진 데이터를 클래스의 속성(Attribute)이라 부르고 객체가 갖는 기능을 메서드(Method)라고 부릅니다.
클래스(Class)
클래스는 사용자, 정의 객체를 만들기 위한 주형이라고 생각하면 됩니다.
클래스 정의는 보통 클래스의 인스턴스를 대상으로 연산하는 메서드 정의를 포함하고 있습니다.
# 클래스명으로 주로 PascalCase(UpperCamelCase)를 씁니다.
class ClassName:
def method_name(self):
method_body
class_body
지금까지 사용해온 int, list, dict 등도 클래스입니다. 우리는 이 클래스로부터 인스턴스를 만들고
메서드를 사용해왔습니다.
객체(Object) ? 인스턴스(Instance)?
객체를 언급할 땐 단어 하나만 활용하여 단지 '객체'라고 표현합니다.
그와 달리 인스턴스(Instance)는 특정 클래스로 만든 실체라고 생각하시면 됩니다.
예를 들어 인스턴스의 경우 '리스트 클래스로 만들어진 인스턴스다'라고 말할 수 있습니다.
부르는 구체적인 것은 조금 달라도 결국 둘은 같은 말입니다.
인스턴스의 생성은 아래의 예제처럼 클래스명 오른편에 소괄호를 붙여서 만듭니다.
# 공간을 만들었다고 생각하면 쉬움
instance_variable = ClassName()
메서드(Method)
메서드(Method)는 클래스 바디 안에서 정의 되는 함수입니다.
클래스의 인스턴스의 어트리뷰트(attribute)로서 호출되면, 그 메서드는 첫번째 인자로 인스턴스 객체(self)를 받습니다.
첫번째 인자를 설정 안하면 에러가 발생합니다. 이 첫 번째 인자를 'self'라고 씁니다.
class ClassName:
def method_name(self):
method_body
class_body
클래스 속성(Attribute)
클래스 속성(Attribute)를 만들 때는 init 메서드 안에서 self.속성에 값을 할당하면 됩니다.
Class Person:
def __init__(self):
self.hello = "안녕하세요"
james = Person()
print(james.hello)
__init__ 메서드는 james = Person()처럼 클래스에 소괄호(())를 붙여서 인스턴스를 만들 때 호출되는
특별한 메서드(special method, magic method)입니다.
__init__은 initialize의 줄임말로 인스턴스(객체)를 초기화(메모리에 공간을 할당하고 값을 부여함)합니다.
밑줄 두개(__double under, 던더)가 양 옆으로 붙어있는 메서드는 파이썬이 자동으로 호출하는 메서드입니다.
스페셜 메서드(special method) 혹은 매직 메서드(magic method)라고 부릅니다.
던더 메서드로 불리기도 합니다.
파이썬의 여러가지 기능을 사용할 때, 이 던더 메서드를 구현하는 식으로 사용하게 됩니다.
속성은 __init__ 메서드에서 만든다는 점과 self에 마침표(.)를 붙여 속성명을 붙이고 값을
할당하는 점을 기억해두세요.
클래스 바디에서도 속성을 접근할 때 self.속성과 같이 self에 마침표를 찍고 사용하면 됩니다.
class Person:
def __init__(self):
self.hello = "안녕하세요"
def greeting(self):
print(self.hello)
james = Person()
james.greeting()
self란
self는 인스턴스 자기 자신을 의미합니다.
위 예제에서 인스턴스가 생성될 때 self.hello = "안녕하세요"처럼 자기 자신에 속성을 추가하여 사용했습니다.
__init__의 매개변수 self에 들어가는 값은 Person() 인스턴스라고 할 수 있습니다.
self가 완성된 후에는 변수인 james에 할당 되었습니다.
이후 메서드를 호출하면 현재 인스턴스가 자동으로 매개변수 self에 들어옵니다.
그래서 greeting 메서드에서 print(self.hello)처럼 속성을 출력할 수 있었습니다.
self.dic
dic를 통해서 인스턴스의 객체를 확인할 수 있습니다.
예제
class Person:
def __init__(self, name, age, adress):
self.name = name
self.age = age
self.adress = adress
a = Person(input('이름은 무엇인가요?'), input('나이는 무엇인가요?'), input('주소는 무엇인가요?'))
b = Person(input('이름은 무엇인가요?'), input('나이는 무엇인가요?'), input('주소는 무엇인가요?'))
print(f"첫번째 이름 : {a.name}")
print(f"첫번째 나이 : {a.age}")
print(f"첫번째 주소 : {a.adress}")
print(f"두번째 이름 : {b.name}")
print(f"두번째 나이 : {b.age}")
print(f"두번째 주소 : {b.adress}")
비공개 속성 만들기
class Person3:
def __init__(self, name, age, address, wallet):
self.hello = "안녕하세요."
self.name = name
self.age = age
self.address = address
self.__wallet = wallet # 비공개 속성, 언더스코어 두개 붙이면 된다. 외부 접근 불가
def __greeting(self): # 비공개 속성
print(f"{self.hello} 제 이름은 {self.name}입니다.")
def amount(self):
print(self.__wallet)
iks = Person3("이기수", 88, "경기도 시흥", 20000)
Person3.amount(iks)
# 하지만 비공개 속성을 메서드로 간접적으로 제어할 수는 있다.

staticmethod, classmethod
클래스 자체에서 클래스에 영향을 미치는 함수를 짜고 싶을 수도, 클래스, 객체 둘다 상관없이 동작하는 함수를 짜고 싶을 때 사용한다. 추후 설명 보완
@staticmethod
# 객체와 상관없이 동작하는 메서드, class, self 둘 다 안씀
def pay(amount):
pass
@classmethod
# 클래스 자체에 동작하는 메서드(self 안씀)
def from_string(cls, string):
name, age , address, __wallet = string.split(',')
return cls(name, age, address, __wallet) # cls는 클래스의 줄임말
'데이터 분석 및 시각화 > 파이썬' 카테고리의 다른 글
[Python] 기초 정리(Pandas_Series) (2) | 2023.01.18 |
---|---|
[Python] 기초 정리(Numpy) (0) | 2023.01.16 |
[Python] 기초 정리(전역변수, 지역변수, 람다(lambda)) (0) | 2023.01.13 |
[Python] 기초 정리(함수, 문자열 메서드 join) (0) | 2023.01.12 |
[Python] 기초 정리(tuple, random, set) (0) | 2023.01.11 |