아티클
다양한 읽을거리를 확인해 보세요.[바로바로 파이썬 10] 메모장 프로그램 만들어보기
📅 2026년 11월 12일 · 👁 3
[바로바로 파이썬 10] 메모장 프로그램 만들어보기지금까지는 파일을 쓰는 방법, 파일을 읽는 방법, 파일을 한 줄씩 처리하는 방법을 각각 따로 배웠습니다. 하지만 실제 프로그램에서는 보통 하나의 기능만 사용하지 않습니다. 사용자에게 값을 입력받고, 그 값을 파일에 저장하고, 저장된 내용을 다시 읽어 화면에 보여주는 식으로 여러 기능이 함께 동작합니다. 이번에는 지금까지 배운 내용을 활용해 간단한 메모장 프로그램을 만들어보겠습니다.메모장 프로그램의 흐름 생각하고 만들기바로 코드를 작성하기 전에 먼저 메모장 프로그램이 어떤 흐름으로 동작하는지 생각해보겠습니다. 우리가 만들 메모장 프로그램에는 대략 다음과 같은 기능이 필요합니다.1. 사용자에게 메모를 입력받습니다.2. 입력받은 메모를 파일에 저장합니다.3. 저장된 메모를 다시 읽어 화면에 출력합니다.이 기능을 지금까지 배운 내용과 연결하면 다음과 같이 정리할 수 있습니다.1. 사용자 입력 : input( ) 함수를 사용합니다.2. 파일 저장 : open( ) 함수와 write( ) 메서드를 사용합니다.3. 저장된 내용을 다시 읽기 : read( ) 또는 readline( )을 사용합니다.그럼 이 구성에 맞게 기능을 하나씩 추가하면서 메모장 프로그램을 만들어봅시다.먼저 가장 기본적인 기능부터 만들어보겠습니다. 사용자에게 메모 한 줄을 입력받아 파일에 저장하는 기능입니다.➊ memo = input("메모를 입력하세요: ")는 사용자에게 메모를 입력받는 코드입니다. 사용자가 입력한 문자열은 memo 변수에 저장됩니다. 예를 들어 "장보기 목록 정리하기"를 입력하면 그 문장이 memo 변수에 저장됩니다.➋ with open(...)은 memo.txt 파일을 쓰기 모드로 여는 코드입니다. 앞에서 살펴봤듯이 "w" 모드는 파일이 없으면 새로 만들고, 이미 있다면 기존 내용을 지운 뒤 새로 씁니다. 이어서 memo_file.write(memo)를 실행해 사용자가 입력한 메모를 파일에 저장합니다.➌ 파일 저장이 끝났다는 안내 메시지를 출력합니다. 화면에 아무것도 나오지 않으면 사용자가 현재 상태를 알기 어렵기 때문에 이런 부분도 챙겨줘야 합니다.정리하면 ➊ 사용자에게 메모를 입력받고, ➋ 입력받은 메모를 파일에 저장한 뒤, ➌ 저장이 완료되었다는 메시지를 출력했습니다. 이것이 메모장 프로그램의 가장 기본적인 저장 기능입니다.메모를 파일에 저장했으니 이번에는 저장된 내용을 다시 읽어보겠습니다.이번에는 저장한 메모를 읽어 오는 코드를 붙입니다. 파일을 읽을 때는 읽기 모드인 "r"을 사용하며, 저장된 파일 전체 내용을 한 번에 읽으려면 read( ) 메서드를 사용하면 됩니다.➊ 앞에서 만든 메모 저장 기능입니다.➋ with open(...)은 memo.txt 파일을 읽기 모드로 엽니다. 이어서 read( ) 메서드로 파일 전체 내용을 하나의 문자열로 읽어 온 다음, 그 결과를 saved_memo 변수에 저장합니다.➌ print(f"저장된 메모: {saved_memo}")는 파일에서 읽어 온 내용을 화면에 출력합니다.이제 메모장 프로그램은 사용자가 입력한 내용을 파일로 저장한 뒤, 저장된 내용을 다시 읽어 확인할 수 있게 되었습니다. 하지만 실제 메모장이라면 메모를 한 줄만 저장하는 것보다 여러 줄을 입력할 수 있는 편이 더 유용할 것입니다. 이번에는 반복문을 추가해보겠습니다.이번에는 사용자가 메모를 계속 입력하고, "끝"이라고 입력하면 저장을 마치는 프로그램을 만들어보겠습니다. "끝"이라는 조건이 나왔을 때 입력을 마치려면 반복문과 조건문을 결합해야 합니다.➊ memo.txt 파일을 쓰기 모드로 엽니다. 이번 예제에서는 새 메모장을 만든다고 생각하고 "w" 모드를 사용합니다. 따라서 기존에 같은 파일이 있다면 이전 내용은 지워지고 새로 입력한 메모가 저장됩니다.➋ memo = input("메모 입력(끝 입력 시 종료): ")를 while 문 코드 블록 안쪽 맨 위에 작성했습니다. 이렇게 하면 반복문이 실행될 때마다 input( )이 다시 실행되므로 사용자에게 메모를 반복해서 입력받을 수 있습니다.➌ 메모를 하나 입력받을 때마다 if memo == "끝":으로 사용자가 "끝"을 입력했는지 확인합니다. "끝"이 입력되었다면 break를 실행해 while 반복문을 종료합니다.➍ 입력한 값이 "끝"이 아니라면 memo_file.write(memo + "\n")으로 입력받은 내용을 파일에 저장합니다. memo 뒤에 "\n"을 붙였으므로 메모 하나를 저장할 때마다 줄이 바뀝니다. 따라서 여러 번 입력한 메모가 파일에 한 줄씩 저장됩니다.정리하면 ➊ 파일을 열고, ➋ 메모를 반복해서 입력받았습니다. ➌ "끝"이 입력되면 반복을 종료하고, ➍ 그전까지 입력한 메모는 파일에 한 줄씩 저장했습니다. 이제 제법 메모장다운 모습이 되었습니다. 여러 줄을 저장할 수 있게 되었으니 이어서 파일에서 필요한 한 줄만 읽는 방법도 활용해보겠습니다.앞에서는 read( )를 사용해 파일 전체 내용을 읽었습니다. 이번에는 잠시 별도 예제로 readline( )을 사용해 첫 줄 읽기를 연습한 뒤, 앞의 메모장 프로그램 만들기로 돌아가겠습니다. readline( )은 현재 읽기 위치에서 한 줄을 읽어 오는 메서드이므로 메모 파일의 첫 번째 메모만 확인하는 데 사용할 수 있습니다.➊ memo.txt 파일에 세 줄의 메모를 저장합니다.➋ first_memo = memo_file.readline( ).strip( )으로 파일의 첫 번째 줄을 읽어 first_memo 변수에 저장합니다. 이때 readline( )의 결과에 바로 strip( )을 이어서 사용해 문자열 앞뒤의 공백 문자를 정리했습니다. 따라서 예제에서 줄 끝에 들어 있던 \n도 제거됩니다. 이처럼 어떤 메서드의 실행 결과에 이어서 또 다른 메서드를 사용하는 방식을 메서드 체이닝method chaining이라고 합니다. 여기서는 readline( )으로 얻은 문자열에 곧바로 strip( )을 적용한 것입니다.➌ first_memo를 화면에 출력합니다. 파일에는 세 줄의 메모가 들어 있지만 readline( )을 한 번만 실행했으므로 첫 번째 줄만 읽어 출력합니다.정리하면 ➊ 여러 줄의 메모를 파일에 저장하고, ➋ readline( )으로 첫 번째 줄만 읽은 뒤 ➌ 그 결과를 화면에 출력했습니다. 이처럼 파일 전체가 아니라 일부만 읽고 싶을 때 readline( )을 사용할 수 있습니다.지금까지 저장, 읽기, 반복 입력 기능을 하나씩 만들어봤습니다. 이제 이 기능들을 연결해 메모장 프로그램을 완성해보겠습니다.앞에서 만든 기능을 모두 합치면, 사용자가 여러 줄의 메모를 입력해 파일에 저장하고 저장이 끝난 뒤 파일 전체 내용을 다시 읽어 화면에 보여주는 프로그램이 됩니다. 이제 메모장 프로그램을 완성해봅시다.➊ 첫 번째 with 블록에서는 사용자가 "끝"을 입력할 때까지 while 반복문을 실행합니다. 입력받은 값이 "끝"이 아니라면 메모 뒤에 \n을 붙여 memo.txt 파일에 한 줄씩 저장합니다.➋ 두 번째 with 블록에서는 ➊에서 저장한 memo.txt 파일을 읽기 모드로 엽니다. 파일 전체 내용을 한꺼번에 읽기 위해 read( ) 메서드를 사용하고, 읽어 온 문자열을 all_memos 변수에 저장합니다.➌ print(all_memos)는 저장된 메모 전체를 화면에 출력합니다. 파일에 메모를 저장할 때 각 메모 뒤에 \n을 붙였으므로, 출력할 때 메모가 줄 단위로 나뉘어 보입니다.이제 우리가 배운 여러 문법이 하나의 프로그램 안에서 함께 동작합니다. input( )으로 값을 입력받고, while 문과 if 문으로 입력 과정을 제어하고, write( )로 파일에 저장한 뒤, read( )로 다시 읽어 print( )로 결과를 보여줍니다.프로그램은 처음부터 거창할 필요가 없습니다. 사용자가 입력한 값을 저장하고, 저장한 값을 다시 보여주는 작은 코드도 하나의 목적을 수행하는 프로그램입니다. 중요한 것은 배운 문법을 각각 외우는 데서 끝내지 않고 하나의 목적을 이루도록 서로 연결해보는 것입니다.
[바로바로 파이썬 06] while 문과 반복문의 기초
📅 2026년 11월 12일 · 👁 4
[바로바로 파이썬 06] while 문과 반복문의 기초지금까지는 조건에 따라 흐름을 가르는 방법을 배웠습니다. 이제 같은 코드를 여러 번 실행하는 반복문을 배울 차례입니다. 반복문에는 while 문과 for 문 두 가지가 있으며, 여기서는 while 문부터 차례대로 알아보겠습니다.while 문 기초 연습하기while 문은 조건이 참(True)인 동안 같은 코드를 반복해서 실행하는 문법입니다. 간단한 예제 코드를 통해 while 문의 기본 구조와 반복이 어떻게 이루어지는지 알아보겠습니다.조건식은 앞에서 if 문을 공부할 때 이미 살펴봤습니다. 이번에는 while 문을 사용해 조건식에 따라 코드가 반복되는 과정을 확인해보겠습니다. 우선 while 문의 예제 코드를 입력해 실행한 다음 동작 원리를 알아보겠습니다.코드에서 하이라이트한 부분이 조건식입니다. 그럼 while 문은 어떻게 동작할까요? 다음 순서를 살펴봅시다.while 문은 먼저 조건식을 확인하고 그 결과에 따라 코드 블록의 실행 여부를 결정합니다. True이면 while 문의 코드 블록을 실행한 뒤 다시 조건식으로 돌아갑니다. 이 과정을 반복하다가 조건식이 False가 되면 while 문을 종료합니다.이때 조건식이 언젠가는 False가 될 수 있도록 코드 블록을 설계하는 것이 중요합니다. 이 예제에서는 코드 블록의 count = count + 1이 바로 그런 역할을 합니다. count = count + 1은 현재 count의 값에 1을 더한 다음 그 결과를 다시 count에 저장하는 코드입니다. 처음 count가 1이었다면 한 번 실행한 뒤에는 2가 됩니다. 이후 코드 블록이 실행될 때마다 3, 4, 5처럼 값이 하나씩 증가하게 되죠. 결국 count가 6이 되는 시점이 옵니다. 이때 6 <= 5라는 조건식은 False로 평가되므로 while 문의 실행이 종료됩니다. 정리하면 작성한 코드는 다음과 같이 동작합니다.1. count는 1이므로 조건식이 True, 코드 블록 실행(print( ) 함수 실행, count를 2로 만들기)2. count는 2이므로 조건식이 True, 코드 블록 실행(print( ) 함수 실행, count를 3으로 만들기) ...6. count는 6이므로 조건식이 False, while 문 종료while 문의 동작 방식을 이해하는 것은 크게 어렵지 않을 겁니다. 다만 반복을 끝내야 할 때 조건식이 False가 되도록 코드 블록 안에 종료 조건을 제대로 만들어두는 것이 매우 중요합니다.그렇다면 조건식이 계속 True로 유지되면 어떻게 될까요?while 문을 사용할 때 주의해야 할 것 중 하나가 바로 무한 루프입니다. while 문의 조건식이 True로 유지되면 프로그램이 멈추지 않고 계속 실행되기 때문입니다. 다음은 count 변수에 1을 저장한 다음 while 문의 코드 블록에서 count의 값을 변경하지 않는 코드입니다. 조건식 count <= 5가 계속 True로 평가되므로 반복이 끝나지 않고 무한 실행됩니다.코드를 실행한 뒤 반복을 멈추려면 실행 중인 프로그램을 사람이 개입해서 강제 종료해야 합니다. Ctrl + C를 누르면 프로그램을 강제로 종료할 수 있습니다.
[바로바로 파이썬 05] if 문
📅 2026년 11월 12일 · 👁 4
[바로바로 파이썬 05] if 문드디어 프로그램의 흐름을 다루는 제어문을 시작합니다. 우선 제어문의 기본 문법 중 하나인 if 문부터 시작해봅시다.트롤리 딜레마로 이해하는 if 문if 문은 앞에서 살짝 살펴봤습니다. 그때는 if 문을 문지기처럼 설명했죠. 하지만 if 문의 역할을 이해하려면 문지기보다 열차의 선로를 바꾸는 레버를 떠올리는 것이 좋습니다. 다음은 《정의란 무엇인가》라는 도서에도 소개된 유명한 사고 실험인 트롤리 딜레마입니다. 여기서는 윤리적인 문제가 아니라 레버 하나로 이동할 길이 달라진다는 구조만 빌려오겠습니다. 이때 선로를 바꾸는 레버가 if 문과 비슷한 역할을 합니다.선로 옆에 서 있는 사람이 레버를 당겨 열차의 방향을 결정합니다. 레버를 그대로 두면 트롤리가 직진하고, 레버를 당기면 선로를 바꿔 아래로 향합니다. 이렇게 코드의 흐름을 결정하는 것이 if 문입니다. 이 개념을 머릿속에 넣어두고 기초 문법부터 응용까지 쭉 알아봅시다.if 문 구조 알아보기if 문은 조건에 따라 코드를 실행할지 말지 결정하는 제어문입니다. if 문의 기본 구조는 다음과 같습니다.if와 콜론 사이에 조건식을 입력하고, 콜론(:)으로 조건식의 끝을 표시한 후 다음 줄부터 일정하게 들여쓰기하여 실행할 코드를 입력합니다. 이때 들여쓰기로 묶인 코드는 코드 블록이라고 합니다. 코드 블록은 잠시 뒤에 자세히 알아보고, 먼저 조건식부터 살펴봅시다.if 문의 조건식은 참(True) 또는 거짓(False)으로 평가됩니다. 다음 코드를 봅시다. 코드에 하이라이트로 표시한 부분이 조건식입니다. temperature 변수의 값과 25를 >= 연산자로 비교합니다. 기초적인 수학 지식이 있다면 이 조건식의 결과가 True라는 것을 직관적으로 알 수 있습니다.실제로 코드를 실행해봅시다. temperature의 값이 35이므로 temperature >= 25라는 조건식은 35 >= 25로 계산되며, 그 결과는 True입니다. 따라서 들여쓰기한 if 문의 코드 블록이 실행됩니다.코드 블록 개념 알아보기앞에서 언급했듯이 : 다음 줄부터 일정하게 들여쓰기한 코드의 묶음을 코드 블록이라고 합니다. if 문에서는 조건식의 결과에 따라 이 코드 블록을 실행할지 결정합니다.예를 들어 다음과 같이 코드를 작성하면 첫 번째 if 문의 코드 블록과 두 번째 if 문의 코드 블록은 별개입니다. 다음 코드에서는 각각의 코드 블록을 하이라이트로 표시했습니다.같은 코드 블록에 속하는 코드는 같은 수준으로 들여쓰기해야 합니다. 들여쓰기란 코드 앞에 삽입하는 띄어쓰기나 탭(Tab)을 말합니다. 파이썬에서는 띄어쓰기 4칸을 권장합니다. 2칸이나 3칸으로 들여쓰기해도 간격이 같으면 같은 코드 블록으로 간주하지만, 띄어쓰기 4칸을 지키는 습관을 기르기 바랍니다. 사람 눈에는 같은 수준으로 들여쓰기한 것처럼 보여도 파이썬 인터프리터는 탭과 띄어쓰기를 서로 다르게 처리하므로 오류가 발생할 수 있습니다. 앞으로 if 문을 비롯한 다양한 문법에서 들여쓰기와 코드 블록을 계속 사용하므로 자연스럽게 익숙해질 것입니다.if~else 문 구조 알아보기앞에서 공부한 if 문은 조건식이 True일 때 코드 블록을 실행했습니다. if 문을 설명할 때 트롤리 딜레마 그림을 예로 들었지만, 사실 if 문만으로는 그림의 상황과 정확히 들어맞지 않습니다. if 문만 사용하면 조건식이 True일 때 실행할 코드만 지정하기 때문입니다. 만약 조건식이 False일 때 실행할 코드까지 지정하려면 else 문을 함께 사용하면 됩니다.age가 15이므로 if 문의 조건식은 False입니다. 따라서 if 문의 코드 블록은 실행하지 않고 else 문의 코드 블록을 실행합니다.그러면 ‘if 문만 사용하고 print("미성년자입니다. 입장이 제한됩니다.")는 if 문 바깥으로 빼면 안 될까?’라고 생각할 수도 있습니다. 좋은 질문입니다. 현재처럼 age가 15일 때는 방금 작성한 if~else 문과 같은 결과가 나옵니다.언뜻 보면 코드를 이렇게 작성해도 될 것 같습니다. 하지만 age를 20으로 바꿔서 실행해보면 문제가 드러납니다.age가 20이면 조건식을 만족하므로 if 문의 코드 블록이 실행됩니다. 하지만 if 문 바깥에 있는 코드는 조건식의 결과와 관계없이 실행되므로, 결국 두 메시지가 모두 출력됩니다.실행 결과를 보면 ➊ 조건식을 만족해 True가 되므로 ➋ 조건식의 코드 블록을 실행하고, ➌ 조건식과 무관한 코드도 실행됩니다.if~else 문은 실생활의 다양한 판단 상황을 프로그램으로 만들 때 유용합니다. 이번에는 좀 더 실용적인 예제로 연습해보겠습니다. 온라인 쇼핑몰에서 쓸 수 있는 배송비 계산 프로그램을 만들어봅시다. 보통 일정 금액 이상 구매하면 무료 배송을 해주는데, 이런 조건에 따른 처리를 if~else 문으로 표현할 수 있습니다. 코드를 실행해보면 구매 금액에 따라 배송비가 자동으로 계산되는 것을 알 수 있습니다.
[바로바로 파이썬 09] 입력이란 무엇일까?
📅 2026년 11월 12일 · 👁 3
[바로바로 파이썬 09] 입력이란 무엇일까?지금까지는 프로그램이 만든 결과를 화면에 보여주거나 파일에 저장하면서 출력이 무엇인지 알아봤습니다. 그렇다면 반대로 프로그램이 값을 받아들이는 입력은 무엇일까요?외부에서 들어오는 값, 입력입력은 프로그램 바깥에서 프로그램 안으로 값이 들어오는 것을 말합니다. 키보드로 이름을 입력하거나 로그인 화면에서 아이디와 비밀번호를 입력하거나, 검색창에 검색어를 입력하는 것이 대표적인 예입니다. 첨부 파일과 같이 파일을 프로그램에 불러와 처리하는 것도 입력의 한 형태입니다. 이처럼 외부에서 받은 값을 처리하는 많은 프로그램은 다음과 같은 흐름으로 동작합니다. • 입력 → 처리 → 출력입력은 프로그램이 처리할 재료이고, 출력은 그 재료를 처리한 결과라고 생각하면 이해하기 쉽습니다. 따라서 입력과 출력은 서로 따로 떨어져 있기보다 하나의 흐름으로 연결되어 있습니다. 지금까지 작성한 코드에서는 대부분 값을 코드 안에 직접 넣어 사용했습니다. 예를 들어 다음과 같이 변수에 값을 저장해두고 이를 print( )로 출력합니다.name, message에는 프로그램에서 사용할 값이 미리 저장되어 있습니다. 하지만 실제 프로그램에서는 프로그램을 실행할 때 사용자가 직접 값을 입력해야 하는 경우가 많습니다. 어떤 사용자는 이름으로 "바로"를 입력하고, 다른 사용자는 "요즘"을 입력할 수 있어야 더 자연스러운 프로그램이 되는 것이죠. 그렇다면 프로그램을 실행하는 도중에 사용자가 직접 값을 입력하게 하려면 어떻게 해야 할까요?입력을 처리하는 input( )이럴 때 사용하는 함수가 input( )입니다. input( ) 함수를 사용하면 프로그램을 실행하는 도중에 사용자에게 직접 값을 입력받을 수 있습니다. 그럼 바로 input( ) 함수를 사용해보겠습니다.➊ input("이름을 입력하세요: ")는 사용자에게 값을 입력받는 코드입니다. 인수로 전달한 "이름을 입력하세요: "는 사용자가 무엇을 입력해야 하는지 알려주는 안내 문구입니다. 이 문구가 먼저 화면에 나타난 뒤, 프로그램은 사용자가 값을 입력하고 Enter 를 누를 때까지 기다립니다.➋ 사용자가 '바로'라고 입력하고 Enter 를 누르면 input( )이 입력받은 값을 반환하고, 그 값이 name 변수에 저장됩니다. 따라서 message = f"{name}님, 환영합니다."에서 name 자리에 "바로"가 들어가고, "바로님, 환영합니다."라는 문장이 만들어집니다.➌ print(message)는 만들어진 문장을 화면에 출력합니다.이처럼 input( )을 사용하면 코드 안에 name = "바로"처럼 값을 미리 정해두지 않아도 됩니다. 프로그램을 실행할 때마다 사용자가 직접 다른 값을 입력할 수 있습니다.앞에서 작성한 코드를 다시 실행해서 이번에는 '요즘'이라고 입력해보세요. 같은 코드인데도 실행 결과가 달라지는 것을 확인할 수 있습니다.코드는 그대로지만 사용자가 입력한 값이 달라졌기 때문에 결과도 달라졌습니다. 이처럼 input( )을 사용하면 프로그램을 실행할 때마다 서로 다른 값을 받아 처리할 수 있습니다. 그런데 input( )으로 받은 값을 사용할 때는 꼭 알아두어야 할 특징이 하나 있습니다.input( )으로 입력한 값은 어떻게 처리될까?input( )으로 입력받은 값은 언제나 문자열입니다. 사용자가 12처럼 숫자로 보이는 값을 입력해도 파이썬은 이를 정수 12가 아니라 문자열 "12"로 받아들입니다. 글로만 보면 조금 낯설 수 있으니 코드로 확인해봅시다.➊ 사용자에게 나이를 입력받는 코드입니다. 실행 결과에서는 20을 입력했습니다.➋ 입력받은 값을 그대로 출력합니다. 화면에는 20이 출력되므로 숫자처럼 보입니다.➌ type(age)는 age 변수에 저장된 값의 자료형을 확인합니다. 실행 결과에 <class 'str'>이라고 나왔습니다. str은 문자열을 뜻합니다. 즉, 우리는 20이라고 입력했지만 input( )이 돌려준 값은 숫자 20이 아니라 문자열 "20"입니다.이 차이는 계산할 때 중요해집니다. 만약 input( )으로 입력한 값을 ‘숫자’라고 생각하고 코드를 작성하면 어떻게 될까요? 다음 코드를 작성해봅시다.➊ 사용자가 20을 입력하면 age 변수에 숫자 20이 아니라 문자열 "20"이 저장됩니다.➋ print(age + 1)은 age에 정수 1을 더하는 코드입니다. 하지만 age는 문자열이고 1은 정수입니다. 파이썬은 문자열과 정수를 + 연산자로 바로 더할 수 없으므로 오류가 발생합니다. 그렇다면 입력받은 값으로 실제 계산을 하려면 어떻게 해야 할까요?input( )으로 입력받은 값은 문자열이므로 숫자로 계산하고 싶다면 문자열을 숫자로 바꾸는 과정이 필요합니다. 이때 사용하는 함수가 int( )입니다. 앞에서 공부한 자료형 변환 내용이 연결되는 부분입니다.➊ input( )으로 나이를 입력받습니다.➋ age = int(age)를 실행해 age에 저장된 문자열 "20"을 정수 20으로 바꿉니다.➌ 이제 age에는 문자열이 아니라 정수가 저장되어 있으므로 age + 1을 계산할 수 있고, 실행 결과로 21이 출력됩니다.한 번 더 연습해봅시다. 이번에는 두 수를 입력받아 더해보겠습니다.➊ 첫 번째 숫자를 입력받아 num1에 저장합니다.➋ 두 번째 숫자를 입력받아 num2에 저장합니다.➌ 그런 다음 int(num1)로 num1에 저장된 문자열을 정수로 변환합니다.➍ int(num2)로 num2에 저장된 문자열도 정수로 변환합니다.➎ 이제 숫자처럼 계산할 수 있습니다. total = num1 + num2로 두 수를 더해 결과를 total 변수에 저장합니다.➏ print( )로 계산 결과를 출력합니다.만약 10과 20을 입력하고 int( )로 변환하지 않은 채 "10" + "20"처럼 문자열끼리 + 연산을 했다면 결과는 30이 아니라 "1020"이 됩니다. 이처럼 프로그램을 만들 때는 입력받은 값을 어떤 용도로 사용할지 생각하고 필요한 자료형으로 변환해야 합니다.이것으로 키보드에서 값을 입력받는 기본적인 방법을 알아봤습니다. 그런데 입력은 사용자가 직접 키보드로 입력하는 것만 있는 것은 아닙니다. 앞에서 프로그램의 결과를 파일에 저장했듯이, 이미 저장되어 있는 파일의 내용을 프로그램 안으로 읽어들일 수도 있습니다. 다음에는 파일의 내용을 읽어오는 파일 입력을 알아보겠습니다.
[바로바로 파이썬 04] 리스트
📅 2026년 11월 12일 · 👁 4
[바로바로 파이썬 04] 리스트리스트List는 여러 값을 하나로 묶어 저장하는 자료형입니다. 이미 몇 번 본 적 있는 대괄호로 감싸고 쉼표로 값을 구분해 만든 자료형이 바로 리스트입니다. 다음은 숫자형 데이터만 담은 리스트를 만들고 출력하는 코드입니다.실행 결과를 보면 입력한 값이 대괄호로 감싸인 형태 그대로 출력됩니다. 이처럼 대괄호 안에 값을 쉼표로 구분해 나열한 것이 리스트입니다. 리스트 안에 쉼표로 구분한 각각의 값을 요소Element라고 합니다. 즉, 리스트는 여러 요소를 하나로 묶어 놓은 데이터라고 생각하면 됩니다. 그렇다면 리스트를 왜 사용할까요?리스트 기초 연습하기리스트가 왜 필요한지는 여러 값을 다뤄보면 금방 이해할 수 있습니다. 예를 들어 여러분이 숫자 5개의 평균을 계산해야 한다면 어떻게 할 수 있을까요? 점수 평균을 계산하는 예제를 통해 리스트의 기초와 필요성을 알아보겠습니다.만약 리스트를 사용하지 않고 숫자형 데이터 5개를 변수에 저장한다면 이렇게 코드를 작성해야 할 겁니다.틀린 코드는 아닙니다. 그렇다면 평균 점수를 구하려면 어떻게 해야 할까요? 다음과 같이 작성하면 됩니다.하지만 항상 이런 방식으로 작성할 수는 없습니다. 예를 들어 점수가 100개라면 어떻게 해야 할까요? 변수도 100개가 필요하고, 평균을 구하는 식에도 100개의 변수를 모두 입력해야 합니다. 생각만 해도 불편합니다.이럴 때 리스트가 필요합니다. 다음 코드를 작성해서 실행해봅시다.코드를 보면 scores 변수 하나에 모든 값을 담아 저장했습니다. 그래서 score1, score2와 같은 개별 변수를 만들 필요가 없습니다. 또한 리스트에는 합계나 길이를 구하는 sum( ), len( ) 함수를 바로 적용할 수 있습니다. 만약 점수가 추가되더라도 scores 리스트에 숫자를 쉼표로 구분하여 더 입력하면 됩니다. 프로그램을 크게 수정할 필요가 없으니 편리합니다.03장에서는 문자열의 인덱싱, 슬라이싱을 배웠습니다. 문자열은 여러 문자가 모인 데이터라고 했었죠? 리스트도 여러 값이 모여 있는 데이터입니다. 따라서 리스트도 문자열과 마찬가지로 인덱싱과 슬라이싱을 할 수 있습니다. 다음은 리스트에서 인덱싱을 사용하는 예시 코드로, 특정 요소에 접근해서 해당 요소의 값을 출력합니다.실행 결과를 보면 colors[0]은 첫 번째 요소인 빨강을, colors[1]은 두 번째 요소인 파랑을 가져옵니다. colors[-1]처럼 음수를 쓰면 뒤에서부터 세어 마지막 요소인 초록이 나옵니다. 문자열에서 쓰던 인덱스 규칙이 리스트에도 그대로 적용된 것이죠.슬라이싱도 이어서 알아봅니다. 슬라이싱 역시 문자열에서 배운 내용과 크게 다르지 않으므로 별도의 설명 없이 코드를 입력해보면 바로 이해할 수 있을 것입니다.실행 결과를 보면 문자열의 슬라이싱과 같은 방식으로 동작합니다. 0:3으로 지정하면 인덱스 0부터 2까지 잘라 [10, 20, 30]을 출력하고, 5:로 지정하면 인덱스 5부터 마지막 요소까지 출력합니다.이번에는 리스트에 +와 * 연산자를 사용해 연결과 반복을 해봅시다. 리스트는 더하기, 곱하기 연산을 지원합니다. 이 두 가지 연산만 알아도 리스트를 훨씬 자유롭게 다룰 수 있습니다. 다음 코드를 실행해 결과를 확인해봅시다.실행 결과를 보면 문자열의 더하기와 곱하기 연산과 비슷하게 동작한다는 것을 알 수 있습니다. 더하기는 말 그대로 두 리스트를 순서대로 합친 것이고, 곱하기는 리스트를 지정한 횟수만큼 반복해 이어 붙인 것입니다. 빼기나 나누기는 사용할 수 없습니다. 이후 예제를 실습하며 리스트 연산자는 필요할 때 종종 사용하겠습니다.
[바로바로 파이썬 08] 클래스와 인스턴스
📅 2026년 11월 12일 · 👁 3
[바로바로 파이썬 08] 클래스와 인스턴스이번 장에서는 파이썬 문법의 큰 산인 클래스를 공부합니다. 클래스는 데이터와 기능, 즉 지금까지 배운 자료형과 함수를 하나로 묶어 관리할 수 있는 설계도입니다. 처음에는 낯설겠지만 코드를 직접 실행하다 보면 조금씩 감이 잡힐 겁니다. 천천히 시작해봅시다.클래스와 인스턴스 이해하기파이썬에서 클래스는 class 키워드로 만듭니다. 클래스 안에는 클래스 변수, 인스턴스 변수, 메서드 등을 정의할 수 있습니다. 이렇게 만든 클래스는 설계도 역할을 합니다. 하지만 설계도만으로는 충분하지 않습니다. 설계도 자체가 실제 제품이 아닌 것처럼, 이를 바탕으로 실제 제품을 만드는 과정이 필요합니다. 이처럼 클래스를 바탕으로 실제로 사용할 수 있는 실체를 만드는 것을 ‘인스턴스화한다’라고 하며, 이렇게 만들어진 실체를 ‘인스턴스’라고 합니다. 우선 다음 코드를 입력하여 실행해보면서 이 의미에 대해 천천히 알아가봅시다.Character라는 이름의 클래스를 선언하는 코드입니다. 다시 말해 캐릭터를 만들기 위한 설계도를 정의한 것이죠. 이 아래에 들여쓴 코드 블록은 모두 Character 클래스에 속합니다.인스턴스가 만들어지는 순간 자동으로 실행되는 메서드입니다. 클래스를 설계도에 비유했으니 굳이 이어서 비유하자면 설계도에 ‘이 설계도로 제품을 만드는 순간 이것을 실행하세요’라고 적어둔 것과 같습니다. 이때 self가 붙은 self.name, self.health 변수를 인스턴스 변수라고 합니다.생김새는 함수와 같지만 클래스 안에 정의되어 있으므로 메서드라고 부릅니다. 이 메서드는 인스턴스의 이름과 체력을 출력합니다. 여전히 인스턴스라는 말이 낯설 수 있지만 일단 넘어갑시다.Character 클래스를 바탕으로 인스턴스를 생성하는 부분입니다. 바로 이 시점에 설계도(클래스)로부터 실제 인스턴스가 만들어집니다. Character("슬라임", 30)처럼 데이터가 다른 인스턴스를 만들기도 합니다.정리하면 ➊ 클래스라는 설계도에 ➋ 인스턴스 변수와 ➌ 메서드를 정의하고, ➍ 그 설계도를 바탕으로 필요한 만큼 인스턴스를 만들어 사용하는 것이 클래스의 핵심입니다.그림으로 이해하는 클래스와 인스턴스의 관계다음은 앞에서 작성한 코드를 그림으로 그려본 것입니다. 그림을 통해 클래스와 인스턴스의 관계를 이해합시다.➊ 그림을 보면 Character 클래스라는 설계도를 바탕으로 용사와 슬라임을 만들고 있습니다.➋ 이때 용사와 슬라임은 각각 Character 클래스의 인스턴스인 것을 알 수 있죠. 각 인스턴스를 생성할 때 이름과 체력을 다르게 지정했습니다.➌ 두 인스턴스는 모두 Character 클래스를 바탕으로 만들어졌기 때문에 show_status( ) 메서드를 사용할 수 있습니다.➍ 따라서 두 인스턴스에서 각각 show_status( ) 메서드를 호출하면 자신의 이름과 체력을 출력합니다.__init__( ) 메서드의 역할 알아보기파이썬에는 이름 앞뒤에 밑줄 두 개(__)가 붙은 특별한 메서드가 있는데, 이를 특수 메서드special method라고 합니다. 흔히 매직 메서드magic method라고도 부르며, 특정 동작이 일어날 때 파이썬이 자동으로 호출합니다. __init__( ) 메서드는 인스턴스가 생성되는 순간 실행된다고 했습니다. __init__( ) 메서드의 동작 방식에 집중하기 위해 다음 예제를 실습해봅시다.실행 결과를 보면 __init__( ) 메서드를 직접 실행하지 않았지만 Dog("초코", 3)과 같이 인스턴스를 만드는 과정에서 __init__( ) 메서드가 자동으로 호출됩니다. 이때 메서드 내부의 코드 블록이 실행되면서 '초코 강아지 등록 완료'가 출력됩니다. 그다음 self.name = name, self.age = age에 의해 "초코", 3도 저장됩니다.self의 역할 알아보기이제 self의 역할을 말끔하게 이해할 차례입니다. 인스턴스가 생성될 때 __init__( ) 메서드가 무조건 실행된다면 그 안에서 self는 무슨 역할을 할까요? 바로 ‘생성된 인스턴스’를 의미합니다.클래스는 인스턴스를 만들기 위한 설계도이므로 어떤 인스턴스가 만들어질지 미리 알 수 없습니다. 클래스 안에 단순히 name, age라고만 작성하면 누구의 이름이고 나이인지 구분할 수 없습니다. 그래서 self.name, self.age처럼 작성하여 ‘앞으로 만들어질 각 인스턴스의 이름과 나이’를 나타냅니다.코드로 살펴보면 self.name = name은 ‘전달받은 name의 값을 현재 생성되는 인스턴스의 self.name에 저장하라’는 뜻입니다. choco에 저장할 인스턴스를 만들 때 "초코"가 name으로 전달되므로 해당 인스턴스의 self.name에 "초코"가 저장됩니다. 메서드를 호출할 때도 마찬가지입니다. hero.show_status( )처럼 점 앞에 쓴 인스턴스가 그대로 self로 전달됩니다. 따라서 같은 메서드를 호출하더라도 각 인스턴스에 저장된 서로 다른 값을 사용할 수 있습니다. 이를 인스턴스 변수라고 부릅니다.이제 앞에서 배운 내용을 다시 연습하며 내 것으로 다져보겠습니다. 이번에는 게임 아이템을 클래스로 표현해보겠습니다. 코드가 여러 줄이므로 파이썬 파일로 저장하여 실행하는 방식으로 연습하겠습니다. 다음 코드를 입력한 뒤 실행해봅시다.➊ Item이라는 이름의 클래스를 만들었습니다. 게임 아이템을 만들기 위한 설계도를 정의한 셈입니다.➋ __init__( ) 메서드에서 name과 price 값을 받아 self.name, self.price에 저장했습니다. 이렇게 저장한 값은 각 인스턴스가 자기만의 데이터로 가지게 됩니다.➌ show_info( ) 메서드는 아이템의 이름과 가격을 출력합니다.➍ Item("체력 물약", 50), Item("나무 검", 120)을 실행해서 서로 다른 두 인스턴스를 만들었습니다.➎ 각 인스턴스에서 show_info( ) 메서드를 호출하면 자기 인스턴스에 저장된 name과 price를 사용해 정보를 출력합니다.이번에는 하나의 Student 클래스로 두 학생을 만들고, self가 각 인스턴스를 가리켜 학생마다 자신의 이름과 점수를 출력하는 과정을 확인해봅시다.➊ Student라는 이름의 클래스를 만들었습니다.➋ __init__( ) 메서드에서 name과 score를 받아 self.name, self.score에 저장했습니다.➌ introduce( ) 메서드는 인스턴스가 가진 이름과 점수를 출력합니다.➍ Student("민수", 85), Student("지유", 92)를 실행해서 서로 다른 두 인스턴스를 만들었습니다.➎ minsu.introduce( )를 실행하면 self는 minsu를 가리키고, jiyu.introduce( )를 실행하면 self는 jiyu를 가리킵니다. 따라서 같은 메서드를 실행해도 각 인스턴스에 저장된 서로 다른 값이 출력됩니다.이 정도면 클래스와 인스턴스, __init__( ), self, 메서드가 어떤 역할을 하고 어떻게 동작하는지 이해할 수 있을 것입니다. 그럼 다음으로 넘어가봅시다.