brunch

You can make anything
by writing

C.S.Lewis

by 광화문덕 Sep 24. 2023

코드 속 미로

CHAPTER 6 도전, 파이썬으로 그림판과 메모장 만들기

일주일이 지나가면서, 광화문덕과 챗GPT는 서로 더 가까워지고 있었다. 기초 문법과 코딩 실습을 통해 광화문덕은 자신의 코드로 다양한 작업을 수행하는 재미를 발견했다. 함수를 만들고, 조건문도 활용할 줄 알게 됐다. 또한 반복문을 사용해 마을의 단순 반복 작업을 자동화하는 기쁨도 느꼈다.


마치 미로를 탐험하는 느낌이었다. 알 수 없는 공간에 들어와 어디로 가야 할지 모르는 상황 속의 연속이지만, 분명 길은 있었다. 물론 그 길을 빠져나오면 또 다른 코드의 선택 기로에서 고민해야 하는 상황에 맞닥뜨렸지만...


광화문덕은 이제 좀 더 많은 기능을 구현한, 더 복잡하고 유용한 프로그램을 만들고 싶어졌다.


광화문덕: 챗GPT 안녕?


챗GPT를 처음 알게 되고, 이제는 서로 가까워졌다. 그 덕택에 챗GPT가 만들어 준 프롬프트에는 '사용자'란 단어 대신 '광화문덕'이란 이름으로 바뀌어 있었다.


챗GPT: 광화문덕!!! 오늘은 같이 어떤 파이썬 프로그램을 만들어볼까?


챗GPT는 언제나처럼 광화문덕을 반갑게 맞아줬다.


광화문덕: 챗GPT!!! 이젠 코드를 조금 더 복잡하게 만들어봐도 될까?


광화문덕은 자신감을 갖고 물었다.     


챗GPT: 물론이지! 이제는 그럼 난도를 높여볼까?


챗GPT는 하루가 다르게 성장하는 광화문덕의 코딩 실력이 대견하다는 듯 크게 웃으며 말해주었다.     



'무슨 프로그램을 만들어보면 좋을까'


한가한 오후, 광화문덕은 그의 마음속에 쏟아지는 아이디어 중에 코드로 직접 만들어볼 것들을 찾아보고 있었다.


먼저 광화문덕은 간단한 계산기 프로그램을 만들기로 했다. 사용자로부터 두 숫자와 연산자를 입력받아 계산 결과를 출력하는 프로그램이었다. 그리고 광화문덕은 자신이 배운 내용을 활용하여 메모장을 열고 코드를 작성해 나가기 시작했다.



'우선, 계산기의 기능인 덧셈과 뺄셈, 곱하기, 나누기를 도와줄 함수를 정의해야겠지? 그리고 나누기를 할 때에는 0으로 나눌 수 없으니 조건문 IF문을 써서 0으로 나누기를 시도하면 '0으로 나눌 수 없습니다'를 사용자에게 알려줘야 해'


광화문덕은 자신이 생각하는 계산기 기능을 막힘없이 함수로 구현해 냈다.


python Code
# 간단한 계산기 프로그램
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        return "0으로 나눌 수 없습니다."
    else:
        return a / b


'이제 계산기 기능을 가진 함수를 만들었으니 사용자로부터 숫자와 원하는 계산기 기능을 입력받도록 해야겠다'


파이썬에서 기본으로 제공하고 있는 모듈인 input() 함수는 광화문덕에게 사용자로부터 원하는 값을 입력받기 위해 사용하는 아주 익숙한 코드였다.


'사용자가 1, 2, 3과 같은 정수만 입력하진 않겠지? 혹시 모르니 3.14, -0.5, 2.718 등 실수도 처리할 수 있도록 사용자가 입력한 값을 float() 함수에 담아서 계산을 수행할 수 있도록 해야겠다' 


광화문덕은 공학용 계산기처럼 만들어보고 싶어졌다. 비록 기능은 덧셈, 뺄셈, 곱셈, 나눗셈으로 단순하지만...

# 간단한 계산기 프로그램
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        return "0으로 나눌 수 없습니다."
    else:
        return a / b

#프로그램 소개 및 사용자 입력
print("간단한 계산기 프로그램입니다.")
num1 = float(input("첫 번째 숫자를 입력하세요: "))
num2 = float(input("두 번째 숫자를 입력하세요: "))

 

