Untitled_Blue

[Python] 파이썬에서의 객체지향 - 클래스, 모듈, 내장함수, 패키지, 예외 처리 본문

Programming Language/Python

[Python] 파이썬에서의 객체지향 - 클래스, 모듈, 내장함수, 패키지, 예외 처리

Untitled_Blue 2024. 2. 9. 21:20
반응형

안녕하세요. 이번 글은 파이썬에서의 객체지향 개념에 대한 설명입니다.

 

- 클래스 (Class)

  • 프로그램 내 전반적인 구조 내지 설계도이며 객체를 생성하기 위한 핵심 도구
  • 구성 요소로는 함수와 변수가 있다.
class mLogin:
    def loginAlert(self):
        print('Login')

class mLogOut:
    def logoutAlert(self):
        print('Logout')

class mJoin:
    def joinAlert(self):
        print('Join Member')

a = mJoin()
a.joinAlert() # Join Member

b = mLogin()
b.loginAlert() # Login

다음과 같이 파이썬 내 클래스는 주로 def라는 키워드를 사용하는 메서드와 필드로 구성되어 있다. 이때 메서드를 생성할 때 self라는 키워드를 사용하는데 이는 말그대로 자기 자신을 의미하는데 인스턴스를 만들 때 값을 받아와서 내부에서 처리하도록 도와주는 역할을 담당하고 있다.

class mJoin:
    def __init__(self, name, id, dept): # 처음에 호출되는 함수
        self.name = name
        self.id = id
        self.dept = dept

    def joinAlert(self):
        print('{0} 님의 아이디는 {1}이며 전공은 {2}입니다.'.format(self.name, self.id, self.dept))

a = mJoin('홍길동', 'gildong.hong', '컴퓨터공학과')
a.joinAlert() # 홍길동 님의 아이디는 gildong.hong이며 전공은 컴퓨터공학과입니다.

다음과 self를 기반으로 매개변수를 활용하는 코드를 확인할 수 있는데 이때 __init__ 라는 메서드를 볼 수 있다. 이 메서드는 처음에 호출되는 메서드이며 클래스 내에서 반드시 거쳐가는 부분이다.

class Calc:
    def __init__(self, result, a, b):
        self.result = result
        self.a = a
        self.b = b

    def mAdd(self):
        self.result = self.a + self.b
        return self.result

    def mMul(self):
        self.result = self.a - self.b
        return self.result

a = Calc(0, 2, 1)
print(a.mAdd()) # 3
print(a.mMul()) # 1

다음과 같이 __init를 기반으로 간단한 연산 프로그램을 제작할 수도 있다.

- 모듈 (Module)

  • 함수를 시작으로 변수 또는 클래스들로 구성되어 있는 파일
  • import 키워드를 사용해서 다른 파이썬 파일을 모듈로 사용 가능
class Calc:
    def __init__(self, result, a, b):
        self.result = result
        self.a = a
        self.b = b

    def mAdd(self):
        self.result = self.a + self.b
        return self.result

    def mMul(self):
        self.result = self.a - self.b
        return self.result

해당 파일은 모듈로 사용될 pyPractice_20231227이다.

import pyPractice_20231217

a = pyPractice_20231217.Calc(0, 1, 2)

print(a.mAdd()) # 3
print(a.mMul()) # -1

해당 코드는 import 키워드를 사용해서 다른 파이썬 파일을 모듈로 사용해서 클래스를 인스턴스화해서 사용한 것이다.

from pyPractice_20231217 import Calc

a = Calc(0, 1, 2)

다음과 같이 모듈 중에서 특정 클래스 또는 함수만 사용하고 싶을 때는 from 모듈명 import 모듈 함수 또는 클래스명을 통해 활용할 수 있다. 이렇게 모듈을 활용하면 별도로 각각 클래스를 입력할 필요없이 import 문 하나로 효율성 있으면서 간결하고 핵심적인 코드를 작성할 수 있다.

if __name__ == "__main__":
    print("Hello")

여담으로 __name__이라는 특별한 변수에 대해서 설명하려고 하는데 이는 직접 하나의 파일을 실행할 경우 사용되는 함수이다. 이를 더 설명하면 sample001.py를 직접적으로 실행하면 메인 파일을 실행하는 것이기 때문에 __name__가 있는 파일은 직접적인지를 파악할 수 있다는 뜻이다. 반대로 해당 파일을 import 문을 사용해서 다른 파일로부터 간접적으로 실행되었을 경우에는 메인 파일을 직접적으로 실행하지 않았기 때문에 상단의 코드의 조건식에 대한 결과는 false가 된다.

- 내장 함수

 

3.12.1 Documentation

Python 3.12.1 문서 Welcome! This is the official documentation for Python 3.12.1. 설명서의 파트들: 파이썬 3.12 의 새로운 기능은? 2.0 이후의 모든 "새로운 기능" 문서 자습서 여기에서 시작하세요 라이브러리 레퍼

