IT world

[Python] 24.01.15 클래스 심화 본문

모두의 연구소(오름캠프)/AI 모델 활용 백엔드 개발 과정

[Python] 24.01.15 클래스 심화

엄킹 2024. 1. 15. 22:56

오전에는 LMS 이라는 시스템으로 Python 기초부터 클래스까지 그리고 Numpy, Pandas, 그래프 활용까지 파이썬의 전반적인 내용에 대해서 교육을 들었다.

 

Numpy

numpy란? 행렬이나 대규모 다차원 배열을 쉽게 처리하기 위한 라이브러리로 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공한다. 여러 형태의 백터 및 행렬 연산과 나아가 여러 수학적인 기능들을 빠르고 간편하게 사용할 수 있는 기능을 제공한다.

 

numpy 패키지의 핵심은 단연 배열(ndarray)라 할 수 있으며 공식 사이트에 소개된 장점으로는

  • 배열 및 벡터를 표현하는 핵심 구조인 ndarray를 사용하여 빠르고 메모리를 효율적으로 사용
  • 반복문 작성 없이 전체 데이터 배열에 대해 빠른 연산을 제공하는 다양한 표준 수학 함수 제공

즉 고성능 수치 계산을 위한 라이브러리로 메모리 효율이 좋고, 배열 단위로 데이터 관리 및 연산 수행에 유용하다.

# 사용 예시

# 1
data = [[1,2,3], [4,5,6], [7,8,9]]

a = np.array(data)
a

# 2
np.arange(1, 10).reshape(3, 3) # 3 * 3 행렬로 reshape

 

Pandas

pandas란? 데이터 조작 및 분석을 위한 데이터 분석 라이브러리 중 하나로 테이블형 데이터를 다룰 수 있는 다양한 기능을 가진 라이브러리다. 

 

데이터를 다루기 위해 데이터 프레임(DataFrame)과 시리즈(Series)를 제공하며 DataFrame은 테이블형(2차원/ 행,렬이 존재) 데이터를 다루고 Series는 1차원 데이터를 다룬다.

[Series 예시]
[DataFrame 예시]

 

Matplotlib

Matplotlib란? 데이터의 시각화를 위해 사용되는 파이썬 라이브러리다. 

[기본 예시]

  • scatter : 두 변수의 상관 관계를 좌표계의 평면에 점으로 표현한 그래프
  • histogram : x축을 값, y축은 x축의 값들이 나온 횟수 또는 개수 등을 나타낸 그래프 
  • pie : 하나의 원을 여러 영역으로 나눈 원 그래프(범주별 구성 비율을 원형으로 표현)
  • bar : 여러 그룹간의 규모, 크기 등을 나타내는 그래프(범주가 있는 데이터 값을 직사각형 막대로 표현한 그래프)

LMS 교육이 끝나고 점심식사를 한 후에 클래스 심화 내용의 이론수업을 진행했다.

1. 클래스 메서드(@classmethod)

클래스 메서드란? 클래스에 작용하는 메서드로 클래스로 호출하기 위한 메서드이다.

@classmethod 데코레이터를 사용하며, 함수의 첫번째 인자로 cls를 사용하고 클래스 자체가 반영된다. 따라서 클래스의 속성에 접근할 수 있게 된다. (클래스 변수의 변경이 필요할때)

 

주로 클래스 속성에 접근하려는 경우 사용된다.

[classmethod 예시]

 

2. 정적 메서드(@staticmethod)

정적 메서드란? 클래스나 인스턴스와는 독립적으로 작동하는 메서드이다.

@staticmethod 데코레이터를 사용하며, 인스턴스 메소드와 달리 self 같은 인자가 필요 없다. 클래스 이름으로 직접 메소드를 호출할 수 있고, 인스턴스 속성에 접근하거나 인스턴스 메서드를 호출 할 수 없다.

 