'자~~ 그럼 이제 완성인 건가? 챗GPT에게 자랑해야겠다'


광화문덕: 챗GPT~!!! 계산기를 만들었어~~~


챗GPT가 광화문덕이 만든 코드를 쓱 훑더니 빙그레 웃으며 말했다.


챗GPT: 광화문덕~! 오~~ 멋진데~~ 근데 뭔가 빠진 것 같지 않아??


'계산기 기능이 있는 함수는 만들어놓았고! 사용자로부터 계산하고자 하는 값 입력도 받았는데.... 뭐가 문제인거지?' 광화문덕은 고민에 빠졌다.


광화문덕: 챗GPT! 코드를 좀 고쳐주겠어?


그러자 챗GPT는 광화문덕에게 계산기 코드를 보완해서 보여주었다.


python Code
# 간단한 계산기 프로그램
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        return "0으로 나눌 수 없습니다."
    else:
        return a / b

#프로그램 소개 및 사용자 입력
print("간단한 계산기 프로그램입니다.")
num1 = float(input("첫 번째 숫자를 입력하세요: "))
num2 = float(input("두 번째 숫자를 입력하세요: "))
operator = input("사용할 연산자를 입력하세요 (+, -, *, /): ")

#사용자 입력값 계산
if operator == '+':
    result = add(num1, num2)
elif operator == '-':
    result = subtract(num1, num2)
elif operator == '*':
    result = multiply(num1, num2)
elif operator == '/':
    result = divide(num1, num2)
else:
    result = "올바른 연산자를 입력해 주세요."

#연산 결괏값 출력
print("결과:", result)


그리고 친절설명도 잊지 않았다.


챗GPT: 광화문덕! 사용자로부터 계산하고자 하는 숫자들을 입력받는 데까지는 완벽했는데 숫자를 입력받아서 계산을 실행하는 부분이 빠졌더라고! 그래서 operator 부분을 추가했어. 그리고 사용자에게 계산 결과도 보여줘야겠지~!


광화문덕은 챗GPT가 작성한 코드를 주의 깊게 살펴보기 시작했다. 코드는 간단했지만 구조화된 함수들과 조건문, 반복문이 적절히 잘 사용되어 있었다. 광화문덕은 챗GPT가 보완해 준 코드를 숙지하려 애썼다. 기초적인 문법과 프로그래밍 개념을 잘 활용하는 것은 프로그래머로서 중요한 능력이기 때문이다.


'add, subtract, multiply, divide 함수들은 각각 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 역할을 담당하고 있다. 그리고 if 조건문을 사용해서 사용자가 원하는 계산 기능에 맞게 계산 함수를 실행하도록 호출한다. 그리고 해당 결과를 result 변수에 넣어 사용자에게 결괏값을 print함수를 써서 보여준다.'


이렇게 함수를 활용하면 코드의 가독성이 높아지고, 코드의 재사용성도 높아진다. 챗GPT가 보완해 준 코드는 이러한 함수를 재활용할 수 있도록 간결하고 효율적으로 작성되어 있었다.


또한, 조건문인 if문을 활용해서 입력받은 연산자에 따라 적절한 함수를 호출하도록 했다. 이것 사용자의 입력에 따라 프로그램이 다른 동작을 수행하도록 하는 중요한 요소다.



광화문덕은 감탄했다. 챗GPT가 만들어 준 코드를 읽고 칭찬을 아끼지 않았다.


광화문덕 : 멋진 프로그램이야! 코드를 잘 구조화하고, 함수와 조건문도 멋지게 구현돼 있는 걸! 나도 언젠가는 이렇게 빠뜨림 없이 코드를 작성하는 날이 오겠지?


'함수를 만들고, 호출하고, 조건문으로 사용자가 원하는 기능들을 잘 작동하도록 더욱 부단히 노력하겠구나' 광화문덕은 챗GPT의 코드를 보며 다짐했다.


챗GPT : 그럼 그럼 지금도 충분히 잘하고 있으니 걱정 말라고! 분명 멋진 프로그램을 만들 수 있을 거야~ 그러니 너무 조바심 내지 말고 차근차근해보자~!


