학습일지

[스나이퍼팩토리] 한컴AI아카데미(26.04.24)

cd-record 2026. 4. 24. 19:04
while문

 

1. 기본 구조와 반복 (while vs if)

if 문은 조건이 맞으면 딱 한 번만 실행하지만, while 문은 조건이 거짓이 될 때까지 계속 실행합니다.

# 0부터 4까지 1씩 증가하며 출력
count = 0
while count < 5:
    count += 1
    if count == 3:
        break # 3이 되면 반복 종료
    print(count)
print("끝") # 1, 2 출력 후 "끝" 출력

 

 

2. 제어 명령어 (break, continue)

반복문의 흐름을 강제로 조절할 때 사용합니다.

  • break: 반복문 전체를 즉시 종료합니다.
  • continue: 나머지 코드를 건너뛰고 반복문의 처음(조건 확인)으로 돌아갑니다.
# 커피 판매 로직 중 거스름돈 부족 상황
if money < perMoney:
    print("금액이 부족합니다.")
    continue # 아래 코드를 실행하지 않고 다시 '돈을 넣어주세요'로 이동

 

 

3. 무한 루프 (while True)

종료 조건을 미리 알 수 없거나, 특정 상황에서 break를 만나기 전까지 계속 실행해야 할 때 사용합니다. 자판기나 주차 관리 프로그램처럼 "언제 끝날지 모르는 반복"을 처리할 때 필수

# 주차장 만차 확인 로직
while True:
    car = input("차량 들어왔나요(y/n)?")
    if car.lower() == "y":
        seats -= 1
    if seats == 0:
        print("만차입니다.")
        break # seats가 0이 되면 무한 루프 탈출

 

4. 자료구조(리스트/딕셔너리)와 함께 사용하기

while 문은 데이터의 개수가 줄어들 때까지 반복하는 작업에 매우 유용합니다.

주의: while 문은 **'참/거짓'**을 판단하므로, 딕셔너리의 전체 재고 합계가 0보다 큰지 확인하거나 데이터를 하나씩 뽑아내는 방식을 써야 합니다.

# 딕셔너리 단어장 학습 예시
words = list(word_dict.items()) # [('apple', '사과'), ('banana', '바나나'), ...]

while words:
    word, mean = words[0] # 첫 번째 데이터 추출
    ans = input(f"{word}의 뜻을 입력하세요: ")
    
    if ans == mean:
        print("통과!")
        words.pop(0) # 맞추면 리스트에서 제거 (리스트가 비면 while 종료)
    else:
        wrong_count += 1
        if wrong_count > 1:
            print("Game Over")
            break

 

while.ipynb
0.01MB

 

 

 

함수

 

1. 함수의 기본 구조

함수는 반복되는 코드를 하나로 묶어 필요할 때마다 호출하여 사용하는 코드의 집합, 선언(정의)하고 호출함으로써 작동합니다.

  • 정의 (Definition): def 함수이름(매개변수): 로 작성합니다.
  • 호출 (Call): 함수이름()으로 실행합니다.
# 함수의 정의
def print_menu():
    print("=== 메뉴 ===")
    print("1. 실행")

# 함수의 호출
print_menu()

 

 

2. 매개변수와 반환값 (Data Flow)

함수는 외부에서 데이터를 받아(매개변수), 내부에서 처리한 뒤, 그 결과를 돌려줄(반환값) 수 있습니다.

  • 매개변수(Parameter): 함수가 처리할 데이터를 받는 통로. (예: add_task(todo_list))
  • 반환값(Return): 함수 수행 후 최종 결과물을 밖으로 보내주는 것. (예: return balance)
Python
 
# 데이터를 받아서 처리하고 결과를 돌려주는 함수
def add_income(balance):
    money = int(input("금액:"))
    balance += money  # 내부 로직
    return balance    # 처리된 결과를 밖으로 전달

 

