첫 TIL기록.
흐릿해진 개념을 다시 잡아보자.
클래스를 익히기 전 객체지향 프로그래밍에 대해 먼저 알아야 한다.
객체 지향 프로그래밍(OOP)이란, 객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나로, 객체를 기반으로 하는 프로그래밍이다. 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
우리는 데이터를 효율적으로 관리하고, 같은 코드의 반복을 없애고, 유지 보수가 용이하게끔 하고자 객체지향 프로그램을 사용한다.
클래스 : 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것으로 객체를 만들기 위한 메타정보이다. 쉽게 말해, 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면이라고 볼 수 있다.
인스턴스(객체) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터를 말한다. 즉, 클래스로 만든 피조물이다.
이때 동일한 클래스로 만든 객체끼리는 서로 영향을 미치지 않으며 고유한 성격을 가지고 있다.
클래스로 만든 객체를 인스턴스라고도 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? 이렇게 생각해 보자. a = Cookie() 이렇게 만든 a는 객체이다. 그리고 a 객체는 Cookie의 인스턴스이다. 즉 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다. "a는 인스턴스"보다는 "a는 객체"라는 표현이 어울리며 "a는 Cookie의 객체"보다는 "a는 Cookie의 인스턴스"라는 표현이 훨씬 잘 어울린다.
간단한 예시를 들어보자.
class UserInfo:
def __init__(self, name):
self.name = name
def user_info_p(self):
print("Name: ", self.name)
user1 = UserInfo("Hyun")
# 네임스페이스: 객체를 인스턴스화 할 때 저장된 공간.
# 클래스 변수: 직접 사용가능, 객체보다 먼저 생성된다.
# 동일한 클래스로 만든 객체끼리는 서로 영향을 미치지 않으며 고유한 성격을 가지고있다.
# 인스턴스 변수: 객체마다 별도로 존재, 인스턴스 생성 후 사용.
__init__
메서드가 생성자 이다. 객체를 생성할때 생성자에 필요한 값을 같이 전달해줘야 한다. 위의 예시에서는 name 이 이에 해당되며 user1 처럼 "Hyun" 이라는 값과 함께 생성해야 한다. class SelfTest():
def func1(): # 클래스 메서드
print('func1 called')
def func2(self): # 인스턴스 메서드
print('func2 called')
self_test = SelfTest()
# self_test.func1() 오류
SelfTest.func1() # 클래스 변수는 직접 접근해야한다.
self_test.func2()
SelfTest.func2(self_test)
class WareHouse():
# 클래스 변수(self 없음)
stock_num = 0 # self가 없기 때문에 공동으로 공유한다. 여러 인스턴스에서
def __init__(self, name):
self.name = name
WareHouse.stock_num += 1
# 창고가 하나 생길때 마다 전체 재고를 1씩 추가해 준다.
user1 = WareHouse("Kim")
user2 = WareHouse("Park")
user3 = WareHouse("Lee")
print(WareHouse.__dict__) # stock_num : 3 인걸 확인할 수 있음
print(user1.name) # Kim
print(user1.stock_num) # 3
# 본인의 네임스페이스에 없으면 클래스 네임 스페이스에 가서 찾고 없으면 오류
print(WareHouse.__dict__)
을 통해 stock_num : 3 임을 확인할 수 있다. 즉, 클래스 변수는 공유된다. 출처
https://velog.io/@shchoice/java-oop-2
https://jeong-pro.tistory.com/95
점프 투 파이썬, https://wikidocs.net/28
패스트캠퍼스, 코딩+알고리즘 강의