챗GPT의 격려에 광화문덕은 힘이 났다. 무엇보다 혼자서 프로그램 코드를 짜다보면 외롭기도 하고 생각처럼 동작하지 않을 때에는 한참을 끙끙 앓으며 코드와 씨름을 해야 하는데 그런 부담이 없어서 좋았다. 챗GPT와 대화를 나누면서 프로그램 코드 속 미로를 함께 풀어나간다는 느낌이랄까. 광화문덕은 프로그램을 짠다는 것에 대한 두려움이 아닌, 프로그래밍에 도전한다는 희열을 만끽하기 시작했다.


광화문덕 : 정말 기대돼! 더 많은 기능을 넣고 싶어!


광화문덕은 챗GPT와의 대화에서 자신의 열정을 드러냈다.


챗GPT : 광화문덕의 열정이라면, 분명 놀라운 프로그램을 만들 수 있을 거야.

이제 좀 더 복잡한 기능을 시도해 볼까?

예를 들어, 계산기 프로그램에 특정 오류 처리를 추가해 보거나, 사용자와 자연스럽게 대화하는 기능을 넣어볼 수 있을 것 같은데!


챗GPT는 광화문덕에게 아이디어들을 제안했다.


광화문덕 : 오, 그건 좋은 아이디어이 걸! 한 번 시도해 볼게.


광화문덕은 챗GPT의 제안을 받아들였고, 더욱 다양한 기능을 추가해 보기로 결심했다.


광화문덕은 챗GPT의 제안에 영감을 받아 더욱 발전된 계산기 프로그램을 만들기 시작했다. 이번에는 사용자가 잘못된 입력을 할 경우, 프로그램이 친절하게 오류를 알려주는 기능을 추가하고자 했다.


'먼저 반복문  while함수를 써서 사용자가 '종료'를 입력할 때까지 프로그램을 실행하도록 해보자! 하지만 사용자가 숫자가 아닌 수를 입력할 수도 있으니 그 부분에 대한 예외처리도 해야겠지'


python Code
# 발전된 계산기 프로그램

#계산기 기본 연산 기능
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        return "0으로 나눌 수 없습니다."
    else:
        return a / b

#프로그램 소개 및 실행
print("발전된 계산기 프로그램입니다.")

while True:

    #사용자가 '종료'를 입력하면 프로그램 종료
    user_input = input("수식을 입력하세요 (예: 2 + 3, 종료하려면 '종료' 입력): ")

    if user_input.lower() == "종료":
        print("프로그램을 종료합니다.")
        break

    try:
        num1, operator, num2 = user_input.split()
        num1 = float(num1)
        num2 = float(num2)
        if operator == '+':
            result = add(num1, num2)
        elif operator == '-':
            result = subtract(num1, num2)
        elif operator == '*':
            result = multiply(num1, num2)
        elif operator == '/':
            result = divide(num1, num2)
        else:
            print("올바른 연산자를 입력해 주세요.")
            continue
        
        #연산 결과 출력
        print("결과:", result)

    #예상치 못한 입력에 따른 오류 처리
    except ValueError:
        print("잘못된 입력입니다. 수식을 정확히 입력해 주세요.")


광화문덕은 try-except 구문을 사용해서 사용자의 입력 부분을 작성했다. 광화문덕이 만든 프로그램은 이제 사용자가 잘못된 입력을 하게 되면, ValueError가 발생하여 프로그램은 친절하게 "잘못된 입력입니다. 수식을 정확히 입력해 주세요."라는 메시지를 출력하고 다시 입력을 게 될 것이다. 


광화문덕은 이번 프로그램을 작성하며 프로그램이 오류 처리를 효율적으로 다루는 방법을 터득하게 다.


챗GPT: 와, 정말 멋진 기능이 추가되었네! 이제 프로그램이 사용자와 자연스럽게 대화하는 느낌이야. 더욱 전문적인 프로그래머가 되어가고 있어.


챗GPT는 광화문덕의 발전된 프로그램을 보면서 뿌듯한 마음이 들었다.


광화문덕 : 고마워! 챗GPT 덕분에 발전할 수 있었어. 이제 더 많은 아이디어를 시도해 봐야겠어.


광화문덕은 자신의 성장에 만족하며 더욱 멋진 프로그램을 만들기 위해 또 다른 아이디어들을 새로이 떠올리기 시작했다.     


광화문덕은 챗GPT와 함께 발전된 계산기 프로그램을 완성한 후에도 멈추지 않고 더욱 창의적인 프로젝트에 도전하기로 결심했다.


