본문 바로가기
AI 오케스트레이션 프리코스

SK네트웍스 Family 엔코아 AI 오케스트레이션 프리코스 5|파이썬 내장 함수·클래스·상속·모듈

by 랩보다 AI 더 잘해지기 2026. 8. 7.
728x90

 

이번 프리코스에서는 파이썬의 내장 함수를 복습하고, 객체와 클래스부터 상속, 모듈까지 학습했다. 마지막에는 random과 datetime 모듈을 활용해 임의의 값과 날짜·시간을 다루는 방법도 살펴봤다.

처음에는 객체와 클래스가 낯설게 느껴졌지만, 자동차 공장과 설계도에 비유해 생각하니 각각의 역할을 조금 더 쉽게 구분할 수 있었다.

1. 파이썬 내장 함수

내장 함수(Built-in Function)는 파이썬에 기본적으로 포함되어 있어 별도의 import 없이 바로 사용할 수 있는 함수다.

지금까지 사용했던 print(), input(), len(), int()도 모두 내장 함수였다.

대표적인 내장 함수는 다음과 같다.

  • int(), str(), list(), tuple(), set(), bool(): 자료형 변환
  • max(), min(): 최댓값과 최솟값 반환
  • abs(): 절댓값 반환
  • sum(): 값의 합계 계산
  • len(): 문자열이나 자료의 길이 확인
  • type(): 데이터의 자료형 확인
  • range(): 일정한 범위의 숫자 생성
  • round(): 숫자 반올림
numbers = [10, 20, 30]

print(max(numbers))
print(min(numbers))
print(sum(numbers))
print(len(numbers))

print()의 sep과 end도 다시 확인했다.

print("Python", "FastAPI", "Streamlit", sep=" | ")
print("Hello", end=" ")
print("Python")

sep은 여러 값을 구분하는 문자를 정하고, end는 출력이 끝난 뒤 들어갈 문자를 정한다. 기본적으로 sep에는 공백, end에는 줄바꿈이 설정되어 있다.

필요한 함수가 기억나지 않을 때는 파이썬 공식 문서나 help()를 이용해 사용법을 찾아보는 습관도 중요하다는 것을 배웠다.

2. 객체와 클래스

객체 지향 프로그래밍은 현실의 사물을 바라보는 것처럼 데이터와 기능을 하나의 단위로 묶어 관리하는 방식이다.

클래스와 객체의 관계는 설계도와 실제 제품으로 생각할 수 있다.

  • 클래스: 객체를 만들기 위한 설계도
  • 객체: 클래스를 이용해 실제로 만든 데이터
  • 속성: 객체가 가지고 있는 데이터
  • 메서드: 객체가 수행할 수 있는 기능

자동차를 예로 들면 자동차 설계도가 클래스이고, 그 설계도로 만든 각각의 자동차가 객체다. 자동차의 색상과 바퀴 수는 속성이며, 출발하거나 멈추는 동작은 메서드가 된다.

같은 구조의 자동차 100대를 각각 변수와 함수로 관리하면 코드를 계속 반복해야 한다. 반면 클래스를 사용하면 공통 구조를 한 곳에 정의한 뒤 필요한 만큼 객체를 만들 수 있다.

3. 클래스 선언과 인스턴스 생성

파이썬에서는 class 키워드를 사용해 클래스를 정의한다. 클래스 이름은 보통 각 단어의 첫 글자를 대문자로 작성하는 파스칼 케이스를 사용한다.

class Person:
    def __init__(self):
        self.hello = "안녕하세요"

    def greeting(self):
        print(self.hello)


james = Person()
james.greeting()

위 코드에서 Person은 클래스이고, james는 Person 클래스로 만든 객체다. 특정 클래스로 만든 객체라는 점을 강조할 때는 인스턴스라고 부른다.

self의 역할

self는 생성된 인스턴스 자기 자신을 가리킨다.

self.hello = "안녕하세요"

이 코드는 현재 객체에 hello라는 속성을 만들고, 그 안에 "안녕하세요"라는 값을 저장한다는 뜻이다.

