ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL.30 클래스와 메서드 사용하기
    TIL 2020. 11. 7. 23:04
    728x90

    ## 클래스, 매서드 사용하기

    ## 클래스란 == 객체를 표현하기 위한 문법으로 

    예를 들어 게임 상에의 마법수, 궁수, 사제 등 직업별로 클래스를 만들어 표현 할 수 있다.

    # 프로그래밍에서의 클래스는 집, 자동차, 나무 우베 브라우저의 스크롤 바, 체크 박스, 버튼 등이 대표적이다.

    ## 집, 자동차, 스크롤 바, 체크박스 처럼 특정한 개념이나 모양으로 존재하는 것을 객체(object)라고 부른다.

    ## 프로그래밍의 객체를 만들때 사용하는 것이 클래스이다.


    ## 게임 케릭터로 예를 들어보자

    ## 기사 케릭터를 클래스로 표현해보자.

    ## 기사 케릭터의 직업은 클래스 

    ## 해당 케릭터의 체력, 마나, 공격력 등의 데이터를 클레스의 속성(attribute)

    ## 이런 기사가 베고 찌르는 등의 기능을 메서드(method)라고 부른다.


    ## 이러한 프로그래밍 방법을 객체 지향 (object oriented)프로그래밍이라 부르고 

    파이썬은 객체 지향 프로그래밍 언어이다.

    ## 객체 지향 프로그래밍은 복잡한 문제를 잘게 나누어 객체로 만들고, 그 객체를 조합해서 문제를 해결한다.

    ## 이는 현실 세계의 복잡한 문제를 처리하는데 유용하며 기능 개선 및 발전 시에도 해당 클래스만 수정하면 되므로 유지 보수에도 효율적이다.

    ## 사실 파이썬에서 사용되는 모든 것들은 객체이다.


    ## 클래스와 메서드 생성하기

    # class 클래스이름:

    #     def 메서드(self):

    #         코드

    class Person:
        def greeting(self):
            print('Hello')
    

    ## 클래스를 생성할때는 함수를 만드는 방법과 유사하다. 

    ## 여기서 클래스의 이름은 보통 대문자로 시작한다. # () 괄호 없음

    ## 메서드는 클래스 안에 들어이있는 함수를 말하며 특히, 메서드의 첫 번째 매개변수는 반드시 self로 지정한다.


    ## 클래스 사용하기

    # 인스턴스 = 클래스()

    class Person: 
        def greeting(self): 
            print('Hello') 
    
    james = Person()

    ## 위와 같이 클래스의 ()를 붙인 뒤 변수에 할당하여 사용할 수 있다.

    ## 여기서 james 는 Person의 인스턴스(instance)이다.

    ## 클래스는 특정 개념을 표현만 하기때문에 사용하기 위해선 인스턴스를 생성해야 한다.


    ## 매서드 호출하기

    # 인스턴스.메서드()

    class Person:  
        def greeting(self):  
            print('Hello')  
    
    james = Person()
    james.greeting()
    ::
    Hello

    ## 메서드를 호출 할 경우는 클래스가 아닌 인스턴스를 이용해 호출한다.


    ## 파이썬에서의 흔히 볼 수 있는 클래스

    ## 사실 이제껏 사용안 int, list, dict 등도 클래스이다.

     (여지껏 클래스, 인스턴스 와 같은 개념을 몰랐을뿐 계속 사용 중 이었다.)

    a = int(10)
    # 10
    
    b = list(range(10))
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    c = dict(x=10, y=20)
    # {'x': 10, 'y': 20}

    ## int 클래스에 10을 넣어 인스턴스 a 를 만듬

    ## list 클래스에 range(10)을 넣어 인스턴스 b 를 만듬

    ## dict 클랙스에 x, y 값을 넣어 인스턴스 c 를 만듬

     

    ## 리스트 b에 20이라는 값을 추가할때를 생각해보자

    b = list(range(10))
    
    b.append(20)
    
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20]

    ## 즉 파이썬에서는 자료형도 클래스이므로,

    여기서는 list 클래스에 range(10)이라는 값을 넣어 인스턴스 b 를 만들고, 

    이를 통해 메서드를 사용한 것과 같은 방식이다.


    ### 인스턴스와 객체의 차이점

    ## 클래스로 만드는 인스턴스는 사실 객체와 같은 뜻을 가지고 있다.

    ## 보통 "객체만"을 설명할때는 객체로 표현하고, "클래스와 연관지어" 설명할때는 인스턴스라 표현한다.

    a = list(range(10))
    
    b = list(range(20))

    ## 리스트 변수 a, b 는 객체이며// a 와 b 는 list 클래스의 인스턴스이다.


    ## 빈클래스 만들기

    # 빈클래스를 만들때는 코드 부분에 pass를 넣어주면 된다.

    class Person:
    
        pass

    ## 메서드 안에서 메서드 호출하기

    class Person:
        def greeting(self):
            print('Hello'
    
        def hello(self):
            self.greeting()    # self.메서드() 형식으로 클래스 안의 메서드를 호출
    
    james = Person()
    james.hello()   
    ::
    Hello

    ## 메서드 안에서 메서드를 호출할 때는 self.메서드() 형식으로 호출해줘야한다.

    ## 만약 self 없이 메서드 이름만 사용하면 바깥쪽에 있는 함수를 호출 한다는 뜻이므로 주의하자.


    ## 특정 클래스의 인스턴스인지 확인하기

    ## 특정 클래스의 인스턴스가 맞으면 True, 아니면 False를 반환합니다.

    # isinstance(인스턴스, 클래스)

    class Person:
        pass
    
    james = Person()
    
    isinstance(james, Person)
    ::
    True

     


    ### isinstance 함수 사용하기

    ## isinstance는 주로 객체의 자료형을 판단할때 사용하는데, 이를 이용해 if 조건문에 적용시킬수 있다.

    def factorial(n):
        if not isinstance(n, int) or n < 0:    # n이 정수가 아니거나 음수이면 함수를 끝냄
            return None
        if n == 1:
            return 1 # 종료 조건
        return n * factorial(n - 1)
    
    a = factorial(3)
    print(a)
    # 6

    ## 1부터 n까지 양의 정수를 차례대로 곱하는 팩토리얼 함수를 만들때, 

        실수와 음의 정수는 계산할 수 없다는 것을 isinstance를 사용하여

        정수 일때만 계산하도록 만들 수 있다.

    728x90
Designed by Tistory.