2023년 6월 업데이트

 

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 중급 강좌 - 3. 클래스(Class)를 진행토록 하겠습니다.

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.

예를 들어, 3_class.py를 생성하고 코드를 실행합니다.

 

 

 

TL;DR

Python의 클래스는 재사용 가능한 구성요소를 생성하고 데이터와 기능을 모듈화 합니다. 이 챕터에서는 클래스를 사용하는 이유를 소개하고 Python 클래스의 생성자와 메서드를 포함한 클래스의 기본 구조를 예제를 통해 살펴봅니다.

 

 

Python 중급 강좌 - 3. 클래스(Class)

클래스는 데이터 구조와 동작을 정의합니다. 클래스를 사용하면 데이터와 기능(functionality)을 함께 그룹화할 수 있습니다.

 

Python은 유연한 언어이고, 많은 기능을 지원하며, 물론 객체지향 프로그래밍(Object Oriented Programming) 역시 지원합니다.

이 강좌에서는 클래스가 무엇이고 오브젝트가 무엇인지에 대해서는 깊이 다루지 않고, Python에서 어떻게 클래스를 사용가능한지에 대해 초점을 맞춰 진행합니다.

 

클래스를 사용하는 이유는

- 재사용 가능한 구성요소 생성

- 데이터와 작업을 그룹으로 사용

으로, 다른 언어와 같습니다.

 

그럼, 먼저 Python에서 클래스를 사용하는 예제를 살펴보겠습니다.

 

Python 클래스 예제

class Presenter():
    def __init__(self, name):
        # 생성자(Constructor)
        self.name = name
    def say_hello(self):
        # 메서드(method)
        print('Hello, ' + self.name)

presenter = Presenter('Chris')
presenter.name = 'Christopher'
presenter.say_hello()

그냥 봐도 쉬워 보이지요? self라는 키워드는 뭔가 이상해 보입니다. 그럼 상세히 살펴보도록 하겠습니다.

 

클래스 기본 구조

Python에서 클래스 이름은 PascalCasing으로 첫 대문자로 설정합니다.(snake_case도 권장합니다)

class Presenter():

 

☑️ 챗GPT 활용: python PascalCasing에 대해서 알려줘

☑️ 챗GPT 활용: python snake_case에 대해서 알려줘

 

생성자(Constructor)와 같은 클래스 내부용 멤버들은 "__"로 두 개의 언더스코어를 이용해 설정합니다.

sef __init__(self, name):
    # 생성자(Constructor)
    self.name = name

 

클래스의 메서드는 이렇게 첫 파라미터가 "self", 다음 파라미터부터는 사용자 정의 파라미터를 쓸 수 있습니다.

def __init__(self, name):

 

이렇게 Python에서는 self를 이용해 클래스의 속성(property 또는 field) 값을 적용합니다.

self.변수명 = 값

 

위 코드에서 보는, say_hello 메서드처럼, 모든 클래스 메서드는 self를 첫 번째 파라미터로 받아야 합니다.

def say_hello(self):
    # 메서드(method)
    print('Hello, ' + self.name)

 

클래스 개체(Object) 생성은 이렇게 class명과 파라미터를 이용합니다.

presenter = Presenter('Chris')

타 언어와 다르게 new 등의 키워드를 사용하지 않습니다.

 

클래스 메서드를 호출할 때에는, 개체에 메서드를 호출해 사용합니다.

presenter.say_hello()

 

"new"와 같은 키워드 사용하지 않고, self라는 특수 파라미터를 이용하는 것이 조금 특이하지만, 이렇게 Python에서 class를 생성하고 사용할 수 있습니다. 생성하는 구조 부분이 약간 다르지만, 내부 구조도 단순하고 사용하기 쉽다는 것을 알 수 있습니다.

 

Python의 class accessibility(접근제한자)

- 모두 public이며, private 등은 엄밀히 말하면 없습니다. 

- class member 중에 "_"(언더스코어)의 의미는 사용을 권장하지 않는 일반적으로 protected 멤버를 의미하는 제안 규약(convention)입니다.

- "__"(더블 언더스코어)는 "외부에서 사용하지 말 것"을 가이드하는 멤버를 의미하는 일반적으로 private 제안 규약입니다.

위의 첫 예제에서는, "__init__" 생성자와 같은 경우입니다. 이외에도, __iter__ 등 여러 내부용 멤버를 이후 확인 가능합니다.

 

property 사용

Python에서도 getter/setter와 같은 메서드 형태로, 클래스 인스턴스의 속성값을 쉽게 가져오거나 지정할 수 기능을 제공합니다.

이때, @propery를 이용하면, 쉽게 구현할 수 있습니다.

 

