본문 바로가기
  • hazard_dev@__
  • hazard_dev@__
Python

[Python_Class#1] 파이썬 Class 손 쉽게 이해하기!!

by Hazard3_o00sung 2020. 12. 8.
728x90

강력한 스크립트 언어, Python입니다

Powerful Class Object in Python

  간혹 가다가 파이썬이 학습하기 쉬운 언어라는 분들도 계신데.. 아닙니다! 어떤 언어든 그건 마찬가지입니다. 그냥 간단한 기능만 사용하려고 한다거나, 그런 경우에 사용하기에 쉽다는 거지, 파이썬의 깊은 기능을 이해하려고 하는 순간, 이게 이렇게 어려운 언어였나 라는 생각이 듭니다. 그렇기 때문에 학습하기 쉬워서 파이썬을 택한다 이런 건 잘못됐다고 생각합니다. 어떤 언어든 어렵습니다..ㅎ 여하튼 잡소리는 각설하고, 본 내용을 설명드리도록 하겠습니다. 클래스는 객체입니다. 이러면 당연히 이해하기 힘들죠? 파이썬은 객체 지향 패러다임을 제시하는 언어이기 때문에, 함수든 변수든 클래스든 모든 것들이 객체가 될 수 있습니다! 다만, 클래스는 모든 것들을 포함하는 객체라는 점에서 차이가 있죠

 

Class

클래스 내부에는 어떤 것이든 들어갈 수 있습니다. 아래 그림을 보면서 설명을 드리도록 하겠습니다.

python_class 출처 : geeksforgeeks.org

 

위 그림을 보면 알 수 있듯이, 클래스의 이름은 Dog 입니다. 클래스 내부의 속성에는 Dog의 종인 Breed, Age, Color 멤버 변수가 존재합니다. 그리고 행동 컨테이너 안에는 Bark(), Sleep(), Eat() 멤버 함수가 선언되어 있습니다. 그럼 Dog 클래스는 3개의 멤버 변수와 3개의 멤버 함수를 포함하고 있다는 뜻입니다. 아래 코드를 보도록 하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Dog:
    def __init__(self,color,  breed = "siba", age = None):
        self.breed = breed
        self.age = age
        self.color = color
    
    def Bark(self):
        print("멍멍 !!")
 
    def Sleep(self):
        print("Zzzz....")
 
    def Eat(self):
        print("냠냠 !!")
cs

 

__init__()

__init__() 함수는 class 내부에 선언될 속성값들이 포함됩니다. 물론 클래스가 멤버 변수로 들어올 수도 있는 거고, 함수가 들어올 수 있습니다. 위에서 말씀드렸듯이, 모든 것들이 객체가 될 수 있으니까요! 위 코드를 보시면, breed = "siba"라고 돼있는 걸 볼 수 있습니다. 즉, 사용자가 객체를 생성하는 생성 레벨에서 굳이 breed에 대한 초기값을 제공하지 않아도 초기값이 알아서 지정된다는 거죠! 밑의 멤버 함수를 보면 그냥 표준 출력 함수를 이용해서 출력만 합니다. 한번 실행해보도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Dog:
    def __init__(self,color,  breed = "siba", age = None):
        self.breed = breed
        self.age = age
        self.color = color
    
    def __repr__(self-> str:
        return f'Breed : {self.breed}, Age : {self.age}, Color : {self.color}'
 
    def Bark(self):
        print("멍멍 !!")
 
    def Sleep(self):
        print("Zzzz....")
 
    def Eat(self):
        print("냠냠 !!")
 
if __name__ == "__main__":
    dog = Dog(color="blue", age = 3)
    print(dog)
    dog.Bark()
    dog.Eat()
 
RESULT > 
Breed : siba, Age : 3, Color : blue
멍멍 !!
냠냠 !!
cs

 

__repr__() 매직 메서드를 이용해서 Dog 클래스의 생성자 dog를 출력하면, __repr__()메서드가 실행돼 리턴 값이 아래와 같이 도출됩니다. 그 외엔 아래 코드와 동일하게 함수를 '.'을 이용해서 호출해서 사용하면 간단하게 사용할 수 있습니다!! 즉 인스턴스화 된 dog에서의 호출은 모두.으로 호출됩니다. java나 c++ 와는 다르게 public, private 등 한정자는 존재하지 않습니다. 대신 네이밍 규칙에 따르면, 변수 앞에 언더바('_')를 찍음으로써, 보호되는 변수라는 것까지 알려주는 것은 가능합니다. 예를 들어,

 

1
2
3
4
5
6
7
8
9
10
11
12
class Dog:
    def __init__(self,color,  breed = "siba", age = None):
        self._breed = breed
        self._age = age
        self._color = color
    
    def age(self):
        return None
 
if __name__ == "__main__":
    dog = Dog(age = 3, color= "Red")
    print(dog.age)
cs

 

 

일반적으로 파이썬 개발자들은 위와 같은 방법으로 멤버 변수에 접근을 제어하기는 하나, 사실 private만큼 강력한 것도 아니고, 네이밍 규칙을 이용한 보호이기 때문에 사실 그다지 효과는 없습니다(그냥 코웍 개발자들에게 접근하지 마라는 신호정도...) 여하튼 그렇습니다.  그리고 아마 self 이 친구의 의미를 잘 이해하지 못하시는 분들이 많을 것 같습니다!! 아무래도 변수도 아니고,,, 이게 뭐지 하는... 그런 

 

self

한번 코드를 통해 보도록 하겠습니다!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Foo:
    def __init__(self, value = None):
        self._value = value
 
    def returnSelf(self):
        return self
 
    def returnSelfName(self):
        return self.__class__.__name__
 
if __name__ == "__main__":
    foo = Foo(value = 10)
    print(foo.returnSelf())
    print(foo.returnSelfName())
 
RESULT >
<__main__.Foo object at 0x7f989a8c0410>
Foo
cs

 

우선 returnSelf()와 returnSelfName() 함수를 보게되면 self를 반환하고 self.__class__.__name__을 반환합니다. 먼저 결괏값을 보겠습니다. 결괏값을 보면 자기 자신을 반환한다는 것을 알 수 있습니다!! self 뜻이 뭘까요?

 

Google Translate

 

본인을 뜻합니다. 네, self는 객체 자기 자신을 가리키는 변수입니다. 그렇기 때문에 상황에 맞게 사용할 상황이 많습니다. 예제를 보여드리고 싶으나 그럼, 너무 코드가 길어져서... 기회가 될때 깃 헙 통해서 올리도록 하겠습니다!

 

여하튼 오늘 클래스의 기본적인 기능을 알아보았는데, 사실 기본적인 기능만 잘 알아도 추가적으로 배우는 메서드가 있어도 쉽게 이해할 수 있습니다!!

 

다음번에는 매직 메서드에 대해서 알아보도록 하겠습니다!! 원하시는 분들이 많으실 것 같아서!!!

 

그럼 이만!!

 

 

댓글로 피드백, 문의, 질문 모두 환영합니다!!!!

 

 

감사합니다😆😆😆😆

728x90

댓글