풀스택 백엔드 2026.07.14

syyu21b·2026년 7월 14일

풀스택 - 백엔드

목록 보기
43/49
post-thumbnail

[SECTION 07. 파이썬 기초 문법 - 함수]

1. 함수

  • 함수(Function)는 특정 작업을 묶어 이름을 붙여둔 코드 블록입니다.
  • 함수를 사용하면 재사용성, 가독성, 유지보수성이 좋아집니다.
  • def 키워드로 정의합니다.

예제 1: 간단한 함수 정의와 호출

def greet():
    print("안녕하세요!")
    print("파이썬 함수에 오신 것을 환영합니다.")
    print("이 함수는 단순히 인사를 합니다.")

greet()
greet()
print("함수 호출 완료!")

예제 2: 매개변수와 return에 차이가 있는 함수

# 매개변수, return 모두 없는 함수
def printHello():
    print("Hello World")

printHello()

# 매개변수는 O, return이 없는 함수
def printName(name):
    print("Hello " + name)
    
printName("김수한")

2. 매개변수와 return

  • 함수는 입력값(매개변수)을 받을 수 있습니다.
  • return을 사용하면 결과값을 호출한 곳으로 돌려줍니다.

예제 1: 매개변수와 반환값

def add(a, b):
    result = a + b
    return result

x = add(3, 5)
print("3 + 5 =", x)

y = add(10, 20)
print("10 + 20 =", y)

예제 2: 여러 개 반환

def min_max(nums):
    return min(nums), max(nums)

numbers = [4, 7, 1, 9, 3] # 리스트
low, high = min_max(numbers) #1, 9

print("리스트:", numbers)
print("최솟값:", low)
print("최댓값:", high)

3. 콜백 함수

  • 함수의 인자로 다른 함수를 전달할 수 있습니다.
  • 이런 함수를 콜백 함수(Callback Function)라고 부릅니다.

예제 1: 함수 인자로 전달

def calc(a, b, func):
    return func(a, b)

def add(x, y):
    return x + y

def mul(x, y):
    return x * y

print("덧셈:", calc(3, 4, add))
print("곱셈:", calc(3, 4, mul))

예제 2: 콜백 응용

def greet(name, formatter):
    return formatter(name)

def simple_format(n):
    return f"안녕하세요, {n}!"

def excited_format(n):
    return f"반가워요, {n}!!!"

print(greet("Alice", simple_format))
print(greet("Bob", excited_format))

4. 람다 함수

  • lambda 키워드를 이용한 한 줄 함수 (익명 함수)
  • 간단한 동작을 빠르게 정의할 때 사용합니다.

예제 1: 기본 람다

square = lambda x: x * x
print("3 제곱:", square(3))
print("7 제곱:", square(7))

예제 2: 정렬에 활용

students = [("Lee", 40), ("hancoding", 25), ("Kim Suhan", 19)]

# 나이 기준 정렬
students.sort(key=lambda s: s[1])
print("나이순 정렬:", students)

# 이름 길이 기준 정렬
students.sort(key=lambda s: len(s[0]))
print("이름 길이순 정렬:", students)

5. 파일 입출력

  • open("파일명", "모드")로 파일을 열고, read()/write() 사용
  • 모드: "r"(읽기), "w"(쓰기), "a"(추가)

예제 1: 파일 쓰기

f = open("test.txt", "w", encoding="utf-8")
f.write("Hello, Python!\n")
f.flush()
f.write("파일 입출력 연습입니다.\n")
f.close()
print("파일 쓰기 완료")

예제 2: 파일 읽기

f = open("test.txt", "r", encoding="utf-8")
lines = f.readlines()
f.close()

for line in lines:
    print("읽은 줄:", line.strip())