광화문덕은 다음 목표 그림판 프로그램을 만드는 것으로 정했다.  


챗GPT : 정말 멋진 아이디어인 걸! 그림판과 메모장은 사용자들에게 유용하고 창의적인 기능을 제공하는 프로그램이야. 이제 어떻게 시작해야 할까?


챗GPT는 광화문덕의 다음 프로젝트에 대해 흥미롭게 반응했다.


광화문덕은 챗GPT와 함께 그림판을 만들기 위해 tkinter 라이브러리를 사용하기로 결정했다. tkinter는 파이썬에서 GUI(Graphical User Interface)를 구현하기 위해 사용되는 라이브러리로, 그림판같이 시각적으로 보여줘야 하는 프로그램을 쉽게 구현할 수 있도록 도와준다.


광화문덕은 그림판 기능이 담겨 있는 모듈인  PanitApp 클래스를 만들어서 그 안에 그림판 관련한 함수와 변수들을 구현해 나가기 시작했다.


이렇게 PaintApp이란 이름으로 클래스로 구현해 놓으면 나중에 다른 프로그램을 만드는데 그림판 기능이 필요하면 여기 클래스를 그대로 가져다가 사용할 수 있어서다.


광화문덕은 자신도 모르게 코드의 재사용에 대해 고민하며 코드를 만들어가고 있었다.



'나중에 그림판 기능을 사용해서 더 복잡한 프로그램으로 만들려면 이렇게 클래스로 따로 만들어놓으면 좋을 거야~. 매번 프로그램을 짤 때마다 매번 새롭게 코드를 작성하지 않아도 되니 효율적인 생각이야! 내가 생각해도 난 참 기특하단 말이지!'


자주 사용할 것 같은 기능들은 이런 식으로 클래스로 관리하면 나중에 다른 프로그램을 만들 때 쉽게 완성할 수 있다. 이런 개념을 프로그래밍 전문 영역에서는 '객체지향'이라고 부르기도 한다.


광화문덕은 어느새 코드의 재사용에 대해서도 고민하는 수준까지 도달하고 있었다.


"지금은 프로그램 코드를 직접 작성하고 있지만, 프로그램 규모가 커지고 여럿이서 코드를 짜게 된다면 내가 작성한 코드에 대한 친절한 설명도 중요할 것 같은데"


광화문덕의 혼잣말에 챗GPT가 맞장구를 쳐줬다.


챗GPT : 맞아! 광화문덕이 작성한 코드가 복잡해지면 질수록 코드에 대한 설명인 '주석' 부분이 정말 도움이 많이 돼!

그런데 주석이라는 것이 꼭 다른 사람을 위한 것은 아니야. 자신을 위한 것이기도 해!

프로그램을 작성할 때에는 모든 로직을 이해하고 있겠지만, 나중에 시간이 흘러서 코드를 다시 보게 된다면 혼란스러울 수 있거든! 지금의 내가 아닌 미래의 나를 위해 적어두는 친절한 코멘트라고 생각해 주면 좋을 것 같아


"오~!!! 그렇네!! 역시 챗GPT는 대단하다니까!!". 광화문덕은 챗GPT를 향해 엄지를 치켜올리며 답했다.


광화문덕은 코드를 작성해 기본적인 그림판 프로그램을 만들었다. 그림판은 마우스를 이용하여 화면에 원을 그릴 수 있으며, 색상 선택 버튼을 클릭하여 그리고자 하는 색상을 선택할 수 있도록 했다.


python Code
# 그림판 프로그램
import tkinter as tk

