Class

jinatra·2021년 8월 10일
0

Python

목록 보기
11/15
post-thumbnail

Class


Class

Class란?

클래스란 자료형을 위한 일종의 템플릿과 같은 개념

  • 과자 틀 → 클래스 (class)
  • 과자 틀로 만든 과자 → 객체 (object)

클래스 (class)란 어떤걸 계속 만들어낼 수 있는, 과자 틀과 같은 템플릿 개념이고,
객체 (object)란 클래스에 의해 만들어진 결과물의 개념이다.


Class 정의

class ClassName:

클래스를 정의하는 방식은 굉장히 심플한데, 그냥 class 키워드를 사용하여 만들면 된다.
이때 클래스 이름은 파스칼 케이스(PascalCase)라고 하여 첫단어의 첫글자부터 시작하여 이후에 나오는 모든 단어들의 첫글자를 대문자로 시작하는 방식으로 지정한다.

# example 

class ThisIsClassName:
  # 내용 코드

class MovieInfo
  # 내용 코드

class가 정의되고 나면, class로 부터 실체화(instaniate)할 수 있다.
함수를 호출할 때와 마찬가지로 class를 호출하면 된다.

# example

cold_war = MovieInfo()

MovieInfo class를 실체(instance)화 한것이 cold_war이라는 객체(object) 라고 볼 수 있다.


Class Attribute (클래스 속성)

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이라는 인스턴스에

  • nameCold War
  • genreRomance
  • running_time88

와 같은 value를 부여했다고 볼 수 있는 것이다.


Class Method

__init__ 을 통해서 class의 attribute(속성)을 정의해줄 수도 있지만,
method를 통해서 메소드를 추가해줄 수도 있다.

그럼 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 장르 영환데 진짜 재밌어!




Take Away

객체 지향 프로그래밍

Class 위주로 코드를 작성하는 것을 객체 지향 프로그래밍이라고 한단다.
확실히 클래스 위주로 하나하나 작성해나가면 코드가 간결해질 것 같긴 하다.
같은 작업을 여러번 해야할 경우에 단숨에 줄여주니 말이다.

문제는 내가 할 수 있냐는거지.. ㅠㅠㅜ


내 방식으로 배운거 다시 적용해보기

확실히 보여진걸 그대로 따라하기 보다 내 느낌으로 다시 정리해서 적용시켜보니 이해가 더 잘되긴 하는거 같다.
위에에서도 단순히 적혀있던 car로 하는게 아니라 movie 개념으로 적용시켜서 다시 해보니 더 잘 와닿는 느낌이다.

문제는 그렇게 해서 이해하기까지 시간이 굉장히 오래 걸린다는 거지.. ㅠㅠㅜ





참고
https://wikidocs.net/28
http://hleecaster.com/python-class/

profile
으악

0개의 댓글