메서드를 호출할 때 self에 값을 직접 전달하지 않아도 파이썬이 현재 인스턴스를 자동으로 전달한다.

__init__() 생성자

__init__()은 객체가 만들어질 때 처음 한 번 실행되는 특별한 메서드다. 객체가 처음 가져야 할 속성을 설정할 때 사용한다.

class Person:
    def __init__(self, name):
        self.name = name

Person("James")처럼 객체를 만들면 전달한 "James"가 name으로 들어가고, self.name에 저장된다.

4. 클래스 상속

상속은 기존 클래스의 속성과 메서드를 새로운 클래스에서 이어받아 사용하는 기능이다.

공통 기능은 부모 클래스에 작성하고, 서로 다른 기능만 자식 클래스에 추가하면 코드의 중복을 줄일 수 있다.

class Character:
    def __init__(self, name, health):
        self.name = name
        self.health = health

    def attack(self):
        print(f"{self.name}이 공격합니다.")


class Warrior(Character):
    def __init__(self, name, health, strength):
        super().__init__(name, health)
        self.strength = strength

    def attack(self):
        super().attack()
        print(f"{self.name}이 강력한 공격을 합니다.")

Warrior(Character)는 Warrior가 Character 클래스를 상속한다는 뜻이다.

super()와 오버라이딩

super()는 부모 클래스의 생성자나 메서드를 호출할 때 사용한다.

super().__init__(name, health)

이 코드를 이용하면 부모 클래스에 이미 작성된 이름과 체력 초기화 기능을 다시 작성하지 않아도 된다.

오버라이딩은 부모 클래스에서 물려받은 메서드를 자식 클래스의 목적에 맞게 다시 정의하는 것이다. 같은 attack() 메서드라도 전사는 강력한 공격을 하고, 마법사는 마법 공격을 하도록 다르게 만들 수 있다.

상속을 사용하면 다음과 같은 장점이 있다.

  • 공통 코드의 중복을 줄일 수 있다.
  • 기존 클래스를 재사용하고 확장할 수 있다.
  • 수정해야 할 코드가 줄어 유지보수가 쉬워진다.
  • 클래스 사이의 관계를 구조적으로 표현할 수 있다.

5. 파이썬 모듈

모듈은 함수, 클래스, 변수 등의 파이썬 코드를 담고 있는 .py 파일이다.

자주 사용하는 기능을 모듈로 분리하면 다른 파일에서 다시 사용할 수 있다. 코드가 기능별로 정리되기 때문에 프로젝트 구조를 이해하거나 수정하기도 쉬워진다.

모듈을 불러올 때는 import를 사용한다.

import character

player = character.Character("전사", 100)
player.attack()

별칭을 지정할 수도 있다.

import numpy as np

모듈의 특정 기능만 가져오는 방법도 있다.

from math import sqrt

print(sqrt(9))

모듈의 모든 항목을 가져오는 from 모듈 import * 방식도 있지만, 서로 같은 이름을 가진 함수나 변수끼리 충돌할 수 있어 주의해야 한다.

또한 모듈 파일 이름은 변수 이름과 같은 규칙을 따라야 한다. 따라서 파일 이름을 숫자로 시작하면 정상적으로 import하기 어렵다.

6. Jupyter Notebook 코드를 모듈로 만들기

Jupyter Notebook 파일은 기본 확장자가 .ipynb이므로 일반적인 파이썬 모듈로 사용하려면 .py 파일로 변환해야 한다.

jupyter nbconvert --to script 파일명.ipynb

노트북 셀의 내용을 바로 파이썬 파일로 저장하는 방법도 있다.

%%writefile character.py

class Character:
    def __init__(self, name, health):
        self.name = name
        self.health = health

모듈로 저장하기 전에는 코드에 오류가 없는지 먼저 확인해야 한다. 불러오는 과정에서 모듈 내부 코드가 실행되기 때문에 오류가 있으면 import도 정상적으로 처리되지 않을 수 있다.