Q. 함수 사용의 장점 (Why?)

  1. 재사용성: 똑같은 코드를 여러 번 짤 필요 없이 한 번만 만들면 계속 쓸 수 있습니다.
  2. 가독성: main() 함수를 보면 프로그램 전체 흐름이 무엇인지 한눈에 알 수 있습니다.
  3. 유지보수: 기능을 수정하고 싶을 때 그 함수 내부만 고치면 됩니다. (예: 메뉴 디자인을 바꾸고 싶다면 print_menu 함수만 수정)

 

3. 함수로 정리된 코드의 흐름 (모듈화)

작성하신 main() 함수를 보면 프로그램이 어떻게 동작하는지 아주 잘 나타나 있습니다.

 
def main():
    todo_list = [] # 데이터(상태) 정의

    while True:
        print_menu()              # UI 출력
        choice = input("선택: ")   # 이벤트 입력

        if choice == "1":         # 기능 분기 처리
            add_task(todo_list)
        elif choice == "2":
            show_tasks(todo_list)
        # ... 이하 생략

이렇게 기능을 함수 단위로 쪼개는 것을 '모듈화(Modularization)'

 

클래스

 

1. 클래스 기본구조

데이터(변수)와 기능(함수)을 하나의 틀로 묶어놓은 설계도

 

  • __init__ (생성자): 클래스로부터 객체를 처음 만들 때 자동으로 실행되며, 변수(프로퍼티)를 초기화하는 역할을 합니다.
    • 클래스로부터 객체를 만들 때 처음 시작할 때 꼭 필요한 정보를 세팅하는 함수
class Student:
    def __init__(self, name, age):
        self.name = name  # 초기값으로 이름 저장
        self.age = age    # 초기값으로 나이 저장

s1 = Student("김철수", 20)
print(s1.name)  # 김철수
  • self: "내 것"이라는 뜻으로,  클래스 내부에서 자기 자신의 변수나 함수에 접근할 때 반드시 필요합니다. (JS의 this와 동일)
class Dog:
    def __init__(self, name):
        self.name = name  # self.name에 저장됨

    def bark(self):
        # self.name을 써야 내 이름이 무엇인지 알 수 있음
        print(f"{self.name}가 멍멍!")

d1 = Dog("바둑이")
d1.bark() # 바둑이가 멍멍!
  • 메소드(Method): 클래스 내부에 정의된 함수입니다. 파라미터에 항상 self를 넣어주어야 합니다.
    • 개념: 데이터를 조회하거나 수정하는 클래스만의 전용 기능입니다.
class BankAccount:
    def __init__(self):
        self.balance = 0 # 처음 잔액은 0원

    # 데이터를 수정하는 전용 메소드
    def deposit(self, amount):
        self.balance += amount
        print(f"{amount}원 입금 완료.")

my_money = BankAccount()
my_money.deposit(1000) # 메소드를 실행하여 상태 변경
  • 인스턴스 (Instance): 클래스로 만든 실제 물건, 클래스는 '설계도'이고, 인스턴스는 그 설계도로 만든 '실제 객체'입니다.
    • 개념: 아파트 설계도(클래스) 하나만 있으면, 수백 명의 사람이 실제 아파트(인스턴스)에 들어가 살 수 있는 것과 같습니다.
class Car:
    def __init__(self, color):
        self.color = color

# 같은 설계도로 서로 다른 객체 2개를 만듦
car1 = Car("빨간색")
car2 = Car("파란색")

print(car1.color) # 빨간색
print(car2.color) # 파란색

 

* os 라이브러리

파이썬에서 운영체제(Operating System)와 상호작용하기 위해 사용하는 표준 라이브러리

(파이썬 코드를 통해 파일을 열거나, 폴더를 만들고, 현재 컴퓨터의 환경을 제어하는 등의 "컴퓨터 관리 업무"를 할 수 있게 해줍니다.)


  • 1. 화면 정리

여러분이 가계부나 할 일 관리 프로그램에서 clear() 함수를 만들 때 사용한 기능 운영체제마다 화면을 지우는 명령어가 달라서 이를 구분해 주는 역할

import os

# os.name이 'nt'(윈도우)면 'cls' 명령어를, 
# 아니면(맥/리눅스) 'clear' 명령어를 실행합니다.
os.system('cls' if os.name == 'nt' else 'clear')

  • 2. 파일 및 디렉토리(폴더) 관리

파일을 찾거나, 폴더를 생성하고, 이름을 바꾸는 등의 작업이 가능

import os

# 1. 현재 내가 위치한 경로 확인
print(os.getcwd()) 

# 2. 새로운 폴더 만들기
if not os.path.exists("data"):
    os.mkdir("data")

# 3. 폴더 안의 파일 목록 확인하기
print(os.listdir('.'))
  • 3. 환경 변수 및 시스템 정보

컴퓨터의 환경 변수를 가져오거나, 파일의 경로를 운영체제에 맞게 자동으로 합쳐주는 등의 정교한 작업이 가능

import os

# 운영체제에서 설정된 환경 변수(예: 경로 정보 등) 가져오기
print(os.environ.get('PATH'))

# 파일 경로를 운영체제에 맞게 안전하게 합치기 (윈도우는 \, 맥은 /)
path = os.path.join("users", "project", "data.txt")
print(path)

 

function.ipynb
0.01MB

 

 

 

 

JSON

 

1. 직렬화(Serialization)와 역직렬화(Deserialization)

파이썬의 객체(리스트, 딕셔너리 등)를 네트워크로 보내거나 파일에 쓰기 위해 '문자열(String)'로 변환하는 것을 직렬화라고 합니다.

  • json.dumps(): 파이썬 객체를 JSON 문자열로 변환 (serialize)
  • json.loads(): JSON 문자열을 파이썬 객체로 변환 (deserialize)
import json

data = {"이름": "김철수", "나이": 35}

# 1. 파이썬 객체 -> JSON 문자열
json_string = json.dumps(data, ensure_ascii=False)
print(type(json_string)) # <class 'str'>

# 2. JSON 문자열 -> 파이썬 객체
python_obj = json.loads(json_string)
print(type(python_obj))  # <class 'dict'>

 

2. 파일 입출력 (dump vs load)

문자열을 거치지 않고 파일에 직접 저장하거나 불러올 때는 dump와 load를 사용합니다.

  • json.dump(): 파이썬 객체를 파일로 바로 저장
  • json.load(): 파일에서 읽어와 파이썬 객체로 변환
# 파일로 저장 (dump)
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False)

# 파일에서 읽기 (load)
with open("data.json", "r", encoding="utf-8") as f:
    loaded_data = json.load(f)
    print(loaded_data)

 

 

3. with 문을 사용하는 이유

파일을 다룰 때 with 구문을 사용하는 것은 아주 중요한 습관입니다.

  • 개념: 파일을 열고 작업이 끝나면 자동으로 파일을 닫아줍니다(close). 

* 이유: 파일을 열고 닫지 않으면 메모리 누수가 발생하거나, 다른 프로세스가 그 파일을 수정하지 못하도록 잠겨버리는(Lock) 문제가 생길 수 있습니다. with 문은 이런 실수를 원천 차단합니다.

 

002.ipynb
0.00MB

 

 

 

 

 

 

 

 

 

 

느낀점

 

오늘은 초반에 다소 천천히가다가 갑자기 급하게 진도를 확 뺀 느낌이다. 예전에 파이썬을 공부할 때 클래스 부분부터 공부를 안해 개념적부분이 부족해 이해는 해도 바로 혼자 기본구조를 잡고 나아가는데 아직 어려움이 있었던 것 같다. 오늘 과제로 연락처 관리 프로그램을 만드는 것을 했는데 혼자 기본구조 잡고 코드를 써내려가는데에 아주 큰 난관이였던 것 같다. 과제를 하는데 LLM도움을 받더라도 주말에 복습을 하며 꼭 다시 코드를 써봐야할 것 같다.

 

 

 

 

——————————————————————————

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.