데이터 분석 part

함수, 클래스, 모듈과 패키지

bleufonce 2025. 2. 9. 16:53

< 함수 >

  • 함수는 특정작업을 수행하는 코드 블록

 

기본 구조

def 함수이름(매개변수1, 매개변수2, ...):
    실행할 코드
    return 반환값
함수를 정의하는 부분이 있고 사용하는 부분이 따로 있다.

def 뒤에 함수이름을 써준다.

함수 이름은 함수를 만드는 사람이 임의로 만들 수 있다.

함수이름 뒤 괄호안의 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수이다.
return은 함수의 결과값을 리턴하는 명령어.
프로그램에서 함수는 입력, 출력이 없을 수 있다.

 

 

매개변수와 인수

def add(a,b):         # a, b는 매개 변수
  return a+b

print(add(3,4))       # 3, 4는 인수
a,b는 매개변수이며, 3,4는 인수이다.
매개변수 - 함수에서 정의되어 사용되는 변수 (=인자, 파라미터)
인수 - 함수를 호출할 때 건네주는 변수
리턴값 = 결괏값, 출력값, 반환값, 돌려주는 값
입력값이 들어오면 함수에서 받아서 리턴값을 처리해준다.

 

 

일반적인 함수

def add(a,b):
  result = a + b
  return result
c = add(3,4)
print(c)
사용법 : c = add(3,4) → 리턴값을 받을 변수 = 함수이름 (인수1, 인수2)
결과는 7

 

 

입력값이 없는 함수

def name():
  return 'Yumi'
a = name()
print(a)
사용법 : a = name() → 리턴값을 받을 변수 = 함수 이름()
결과는 Yumi

 

 

리턴값(반환값)이 없는 함수

def add(a,b):
  print(f"{a}{b}의 합은 {a+b}입니다.")
add(1,2)
사용법 : add(1,2) → 함수이름(인수1,인수2)
출력결과 : 1와 2의 합은 3입니다.
리턴값이 없고 그저 print문을 그대로 출력한 것이다.

 

 

입력값, 리턴값(반환값) 둘다 없는 함수

def name():
  print('Yumi')
name()
사용법 : 함수이름()
출력결과 : Yumi()
★ 들여쓰기에 항상 주의하자!

 

 

여러값 반환

def add_and_multiply(a, b):
    return a + b, a * b

sum_result, mul_result = add_and_multiply(3, 5)
print(f"합: {sum_result}, 곱: {mul_result}")
출력결과 :
합: 8, 곱: 15
파이썬 함수는 여러값을 반환할 수 있다.

 

 

가변 매개변수

  •  *  → 매개변수 앞에 별표를 붙이면 여러개의 매개변수를 한번에 받을 수 있다.
def add_all(*args):
    total = 0
    for num in args:
        total += num
    return total

result = add_all(1, 2, 3, 4, 5)
print(result)
출력결과 : 15
args는 관례적으로 자주 사용함(arguments). 임의로 정한 변수이름임.

 

 

키워드 가변 매개변수

  •  ** → 매개변수 앞에 별표2개를 붙이면 딕셔너리 형태로 key와 value로 받을 수 있다.
def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(name="Sumi", age=25, city="Seoul")
출력결과 : 
name: Sumi
age: 25
city: Seoul
kwargs는 관례적으로 자주 사용함(keyword arguments). 임의로 정한 변수이름임.

 

 

함수 내 함수

  • 함수안에 다른 함수를 정의할 수 있다.
def outer_function(text):
    def inner_function():
        print(text)
    inner_function()

outer_function("Hello from the inner function!")

# 출력: Hello from the inner function!

 

 

람다 함수

  • 한 줄로 간단히 표현할 수 있는 함수. lamda 키워드 사용.
add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

 

 

< 클래스 >

  • 반복되는 변수(값) & 메서드(행동)를 미리 정해놓은 틀 (설계도)

기본 구조

  • __init__ : 생성자 메서드로, 클래스의 인스턴스가 생성될 때 자동으로 호출. 초기 속성을 설정.
  • self : 클래스의 인스턴스를 가리키는 참조 변수. 메서드 정의 시 첫 번째 매개변수로 항상 self를 포함해야 한다.
  class 클래스이름:
    def __init__(self, 매개변수1, 매개변수2, ...):
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2
        ...

    def 메서드이름(self, 매개변수1, 매개변수2, ...):
        실행할 코드
클래스 이름은 앞글자를 대문자로 하는것이 규칙이다.

 

클래스 예시