7. random 모듈

random은 임의의 숫자를 만들거나 여러 값 중 하나를 무작위로 선택할 때 사용하는 파이썬 표준 라이브러리다.

import random

주요 기능은 다음과 같다.

random.random()          # 0 이상 1 미만의 실수
random.randint(1, 10)    # 1부터 10 사이의 정수
random.choice(["사과", "포도", "오렌지"])

리스트의 순서를 무작위로 섞을 때는 shuffle()을 사용한다.

cards = ["A", "J", "Q", "K"]
random.shuffle(cards)

print(cards)

중복 없이 여러 개의 값을 선택할 때는 sample()을 사용할 수 있다.

numbers = list(range(1, 11))
selected = random.sample(numbers, 3)

print(selected)

choice()는 하나의 값을 선택하고, sample()은 원하는 개수만큼 중복 없이 선택한다는 차이가 있다.

8. datetime 모듈

datetime은 날짜와 시간을 만들고 계산하는 데 사용하는 표준 라이브러리다.

현재 날짜와 시간은 다음과 같이 가져올 수 있다.

import datetime

now = datetime.datetime.now()
print(now)

특정 날짜와 시간을 직접 만들 수도 있다.

specific_date = datetime.datetime(2023, 5, 23, 10, 30)
print(specific_date)

strftime()을 사용하면 날짜와 시간을 원하는 형태의 문자열로 바꿀 수 있다.

now = datetime.datetime.now()
formatted_date = now.strftime("%Y-%m-%d")

print(formatted_date)

timedelta()는 날짜와 시간의 차이를 계산할 때 사용한다.

yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
print(yesterday)

시간대가 다른 지역의 시간으로 변환하는 방법도 살펴봤다. 날짜와 시간 기능은 기록 생성 시간, 예약 기능, 게시 날짜 처리 등 실제 프로그램의 여러 곳에서 활용할 수 있다.

새롭게 이해한 점

이번 학습을 통해 지금까지 자연스럽게 사용했던 print(), len(), type() 등이 모두 내장 함수라는 것을 알게 됐다.

객체와 클래스는 처음에는 추상적으로 느껴졌지만, 클래스는 공통 구조를 정의하는 설계도이고 객체는 그 설계도로 만든 실제 데이터라고 생각하니 관계가 조금 더 명확해졌다.

특히 상속은 단순히 부모 클래스의 기능을 가져오는 것만이 아니라, 중복되는 코드를 줄이고 프로그램을 체계적으로 관리하기 위한 방법이라는 점이 중요했다.

모듈 역시 파일을 나누는 것에서 끝나는 것이 아니라, 작성한 코드를 다른 곳에서 재사용하고 유지보수하기 쉽게 만드는 구조화 방법이라는 것을 이해했다.

앞으로 복습할 내용

  • self가 현재 인스턴스를 가리키는 과정
  • __init__()을 이용한 속성 초기화
  • 부모 클래스와 자식 클래스의 관계
  • super()와 메서드 오버라이딩
  • 직접 만든 모듈을 다른 파일에서 불러오는 방법
  • random 함수별 차이
  • datetime의 날짜 형식 지정자와 시간대 변환

핵심 정리

이번 프리코스에서는 파이썬에 기본으로 준비된 내장 함수부터 객체 지향 프로그래밍의 기초인 클래스와 객체를 학습했다. 이어서 생성자, 속성, 메서드, self, 상속, 오버라이딩, super()의 역할을 코드로 확인했다.

또한 파이썬 코드를 모듈로 분리하고 import로 다시 사용하는 방법을 배웠다. 마지막으로 random과 datetime 모듈을 활용해 무작위 값과 날짜·시간을 처리하는 기본 방법까지 살펴봤다.

이제 개념을 아는 것에 그치지 않고 작은 클래스를 직접 만들고, 파일을 모듈로 나누어 불러오는 연습을 반복해야겠다. 필요한 기능을 공식 문서에서 직접 찾아보는 습관도 함께 길러야겠다.

댓글