클래스란 자료형을 위한 일종의 템플릿과 같은 개념
클래스 (class)란 어떤걸 계속 만들어낼 수 있는, 과자 틀과 같은 템플릿 개념이고,
객체 (object)란 클래스에 의해 만들어진 결과물의 개념이다.
class ClassName:
클래스를 정의하는 방식은 굉장히 심플한데, 그냥 class
키워드를 사용하여 만들면 된다.
이때 클래스 이름은 파스칼 케이스(PascalCase)라고 하여 첫단어의 첫글자부터 시작하여 이후에 나오는 모든 단어들의 첫글자를 대문자로 시작하는 방식으로 지정한다.
# example
class ThisIsClassName:
# 내용 코드
class MovieInfo
# 내용 코드
class가 정의되고 나면, class로 부터 실체화(instaniate)할 수 있다.
함수를 호출할 때와 마찬가지로 class를 호출하면 된다.
# example
cold_war = MovieInfo()
MovieInfo
class를 실체(instance)화 한것이 cold_war
이라는 객체(object) 라고 볼 수 있다.
class에 속하는 객체들에 정의될 공통 요소
예를 들어, MovieInfo
class의 경우엔
등이 포함될 수 있다.
class attribute을 정의할 때에는 __init__
메소드를 쓰면 된다.
# example
class MovieInfo:
def __init__(self, name, genre, running_time):
self.name = name
self.genre = genre
self.runtime = running_time
cold_war = MovieInfo('Cold War', 'Romance', 88)
print(cold_war.runtime)
# Output
88
여기서 self
라는 parameter은 class의 실체(instance)를 가르키므로,
class의 실체인 객체(object)를 가르킨다고 본 수 있는 것이다.
즉 위의 예시를 통해 설명하면,
cold_war이라는 인스턴스에
name
→ Cold War
genre
→ Romance
running_time
→ 88
와 같은 value를 부여했다고 볼 수 있는 것이다.
__init__
을 통해서 class의 attribute(속성)을 정의해줄 수도 있지만,
method를 통해서 메소드를 추가해줄 수도 있다.
속성은 해당 객체의 이름 등의 정해진 성질인 반면에 메소드는 move
, eat
등 객체가 행할 수 있는 어떠한 action같은 느낌이라고 볼 수 있다.
예를 들어 cold_war
를 상대방이 본 적이 있냐라고 물어보는 메소드를 추가할 수도 있는데, 아래와 같이 가능하다.
(참고로 모든 메소드에는 self
parameter가 무조건 첫번째로 들어간다.)
# example
class MovieInfo:
def __init__(self, name, genre, running_time):
self.name = name
self.genre = genre
self.runtime = running_time
def ask(self):
return f'너 혹시 {self.name} 봤어? {self.runtime}분 짜리 {self.genre} 장르 영환데 진짜 재밌어!'
print(cold_war.ask())
# Output
너 혹시 Cold War 봤어? 88분 짜리 Romance 장르 영환데 진짜 재밌어!
Class 위주로 코드를 작성하는 것을 객체 지향 프로그래밍이라고 한단다.
확실히 클래스 위주로 하나하나 작성해나가면 코드가 간결해질 것 같긴 하다.
같은 작업을 여러번 해야할 경우에 단숨에 줄여주니 말이다.
문제는 내가 할 수 있냐는거지.. ㅠㅠㅜ
확실히 보여진걸 그대로 따라하기 보다 내 느낌으로 다시 정리해서 적용시켜보니 이해가 더 잘되긴 하는거 같다.
위에에서도 단순히 적혀있던 car로 하는게 아니라 movie 개념으로 적용시켜서 다시 해보니 더 잘 와닿는 느낌이다.
문제는 그렇게 해서 이해하기까지 시간이 굉장히 오래 걸린다는 거지.. ㅠㅠㅜ
참고
https://wikidocs.net/28
http://hleecaster.com/python-class/