class Presenter():
    def __init__(self, name):
        # 생성자(Constructor)
        self.name = name

    @property
    def name(self):  # setter
        print('Retrieving name...')
        return self.__name
    @name.setter  # getter의 name과 같음
    def name(self, value):  # getter
        # 이곳에 검증 코드가 있다고 가정
        print('Validating name...')
        self.__name = value

presenter = Presenter('Chris')
presenter.name = 'Christopher'
print(presenter.name)

=== 실행결과 ===
Validating name...
Validating name...
Retrieving name...
Christopher

 

Python의 속성은 property(또는 field) 스타일의 접근을 허용, 하지만 실제로는 위의 코드와 같이 메서드로 작동합니다.

이런 @ 데코레이터는 지난 강좌를 참고하세요. - 개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 18. 데코레이터(Decorators)

 

클래스 getter의 경우는 

x = presenter.name

형태로 사용됩니다.

 

클래스 setter의 경우는

presenter.name = 'Christopher'

이런 형태로 사용됩니다.

 

그런데, 위의 결과와 같이 두 번 property가 실행된 것을 확인 가능합니다. 분명 한 번만 했는데? 왜 두 번 실행된 건지?

생성자를 보면, 생성자에서도 setter를 호출하고 있습니다. 이 생성자를 통해 한번 더 호출됩니다.

 

이렇게 Python에서 이렇게 property를 사용하면, 다른 모듈에서 이 클래스를 사용할 때 좀 더 구체적인 제어를 할 수 있도록 설정할 수 있습니다.

 

클래스와 모듈, 패키지

Python 클래스 강좌, 다른 언어에 비해서 무척 쉽지요?

지난 초급 강좌에서 배운 모듈 강좌 - 개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 15. 패키지(Package): import, pip와 잘 연계해 import 하면, 대규모의 클래스 코드도 조직적으로 잘 모듈화 시켜서 구성할 수 있습니다.

 

수고하셨습니다.

 

파이썬 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터 

파이썬-책구매링크.png

 


참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/more-python-for-beginners/03 - Classes at master · CloudBreadPaPa/c9-python-getting-started (github.com)

개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 15. 패키지(Package): import, pip

 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 38533
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 20771
98 Python 중급 강좌 - 4. 상속(Inheritance) 코난(김대우) 2021.01.03 344
» Python 중급 강좌 - 3. 클래스(Class) 코난(김대우) 2021.01.03 405
96 Python 중급 강좌 - 2. 람다(Lamda) file 코난(김대우) 2021.01.03 545
95 Python 중급 강좌 - 1. Python 스타일 가이드: 서식(Formatting)과 린팅(Linting) file 코난(김대우) 2021.01.02 1099
94 Python 초급 강좌 목차 - 19. 코드에서 중요한 키(패스워드) 관리 - dotenv 코난(김대우) 2021.01.02 971
93 Python 초급 강좌 목차 - 18. 데코레이터(Decorators) 코난(김대우) 2021.01.02 344
92 Python 초급 강좌 목차 - 17. JSON 데이터 처리 file 코난(김대우) 2021.01.02 821
91 Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출 file 코난(김대우) 2021.01.02 945
90 Python 초급 강좌 목차 - 15. 패키지(Package): import, pip 코난(김대우) 2021.01.02 411
89 Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter) 코난(김대우) 2021.01.02 401
88 Python 초급 강좌 목차 - 13. 함수(Function) 코난(김대우) 2021.01.02 545
87 Python 초급 강좌 목차 - 12. 반복문(Loop): for, while 코난(김대우) 2021.01.02 326
86 Python 초급 강좌 목차 - 11. 컬렉션(Collection): list, array, dictionary file 코난(김대우) 2021.01.02 329
85 Python 초급 강좌 목차 - 10. 조건문(Condition):3 복잡한 조건 처리 코난(김대우) 2021.01.01 361
84 Python 초급 강좌 목차 - 9. 조건문(Condition):2 다중 조건 처리 코난(김대우) 2021.01.01 395
83 Python 초급 강좌 목차 - 8. 조건문(Condition):1 (IF-ELSE) 코난(김대우) 2021.01.01 364
82 Python 초급 강좌 목차 - 7. 에러 핸들링(Error Handling) file 코난(김대우) 2021.01.01 353
81 Python 초급 강좌 목차 - 6. 날짜와 시간 데이터 처리 코난(김대우) 2021.01.01 397
80 Python 초급 강좌 목차 - 5. 숫자(Numeric) 데이터 처리 코난(김대우) 2021.01.01 327
79 Python 초급 강좌 목차 - 4. 문자열(String) 데이터 처리 코난(김대우) 2021.01.01 433





XE Login