# 클래스 선언, 정의
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def greet(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.")

# 인스턴스 생성 (객체 생성)
person1 = Person("Sumi", 30)
person2 = Person("Charls", 25)

# 메서드 호출
person1.greet()  # 출력: 안녕하세요, 제 이름은 Sumi이고, 나이는 30살입니다.
person2.greet()  # 출력: 안녕하세요, 제 이름은 Charls이고, 나이는 25살입니다.
클래스는 속성을 변경하고 메서드를 추가할 수 있다.

 

 

클래스 상속

  • 상속을 통해 기존 클래스의 속성과 메서드를 물려받을 수 있다.
  • 기존 클래스는 부모, 상속받은 클래스는 자식으로 생각하기.
  • 자식 클래스 이름 괄호안에 부모 클래스의 이름을 넣어주면 된다.
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Cat(Animal):
    def speak(self):
        return f"{self.name}가 야옹합니다."

class Dog(Animal):
    def speak(self):
        return f"{self.name}가 멍멍합니다."

# 인스턴스 생성
cat = Cat("Whiskers")
dog = Dog("Rover")

# 메서드 호출
print(cat.speak())  # 출력: Whiskers가 야옹합니다.
print(dog.speak())  # 출력: Rover가 멍멍합니다.

 

 

클래스 변수와 인스턴스 변수

  • 객체 변수는 다른 객체들의 영향을 받지 않고 독립적인 값을 유지한다. self → 각각의 객체
  • 클래스 변수클래스 전체에서 공유되며, 인스턴스 변수는 각 인스턴스마다 독립적으로 존재함.
class Employee:
  company_name = "ABC Corp"  # 클래스 변수

  def __init__(self, name, salary):
      self.name = name  # 인스턴스 변수
      self.salary = salary  # 인스턴스 변수

# 인스턴스 생성
emp1 = Employee("John", 50000)
emp2 = Employee("Jane", 60000)

# 클래스 변수 접근
print(Employee.company_name)  # 출력: ABC Corp

# 인스턴스 변수 접근
print(emp1.name, emp1.salary)  # 출력: John 50000
print(emp2.name, emp2.salary)  # 출력: Jane 60000
모든 직원(Employee)들은 같은 회사(ABC Corp)에 다니지만 각자 이름(name)이 다르고 월급(salary)이 다르다.

 

 

메서드 오버라이딩

  • 자식 클래스가 부모 클래스의 메서드를 재정의하는 것,
  • 부모님이 물려줬는데 뒤엎기. 부모가 준 것을 덮어 씌우기.
class Parent:
    def display(self):
        print("부모 클래스의 display 메서드입니다.")

class Child(Parent):
    def display(self):
        print("자식 클래스의 display 메서드입니다.")

# 인스턴스 생성
child = Child()

# 메서드 호출
child.display()  # 출력: 자식 클래스의 display 메서드입니다.

 

 

 

< 모듈과 패키지 >

  • 모듈과 패키지를 적절하게 사용하면 코드의 재사용성과 유지보수성을 높일 수 있다.

모듈

  • 파일 자체를 가져와서 그 안에 있는 클래스, 함수, 변수를 쓰는 것. 만들어진 것을 불러와서 쓰는 개념.
  • 모듈은 하나의 파일이라고 생각하기. 파이썬 파일(.py)는 모듈로 간주.
  • 다른 파일에서 import 해서 사용할 수 있음.

패키지

  • 관련있는 모듈의 집합.
  • 패키지는 폴더라고 생각하기. 패키지는 여러 개의 모듈(파일)을 폴더로 묶어놓은 것.

 

모듈 예시

 

  • step 1. 로또 번호를 발생하는 (lotto_generator.py)파일을 불러와서 구글 colab에 저장한다.
import random

class LottoGenerator:
    def __init__(self, num_numbers=6, num_range=45):
        self.num_numbers = num_numbers
        self.num_range = num_range

    def generate_numbers(self):
        return sorted(random.sample(range(1, self.num_range + 1), self.num_numbers))

 

 

 

  • step 2. 불러온 로또번호 발생기 파일을 import 해서 사용자 입력을 받아 로또번호를 보여주는 프로그램을 만든다.
from lotto_generator import LottoGenerator

def display_menu():
    print("\n로또 번호 생성기")
    print("1. 로또 번호 생성")
    print("2. 종료")

def main():
    generator = LottoGenerator()

    while True:
        display_menu()
        choice = input("선택: ")

        if choice == '1':
            numbers = generator.generate_numbers()
            print(f"생성된 로또 번호: {numbers}")
        elif choice == '2':
            print("프로그램을 종료합니다.")
            break
        else:
            print("잘못된 입력입니다. 다시 시도하세요.")

if __name__ == "__main__":
    main()
파일을 불러올 때 → from [모듈 또는 패키지] import [가져올 것]
함수명, 변수명, 클래스명 중 필요한 것만 가져올 수 있음.
ex) from 파일명 import 함수명
      from 파일명 import 변수명
      from 파일명 import 클래스명

 

 

 

기억하기

들여쓰기 실수를 방지하기.
객체는 무조건 값과 행동이 있다.
클래스로 만든 객체를 '인스턴스'라고 한다.
클래스 안에 구현된 함수는 '메서드'라고 한다.
클래스에서 메서드의 첫번째 매개변수 이름인 self는 자기 자신을 의미.
__init__.py파일이 있어야 패키지가 인식된다. (파이썬 3.3 버전 이후로는 없어도 가능하지만 생성하는 것이 안전)

 

 

'데이터 분석 part' 카테고리의 다른 글

Pandas 데이터 정렬, 필터링, 그룹화, 집계  (0) 2025.02.09
Pandas 기초  (0) 2025.02.09
if문(조건문), for문, while문(반복문)  (0) 2025.02.09
파이썬 개념 이해  (0) 2025.02.08
그로스 마케팅 개념  (0) 2025.02.08