6. 연습문제

  1. 두 수를 매개변수로 받아 합과 곱을 구하는 함수를 정의하고 실행하세요.

    • 정답
      def calc(a, b):
          return a + b, a * b
      
      x = int(input("첫 번째 정수:"))
      y = int(input("두 번째 정수:"))
      
      result1, result2 = calc(x, y)
      
      print(f"합: {result1}, 곱:{result2}")
  2. 학생 이름과 점수를 입력받아 딕셔너리 형태로 저장한 뒤, 평균 점수를 구하는 프로그램을 함수로 작성하세요.

    • 정답
    dict = {} # 딕셔너리
    
    def inputCommand():
        print("1. 학생 등록")
        print("2. 학생 목록")
        print("0. 프로그램 종료")
        cmd = int(input("명령어 입력:"))
        return cmd
    
    def printStudent(dict):
        for name, score in dict.items():
            print(f"학생 이름: {name} / 학생 점수: {score}")
    
    def insertStudent(dict):
        name = input("학생 이름:")
        score = int(input("학생 점수:"))
        dict[name] = score
    
    while True:
        cmd = inputCommand()
    
        if cmd == 1:
            insertStudent(dict)
        elif cmd == 2:
            printStudent(dict)
        elif cmd == 0:
            print("프로그램 종료")
            break
        else:
            print("존재하지 않는 명령어입니다.")
  3. students.txt 파일에 아래 세 줄을 저장하는 프로그램을 작성하시오.

    • 정답
    # 입력 예시
    홍길동, 90
    김철수, 85
    이영희, 95
    f = open("students.txt", "w", encoding="utf-8")
    f.write("홍길동, 90\n")
    f.write("김철수, 85\n")
    f.write("이영희, 95")
    f.close()
  4. 위에서 작성한 students.txt 파일을 읽어서 한 줄씩 화면에 출력하시오.

    • 정답
    # 출력 예시
    홍길동, 90
    김철수, 85
    이영희, 95
    f = open("students.txt", "r", encoding="utf-8")
    lines = f.readlines()
    f.close()
    
    for line in lines:
        print(line.strip())
  5. students.txt 파일을 읽어 점수의 총합과 평균을 구하시오.

    • 정답
    # 출력 예시
    총점: 270
    평균: 90.0
    f = open("students.txt", "r", encoding="utf-8")
    lines = f.readlines()
    f.close()
    
    total = 0
    count = 0
    
    for line in lines:
        lst = line.split(",")
        name = lst[0]
        score = int(lst[1].strip())
        total += score
        count += 1
    
    print("점수의 총합:", total)
    print(f"점수의 평균: {total / float(count):.2f}")
    

[SECTION 08. 파이썬 기초 문법 - 클래스]

1. 클래스와 객체

  • 클래스(Class): 객체를 만들기 위한 설계도
  • 객체(Object): 클래스로부터 생성된 실제 인스턴스
  • 객체는 속성(즉, 프로퍼티 / 변수)행동(메서드)를 가집니다.

예제 1: 간단한 클래스 정의와 객체 생성

class Person:
    def __init__(self, name, age):
        self.name = name      # 속성(필드)
        self.age = age

    def introduce(self):      # 메소드
        print(f"안녕하세요, 저는 {self.name}이고 나이는 {self.age}살입니다.")

p1 = Person("Alice", 21)
p2 = Person("Bob", 25)

p1.introduce()
p2.introduce()

예제 2: 여러 객체 만들기

class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    def bark(self):
        print(f"{self.name}({self.breed})가 멍멍 짖습니다!")

dog1 = Dog("초코", "푸들")
dog2 = Dog("바둑이", "진돗개")

dog1.bark()
dog2.bark()

2. 생성자와 소멸자

  • 생성자(__init__): 객체가 생성될 때 자동 실행되는 메서드
  • 소멸자(__del__): 객체가 소멸될 때 자동 실행되는 메서드

예제 1: 생성자

class Student:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} 학생이 등록되었습니다.")

s1 = Student("철수")
s2 = Student("영희")

예제 2: 생성자 + 소멸자

class Temp:
    def __init__(self): # 생성자
        print("객체가 생성되었습니다.")

    def __del__(self): # 소멸자
        print("객체가 소멸되었습니다.")

t = Temp() # 객체 생성
print("작업 중...")
print("작업 중...")
print("작업 중...")
del t
print("작업 중...")
print("작업 중...")
print("작업 중...")
print("프로그램 종료")