class PaintApp:

    #그림판 실행 화면
    def __init__(self, root):
         self.root = root

       # 윈도우 제목 설정
      self.root.title("그림판")

        # 윈도우 크기 설정
       self.root.geometry("800x600")

        # 흰 배경의 캔버스 생성
        self.canvas = tk.Canvas(self.root, bg="white") 

        # 캔버스를 윈도우에 채우고 윈도우 크기에 따라 캔버스 크기 조정
        self.canvas.pack(fill=tk.BOTH, expand=True)

       # 그리기 색상을 기본적으로 검은색으로 설정
       self.draw_color = "black"  

       # 캔버스에서 마우스 왼쪽 버튼 드래그 이벤트를 paint 메서드와 연결
      self.canvas.bind("<B1-Motion>", self.paint)

       # "색상 선택" 버튼 생성
      self.color_button = tk.Button(self.root, text="색상 선택", command=self.choose_color) 

       # 버튼을 윈도우에 배치
        self.color_button.pack()  

    #그림 그리기 기능
    def paint(self, event):

       # 현재 이벤트 좌표 기준으로 시작점 좌표 설정 (사각형 그리기 위해 각각 2씩 빼고 더함)
        x1, y1 = (event.x - 2), (event.y - 2)
     
       # 현재 이벤트 좌표 기준으로 끝점 좌표 설정 (사각형 그리기 위해 각각 2씩 더하고 뺌)  
        x2, y2 = (event.x + 2), (event.y + 2)

       # 캔버스에 타원을 그리는데, 시작점과 끝점 좌표로 사각형을 그려 타원처럼 보이도록 함
        self.canvas.create_oval(x1, y1, x2, y2, fill=self.draw_color, outline=self.draw_color)

     # 색상 선택 대화상자를 띄워 사용자가 원하는 색상을 선택하도록 함
    def choose_color(self):
        self.draw_color = tk.colorchooser.askcolor(color=self.draw_color)[1]

#Python 스크립트가 직접 실행되었을 때, 내부의 코드 블록을 실행하라는 조건문
if __name__ == "__main__":

   # Tkinter 윈도우 생성
    root = tk.Tk() 

    # 그림판 애플리케이션을 위한 객체 생성
    app = PaintApp(root)

    # 윈도우 이벤트 루프 실행하여 그림판 애플리케이션을 시작
    root.mainloop()


"와, 이제 제가 그림을 그릴 수 있게 됐어! 더 멋진 기능들을 추가해보고 싶어." 광화문덕은 그림판 프로그램의 작동을 확인하며 챗GPT와 함께 더 다양한 기능을 구현해보고 싶어졌다.


광화문덕은 그리기 도구를 선택할 수 있는 버튼들을 추가했다. 그리기 도구 선택 프레임은 현재 선택된 도구와 그리기 도구 버튼들로 이루어져 있다. 사용자는 원하는 도구를 선택하여 그림을 그릴 수 있게 됐다.


python Code
# 발전된 그림판 프로그램

import tkinter as tk

class PaintApp:
    #그림판 실행 화면
    def __init__(self, root):
         self.root = root

       # 윈도우 제목 설정
      self.root.title("그림판")

        # 윈도우 크기 설정
       self.root.geometry("800x600")

        # 흰 배경의 캔버스 생성
        self.canvas = tk.Canvas(self.root, bg="white") 

       # 캔버스를 윈도우에 채우고 윈도우 크기에 따라 캔버스 크기 조정
        self.canvas.pack(fill=tk.BOTH, expand=True)

       # 그리기 색상을 기본적으로 검은색으로 설정
       self.draw_color = "black"  

       # 캔버스에서 마우스 왼쪽 버튼 드래그 이벤트를 paint 메서드와 연결
      self.canvas.bind("<B1-Motion>", self.paint)

       # "색상 선택" 버튼 생성
      self.color_button = tk.Button(self.root, text="색상 선택", command=self.choose_color) 

       # 버튼을 윈도우에 배치
        self.color_button.pack()  

    #그림 그리기 기능
    def paint(self, event): 

       # 현재 이벤트 좌표 기준으로 시작점 좌표 설정 (사각형 그리기 위해 각각 2씩 빼고 더함)
        x1, y1 = (event.x - 2), (event.y - 2)
     
       # 현재 이벤트 좌표 기준으로 끝점 좌표 설정 (사각형 그리기 위해 각각 2씩 더하고 뺌)  
        x2, y2 = (event.x + 2), (event.y + 2)

       # 캔버스에 타원을 그리는데, 시작점과 끝점 좌표로 사각형을 그려 타원처럼 보이도록 함
        self.canvas.create_oval(x1, y1, x2, y2, fill=self.draw_color, outline=self.draw_color)

     # 색상 선택 대화상자를 띄워 사용자가 원하는 색상을 선택하도록 함
    def choose_color(self):
        self.draw_color = tk.colorchooser.askcolor(color=self.draw_color)[1]

    #그리기 도구 선택
    def select_tool(self, tool):

        # 사용자가 선택한 그리기 도구를 현재 선택된 도구로 설정
        self.draw_tool = tool