주로 유틸리티성 함수를 위한 용도로 사용된다. 클래스의 어떠한 속성에도 변화를 일으키지 않는 함수이며, 입력이 들어오면 항상 같은 출력을 반환하는 순수함수들이 해당한다. 즉 개발자는 인스턴스에 어떠한 변화도 일으키지 않는구나 라는 의미를 내포하고 있는 것으로 해석하고 사용할 수 있다.

 

여기서 의문..? 유틸리티 함수의 경우 클래스 내부에 위치하지 않고 그냥 모듈로 따로 모아두면 안되나?? 그러면 staticmethod가 필요없는것 아닌가?

 

정답은 없지만 이 부분은 클래스와 연관이 높은 함수라면 @staticmethod를 활용하여 클래스 내에 위치 시켜 연관이 깊다고 의미를 부여하는 것이다.  즉 해당 메서드가 해당 클래스와 연관이 깊다 느껴지면 staticmethod로 만들어 사용하면 되고 조직의 문화나 취향차이 같다..

[staticmethod 예시]

3. 메서드 오버라이딩

오버라이딩이란 서브 클래스(subclass, 자식 클래스)에서 슈퍼 클래스(superclass, 부모 클래스)의 메서드를 새롭게 정의하는 과정을 의미 즉 자식 클래스가 부모 클래스의 메서드를 재정의 하는 것을 의미한다.

 

부모의 메서드를 그대로 사용할 수 있지만, 필요에 따라 해당 메서드의 기능을 변경할 수 있다는 것이다.

(참고로 파이썬에서는 오버로딩은 없다.)

[오버라이딩 예시]

4. 추상 클래스

추상 클래스란? 기본적으로 구현하지 않아도 되는 메서드(추상 메서드)를 가진 클래스로 메서드의 목록만 가진 클래스이며, 상속받은 클래스에서 메서드 구현을 강제로 해줘야한다.

 

즉 서브 클래스에서 반드시 구현해야하는 메서드를 정의하는데 사용된다.

 

import로 abc 모듈을 가져와야하며, abc 모듈의 ABC클래스로 추상클래스를, @abstractmethod 데코레이터를 사용하여 추상 메서드를 정의한다.

 

그렇다면 추상 클래스는 언제 사용할까? 추상클래스는 현재 클래스에서는 메서드를 지정하기 애매하거나 너무 다양할 때 사용된다. 예로 사람이라는 클래스가 있을 때, 사람의 행동인 먹는 것(eat), 자는 것(sleep)과 같은 행동들이 있다. 여기서 사람이 직접 밥을 어떻게 먹고, 어떻게 자고 하는 것을 정의하기가 애매하다. 사람들마다 구체적인 부분이 다르기 때문이다.

그렇게 때문에 사람클래스의 eat과 sleep을 추상 메서드로 두고 자식 클래스에서 구현하도록 하는 것이다.

[추상클래스 예시]

 

파이썬에서는 인터페이스(interface)가 존재하지 않지만 추상클래스를 이용하여 인터페이스처럼 동작할 수 있도록 만들 수 있다.

 

5. 비공개 속성(Private Attributes)

비공개 속성? 클래스 내부에서만 접근이 가능하며 외부에서는 접근이 제한되는 속성을 의미. 파이썬에서는 속성 이름 앞에 두 개의 언더바(__)를 붙여 해당 속성을 비공개처럼 표현할 수 있다.

 

하지만 파이썬의 비공개 속성은 완전히 접근을 제한하는 것이 아니다. 비공개 속성으로 접근을 제한한 것은 맞지만, 실제로 접근이 불가능한 것은 아니다.

# 비공개 속성 접근 방법
print(c._MyClass__c)

 

이렇게 클래스 명과 변수명으로 비공개 속성에 접근할 수 있다.

 

비공개 속성을 사용하는 목적은 클래스의 안정성을 유지하고, 객체의 내부 로직을 숨기기 위한 목적으로 활용된다.

Comments