docs.python.org

상단의 링크는 파이썬에서 제공하는 공식 API 문서가 있는 사이트이다. 하단에 설명할 내장 함수 외 다양한 함수와 문법을 확인할 수 있다.

함수 설명
abs() 특정 숫자를 절댓값으로 표현하는 함수
chr() 유니코드 값을 해당 문자로 반환하는 함수
ord() 문자를 유니코드 값으로 변환하는 함수
divmod(a, b) 두 값의 몫과 나머지를 반환하는 함수
enumerate([ ]) 열거형으로서 객체를 반환하는 함수
eval() 문자열 표현식을 실행한 결과를 반환하는 함수
hex() 정수를 16진수로 변환하는 함수
oct() 정수를 8진수로 변환하는 함수
id() 객체를 고유번호로 반환하는 함수
input([prompt]) 사용자 입력을 받는 함수
int() 문자열을 정수 또는 실수로 변환하는 함수
len() 문자열 내 문자의 갯수를 반환하는 함수
list() 데이터를 리스트로 변환하는 함수
min(), max() 반복 가능한 데이터를 입력받아 최소값, 최대값 반환하는 함수
pow(a, b) a의 b 제곱값의 결과를 반환하는 함수
round() 숫자값을 반올림해주는 함수
isinstance 특정 객체가 그 클래스의 인스턴스인지를 파악하는 함수
open 특정 파일을 여는 방법을 지정하는 함수
w(쓰기), r(읽기), a(추가), b(바이너리 모드 읽기)
range(시작값, 끝값, 숫자사이의 거리) 범위 내 값을 반복해서 반복 가능한 객체로 생성하는 함수
sorted([list]) 리스트를 오름차순으로 정렬해주는 함수
str() 객체를 문자열 형식으로 변환하는 함수
sum() 입력 데이터의 합을 반환하는 함수
tuple('문자열') 문자열을 반복가능한 데이터로 반환하는 함수
type() 입력값의 자료형을 나타내는 함수
zip([list], [list]) 두 개 이상의 리스트를 서로 묶어서 표현하는 함수
map() 각 요소들에게 특정 함수를 적용할 때 사용하는 함수

- 패키지 (Package)

  • 모듈의 집합체
  • 도트(.)를 사용해서 모듈을 계층적으로 관리함으로써 공동 작업 및 유지보수에 용이
  • 여러 모듈이라는 파이썬 파일들을 모아두는 일종의 폴더

다음과 같이 디렉터리를 통해 계층적으로 그룹별로 모듈이라는 파이썬 파일을 효율적으로 관리할 수 있다. 실무에서는 주로 기능별로 패키지를 분류하는 경우가 많다.

- 예외 처리 (Exception)

  • 프로그램 개발 중 또는 사용자가 프로그램을 사용하면서 규격 외의 값을 입력했거나 미숙한 조작으로 인해 발생하는 오류이며 개발자가 해결할 수 있는 범위 내 있는 점이 특징
try:
    print(4/'0')
except TypeError as k:
    print(k)
finally:
    print('The End')

예외 처리문은 흔히 try-except문이 기본인데 각각 분석해보자면 try는 먼저 실행하고자 하는 코드이며 최소 한 번은 실행된다. 이후 예외가 발생하면 except으로 가서 try 내 코드에 예외가 발생하였음을 알리는 방식으로 실행된다. 이때 TypeError as k라고 적었는데 이는 int와 str을 사칙연산하려고 할 때 타입 사용이 올바르지 않다는 점에서 발생하는 오류를 알리고자 작성한 것이다. 상단 결과를 보면 예외가 발생하였음을 직관적으로 알려주는 점을 알 수 있다.

더 나아가 finally문을 사용하였는데 이는 선택사항이며 finally 내부에 있는 코드는 예외가 발생해도 발생하지 않아도 최종적으로 반드시 실행되는 구간이다.

try:
    print(1 + 1)
    #print(4/'0')
except TypeError as k:
    print(k)
except Exception as e:
    print(e)
else:
    print('Not Find Error')

다음과 같이 except문을 여러 개 설정할 수 있을 뿐만 아니라 모든 에러에 염두하고자 할 때는 Exception을 사용해서 특정 예외만을 처리하지 않고 모든 예외처리를 잡아줄 수 있다. 또한 finally와 다르게 else문은 오류 내지 예외가 발생하지 않을 때만 최종적으로 실행해주는 역할을 하고 있다는 점을 확인할 수 있다.

예외는 정말 다양하기 때문에 나머지 예외에 대해 보길 원한다면 하단 공식 API 사이트에 방문해보는 것을 추천한다.

 

Built-in Exceptions

In Python, all exceptions must be instances of a class that derives from BaseException. In a try statement with an except clause that mentions a particular class, that clause also handles any excep...

docs.python.org

반응형