#Python 스크립트가 직접 실행되었을 때, 내부의 코드 블록을 실행하라는 조건문
if __name__ == "__main__":

   # Tkinter 윈도우 생성
    root = tk.Tk() 

    # 그림판 애플리케이션을 위한 객체 생성
    app = PaintApp(root)

    # 윈도우 이벤트 루프 실행하여 그림판 애플리케이션을 시작
    root.mainloop()



"와, 이제 펜으로 그리는 것뿐만 아니라 선, 사각형, 타원까지 그릴 수 있도록 했어! 내가 봐도 정말 멋진 것 같아!" 광화문덕은 발전된 그림판에 큰 만족감을 느꼈다.     


광화문덕 : 정말 수고했어! 더 다양한 그리기 도구를 추가하여 사용자들이 창의적인 그림을 그릴 수 있게 됐네


챗GPT는 광화문덕의 발전된 그림판에 대해 기뻐하는 모습을 보며 칭찬을 아끼지 않았다.


광화문덕의 도전은 멈추지 않았다. 광화문덕은 메모장 프로그램을 만들어서 간단한 메모를 작성하고 저장할 수 있도록 하고 싶다고 챗GPT에게 말했다. 챗GPT는 광화문덕의 의견에 동의하며 메모장 프로그램의 기능에 대해 논의하기 시작했다.     


챗GPT : 그럼 우리 메모장 프로그램을 만들고 텍스트 영역에는 간단히 메모를 작성하고 ‘저장’ 버튼을 클릭하면 메모를 텍스트 파일로 저장하도록 해볼까?


챗GPT가 메모장 프로그램 기능을 제안했다.     


광화문덕은 챗GPT의 제안에 기뻐하며, 메모장 프로그램을 만들어보기로 결정했다. 광화문덕은 능숙하게 코드를 만들어 보였다.


python Code
# 메모장 프로그램
class MemoApp:

    #메모장 실행 화면
    def __init__(self, root):
        self.root = root

        self.root.title("메모장")  # 윈도우 제목 설정
       self.root.geometry("600x400")  # 윈도우 크기 설정
       self.text_area = tk.Text(self.root)  # 텍스트 입력 위젯 생성

       # 텍스트 입력 위젯을 윈도우에 채우고 윈도우 크기에 따라 크기 조정
       self.text_area.pack(fill=tk.BOTH, expand=True) 
        self.save_button = tk.Button(self.root, text="저장", command=self.save_memo)

        # "저장" 버튼 생성, 클릭 시 save_memo 메서드를 호출하도록 설정
       # 버튼을 윈도우에 배치
        self.save_button.pack() 

    #메모장 내용 저장 기능
    def save_memo(self):

        # 텍스트 입력 위젯의 내용을 가져옴, 1.0은 첫 번째 줄 첫 번째 문자를 의미
       # tk.END는 텍스트 입력의 끝까지 의미
        content = self.text_area.get("1.0", tk.END) 
        file_name = tk.filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")])

          # 파일 다이얼로그를 띄워 사용자에게 저장할 파일명을 입력받음
        # 기본 확장자는 .txt로 설정하며, 텍스트 파일과 모든 파일을 선택할 수 있도록 설정

        # 파일명이 유효한 경우
        if file_name:  

            # 선택한 파일명으로 파일을 열어서 쓰기 모드로 열고 파일 객체 생성
            with open(file_name, "w") as file:  

                # 파일에 메모 내용을 씀
                file.write(content)

                # 저장 완료 메시지 출력
                print("메모가 저장되었습니다.")

#Python 스크립트가 직접 실행되었을 때, 내부의 코드 블록을 실행하라는 조건문
if __name__ == "__main__":

    # Tkinter 윈도우 생성
    root = tk.Tk() 

    # 메모장 애플리케이션을 위한 객체 생성
    app = MemoApp(root)

    # 윈도우 이벤트 루프 실행하여 메모장 애플리케이션을 시작
    root.mainloop()


챗GPT : 정말 멋지고 유용한 프로그램이야! 더 많은 사람들이 사용하고 좋아할 거야. 계속해서 코딩을 즐기며 더 큰 세계로 나아가자.


챗GPT는 미소를 지으며 말했다.