3. 클래스 변수

  • 클래스 변수: 클래스에 소속된 변수 (모든 객체가 공유)
  • 인스턴스 변수: 객체마다 따로 존재하는 변수

예제 1: 클래스 변수 vs 인스턴스 변수

class Counter:
    count = 0

    def __init__(self, name):
        self.name = name
        Counter.count += 1

c1 = Counter("첫 번째")
# 완전 새로운 필드 변수
c1.count = 100
c2 = Counter("두 번째")

# 공유하는 count
print("Counter의 count:", Counter.count)

# C1만 소유하고 있는 count
print("C1의 count:", c1.count)

# 공유하는 count
print("Counter의 count:", Counter.count)

예제 2: 클래스 변수 확인

class Car:
    wheels = 4  # 모든 차에 공통 적용되는 클래스 변수

    def __init__(self, brand):
        self.brand = brand

car1 = Car("Hyundai")
car2 = Car("Kia")

print("Car의 바퀴 수:", Car.wheels)
print("car1:", car1.brand, car1.wheels)
print("car2:", car2.brand, car2.wheels)

4. 상속

  • 상속(Inheritance): 기존 클래스를 확장하여 새로운 클래스를 만드는 것
  • 부모 클래스의 속성과 메서드를 자식 클래스가 물려받습니다.

예제 1: 단일 상속

class Animal:
    def speak(self):
        print("동물이 소리를 냅니다.")

class Dog(Animal):
    def speak(self):
        print("멍멍!")

class Cat(Animal):
    def speak(self):
        print("야옹!")

dog = Dog()
cat = Cat()
dog.speak()
cat.speak()

예제 2: super() 활용

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

    def introduce(self):
        print(f"안녕하세요, 저는 {self.name}입니다.")

class Student(Person):
    def __init__(self, name, major):
        super().__init__(name)  # 부모 생성자 호출
        self.major = major

    def introduce(self):
        super().introduce()
        print(f"제 전공은 {self.major}입니다.")

s = Student("민수", "컴퓨터공학")
s.introduce()

5. 오버라이딩

  • 정의 : 부모 클래스에 있는 메서드를 자식 클래스에서 다시 정의하는 것을 말합니다. 즉, 같은 이름의 메서드를 덮어써서(override) 자식 클래스의 상황에 맞게 동작을 바꾸는 것입니다.
  • 필요한 이유 : 상속받은 기능을 그대로 쓰면 안 맞을 때 부모의 메서드를 자식이 재정의해서 각각 다른 동작을 하도록 만들 수 있습니다. 또한, 필요한 부분만 자식 클래스에서 수정할 수 있어 중복이 줄고 유지 보수성이 올라갑니다.
  • 오버라이딩 규칙
    • 부모 클래스에 같은 이름의 메서드가 있어야 한다.
    • 매개변수 이름과 개수도 동일해야 한다.
    • 자식 클래스에서 새로 정의하면, 부모 메서드는 덮어쓴다.

예제1 : 오버라이딩 실습

# 부모 클래스
class Animal:
    def speak(self):
        print("소리를 냅니다.")

# 자식 클래스 (오버라이딩)
class Dog(Animal):
    def speak(self):   # 부모의 speak()를 덮어씀
        print("멍멍!")

class Cat(Animal):
    def speak(self):   # 부모의 speak()를 덮어씀
        print("야옹!")

# 실행
dog = Dog()
cat = Cat()

dog.speak()  # 멍멍!
cat.speak()  # 야옹!

예제2 : super()의 활용

  • 자식 클래스에서 부모의 메서드도 함께 쓰고 싶을 때super()를 사용합니다.
# 부모 클래스
class Animal:
    def speak(self):
        print("소리를 냅니다.")

# 자식 클래스 (오버라이딩)
class Dog(Animal):
    def speak(self):
        super().speak()  # 부모의 메서드 실행
        print("멍멍!")    # 자식의 추가 동작

dog = Dog()
dog.speak()

0개의 댓글