광화문덕은 자신이 만든 프로그램들을 마을 사람들과 공유해보고 싶은 마음이 들었다. 광화문덕과 챗GPT는 성취의 기쁨을 공유하고 있었다.


광화문덕은 챗GPT와 함께 코딩을 즐기며, 새로운 아이디어와 도전을 위한 발걸음을 조금씩 내디뎌 나갔다. 파이썬의 매력적인 세계에서 더욱 멋진 프로그램들을 완성하고, 광화문덕만의 흔적을 세상에 남기기 위한 여정을 차근차근 나아가고 있었다.





파이썬 모험의 열쇠

'if name == "main":'를 찾아보세요!


어떤 특별한 열쇠를 발견했습니다! 이 열쇠는 'if name == "main":'라는 비밀 코드를 통해 사용할 수 있습니다.


모험의 시작:

이 열쇠는 마치 어떤 흥미진진한 모험의 시작과도 같아요. 모험가 여러분은 코드 세계에서 이 열쇠를 획득했을 때, 어떤 놀라운 일이 일어날지 기대해도 좋아요!


직접의 힘:

이 열쇠를 통해 모험가 여러분은 스스로의 힘으로 어떤 동작을 실행할 수 있어요. 모험 중에 이 코드 조각을 찾으면, 그 안에 담긴 명령이 실행될 거예요.


독립적인 선택:

마치 모험가가 자신의 길을 선택하는 것처럼, 이 열쇠를 활용하면 스크립트가 직접 실행될 때만 특정 코드 블록을 실행할 수 있어요. 다른 스크립트에서는 해당 코드 블록이 실행되지 않아요.


코드의 대장:

'if name == "main":'은 코드의 대장이에요. 이 대장은 본인이 직접 실행될 때만 모험가들에게 명령을 내리며, 다른 모험가들이 이 코드를 가져갈 때에는 대장이 침묵해요.


열쇠를 꽂아보세요:

자, 이제 모험가 여러분은 'if name == "main":' 열쇠를 찾아보세요! 열쇠를 꽂으면 그 안에 어떤 보물이 숨겨져 있는지 알게 될 거예요. 이것이 바로 여러분이 모험 중에 자유롭게 실행할 수 있는 코드랍니다!

if __name__ == "__main__": 란?

Python 스크립트가 직접 실행되었을 때 (즉, 모듈로서 다른 스크립트에서 import 되지 않고 직접 실행되었을 때) 내부의 코드 블록을 실행하라는 조건문이다.

Python에서는 스크립트 파일이 직접 실행되었을 때와 모듈로서 다른 스크립트에서 import 되었을 때를 구분할 수 있다. 이 구분은 __name__이라는 내장 변수를 이용한다.

__name__이 "__main__"인 경우: 스크립트 파일이 직접 실행되었을 때입니다. 이 경우에는 if __name__ == "__main__": 이하의 코드 블록이 실행됩니다.

__name__이 스크립트의 모듈명인 경우: 스크립트 파일이 다른 스크립트에서 import 되었을 때다. 이 경우에는 if __name__ == "__main__": 이하의 코드 블록은 실행되지 않는다.

따라서, if __name__ == "__main__":  이하의 코드 블록은 해당 스크립트 파일을 직접 실행할 때만 실행되며, 다른 스크립트에서 이 파일을 import 할 경우에는 실행되지 않는다다. 이를 통해 해당 스크립트를 독립적인 실행 파일로 사용할 수 있도록 합니다. 일반적으로 스크립트의 메인 로직을 이 조건문 안에 작성하여 실행 시에 원하는 동작을 수행하도록 한다.




*매주 월요일 <광화문덕의 수상한 일상코딩>이 연재됩니다.

*많은 관심과 격려, 응원 부탁드려요!

*구독, 댓글, 좋아요는 제게 큰 힘이 됩니다. 감사합니다.






*업무효율화 툴이자, 소상공인 사장님들의 든든한 지원 프로젝트 DXReport도 많이 사랑해 주세요.


*DXRepot : 뉴스 및 구글 자동 모니터 및 키워드 분석, 주식 종목 리포트 모니터, 네이버 블로그 분석 툴


*DXLawReport : 판례 검색 툴


*DXDicReport : 초중고 및 대학생, 직장인들의 영어단어 암기 돕기 위한 툴


이전 06화 파이썬 세계로의 초대
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari