05-1 파이썬의 클래스

1. 클래스란 무엇인가?

클래스는 프로그래밍 언어에서 객체 지향 프로그래밍(OOP)을 지원하는데 필요한 기본 단위 중 하나입니다. 클래스는 데이터(속성)와 데이터 조작을 위한 메소드(함수)를 하나로 묶는 데 사용됩니다. 클래스를 사용하면 코드의 구조를 잘 정리하고, 더 재사용 가능하게 만들 수 있습니다.

2. 클래스와 객체의 차이

클래스는 객체를 생성하기 위한 청사진(설계도)입니다. 객체는 클래스를 기반으로 생성된 실체이며, 런타임에 메모리를 점유하고 행동할 수 있는 상태를 가집니다.

3. 클래스 정의하기

클래스는 class 키워드를 사용하여 정의합니다. 클래스 이름은 보통 대문자로 시작되며, 클래스 본문은 들여쓰기 되어야 합니다.

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

4. 생성자와 소멸자

생성자는 객체가 생성될 때 자동으로 호출되는 메소드로, 주로 객체의 초기 상태를 설정하는 데 사용됩니다. 파이썬에서는 __init__ 메소드가 그 역할을 합니다. 소멸자는 객체가 삭제될 때 호출되며, __del__ 메소드로 정의할 수 있습니다.

5. 클래스 변수와 인스턴스 변수

클래스 변수는 클래스에 의해 공유되는 변수로, 모든 인스턴스에서 동일한 값을 가집니다. 인스턴스 변수는 객체마다 별도의 값을 가질 수 있는 변수입니다.

class Car:
    number_of_wheels = 4  # 클래스 변수

    def __init__(self, make, model, year):
        self.make = make    # 인스턴스 변수
        self.model = model  # 인스턴스 변수
        self.year = year    # 인스턴스 변수

6. 메소드 정의

메소드는 클래스 내부에 정의된 함수로, 객체의 동작을 정의합니다. 보통 인스턴스 메소드가 사용되며, 첫 번째 매개변수로 self를 사용하여 해당 객체에 접근할 수 있습니다.

class Car:
    def start_engine(self):
        print("Engine started")

7. 상속

상속은 기존 클래스를 기반으로 새로운 클래스를 만드는 기법으로, 코드 재사용성을 높입니다. class DerivedClass(BaseClass): 형태로 정의합니다.

class ElectricCar(Car):
    def __init__(self, make, model, year, battery_size):
        super().__init__(make, model, year)
        self.battery_size = battery_size

8. 다형성

다형성은 같은 인터페이스로 서로 다른 데이터 타입을 처리할 수 있는 기능입니다. 파이썬에서는 메소드 오버라이딩을 통해 다형성을 구현할 수 있습니다.

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "Woof!"

class Cat(Animal):
    def sound(self):
        return "Meow!"

9. 캡슐화

캡슐화는 객체의 일부 구현 내용에 대해 외부로부터의 접근을 제한하는 것을 의미합니다. 파이썬에서는 관습적으로 변수명 앞에 밑줄을 붙여(private) 캡슐화를 나타냅니다.

10. 클래스 활용 예제

여기서는 앞서 설명한 모든 개념을 포함한 예제를 만들어 보겠습니다.

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self._pages = pages  # Private 변수

    def __str__(self):
        return f"{self.title} by {self.author}"

    def set_pages(self, pages):
        if pages > 0:
            self._pages = pages
        else:
            raise ValueError("페이지 수는 양수여야 합니다.")

파이썬 강좌: 04장 파이썬의 입출력

본 강좌에서는 파이썬의 입출력(I/O) 시스템에 대해서 자세히 다룹니다. 입출력은 데이터의 흐름을 제어하는데 중요한 역할을 하며, 사용자와 프로그램 간의 상호작용뿐만 아니라 파일 시스템과의 연결을 가능하게 합니다. 이 장에서는 기본적인 콘솔 입출력 방법부터 파일을 다루는 방법, 예외 처리에 이르기까지 파이썬의 다양한 입출력 메커니즘을 다룰 것입니다.

1. 콘솔 입출력

1.1 print() 함수

파이썬에서 콘솔에 출력을 하기 위해 가장 많이 사용되는 함수는 print() 함수입니다. 이 함수는 다양한 형식의 데이터를 표준 출력 장치에 출력할 수 있도록 해줍니다.

print("Hello, World!")

위의 코드는 콘솔에 “Hello, World!”를 출력합니다. print() 함수는 여러 인자를 받을 수 있으며, 기본적으로 인자들 사이에 공백을 추가하여 출력합니다.

print("Hello,", "Python!")

위의 코드는 “Hello, Python!”을 출력합니다. print() 함수는 기본 인쇄 방식을 쉽게 커스터마이즈 할 수 있는 옵션을 제공합니다. 예를 들어, 출력 사이의 구분자와 출력의 끝을 변경할 수 있습니다.

print("Python", "Programming", sep="-", end="!")

위의 코드는 “Python-Programming!”을 출력합니다. sep은 출력 사이의 구분자를, end는 출력 끝에 덧붙일 문자열을 지정할 수 있도록 해줍니다.

1.2 input() 함수

input() 함수는 표준 입력 장치로부터 사용자 입력을 받을 때 사용됩니다. 사용자가 콘솔에 입력한 문자열은 input() 함수가 종료될 때 반환됩니다. 기본적으로 모든 입력은 문자열 형식으로 받아집니다.

name = input("Enter your name: ")
print("Hello,", name)

위 코드는 사용자에게 이름을 입력받고, 입력받은 이름을 이용하여 인사말을 출력합니다. 입력받은 데이터가 숫자형으로 사용되어야 할 경우 int() 또는 float() 함수를 사용하여 형 변환을 해주어야 합니다.

age = int(input("Enter your age: "))
print("You are", age, "years old.")

위 코드는 연령을 입력받고, 정수형으로 변환하여 사용합니다.

2. 파일 입출력

2.1 파일 열기

파일을 여는 방법은 open() 함수를 사용하는 것입니다. open() 함수는 파일의 이름과 모드를 인자로 받습니다. 주요 모드들은 다음과 같습니다:

  • 'r': 읽기용 모드
  • 'w': 쓰기용 모드 (기존 파일 내용 삭제)
  • 'a': 추가 모드 (기존 내용 유지, 새로운 내용 추가)
  • 'b': 이진 모드(바이너리 파일 읽기/쓰기)

파일을 열면 파일 객체가 생성되며, 이 객체를 통해 파일 조작을 할 수 있습니다. 일반적으로 파일 처리가 끝난 후에는 close() 메서드를 호출하여 파일을 닫아야 합니다. 이는 리소스를 해제하고 데이터가 손실되지 않도록 합니다.

file = open("example.txt", 'r')
content = file.read()
print(content)
file.close()

위 코드는 example.txt 파일을 읽기 모드로 열고, 파일 내용을 읽어서 출력합니다. 마지막으로 close() 메서드를 사용하여 파일을 닫습니다.

2.2 파일 읽기

파일의 내용을 읽는 방법에는 여러 가지가 있으며, 다음은 주로 사용하는 메서드들입니다:

  • read(): 파일 전체 내용을 하나의 문자열로 읽습니다.
  • readline(): 파일의 한 줄을 읽습니다. 줄 바꿈 문자도 포함됩니다.
  • readlines(): 파일의 각 줄을 요소로 가지는 리스트를 반환합니다.
file = open("example.txt", 'r')
line = file.readline()
while line:
    print(line, end='')
    line = file.readline()
file.close()

위 코드는 파일을 줄 단위로 읽어서 출력합니다. while 루프를 통해 파일의 끝에 도달할 때까지 각 줄을 읽어들입니다. 줄바꿈 문자가 포함되기 때문에 print() 함수의 end 파라미터를 빈 문자열로 설정하였습니다.

2.3 파일 쓰기

파일에 데이터를 쓰기 위해서는 파일을 ‘w’ 또는 ‘a’ 모드로 열어야 합니다. ‘w’ 모드는 파일의 내용을 덮어쓰고, ‘a’ 모드는 기존 파일의 끝에 내용을 추가합니다.

file = open("example.txt", 'w')
file.write("This is a new line.\n")
file.write("Writing to files is easy.\n")
file.close()

위 코드는 기존 파일의 내용을 지우고 새로운 줄을 두 개 추가합니다. 파일을 쓸 때는 write() 메서드를 사용하며, 줄 바꿈을 위해 명시적으로 ‘\n’을 포함하고 있습니다.

2.4 with 문을 사용한 파일 입출력

파일 입출력 시 with 문을 사용하면 코드가 더 간결해지고, 파일을 자동으로 닫아주기 때문에 실수를 방지할 수 있습니다.

with open("example.txt", 'r') as file:
    content = file.read()
    print(content)

위 코드는 with 문을 사용하여 파일을 열었고, 파일이 with 블록을 벗어나면 자동으로 닫힙니다. 이는 close() 메서드를 명시적으로 호출할 필요가 없다는 장점을 제공합니다.

3. 파일 모드와 바이너리 파일

텍스트 파일과 달리 바이너리 파일은 ‘b’ 모드를 사용하여 읽기와 쓰기를 수행해야 합니다. 이는 이미지, 오디오, 비디오 파일처럼 바이너리 데이터의 조작에 사용됩니다.

with open("image.jpg", 'rb') as binary_file:
    binary_content = binary_file.read()

위 코드는 이미지 파일을 바이너리 모드로 열고 내용을 읽어들입니다. 마찬가지로 파일 쓰기에는 ‘wb’ 모드를 사용합니다.

4. 예외 처리

파일을 다룰 때는 다양한 예외 상황이 발생할 수 있습니다. 예를 들어, 파일이 존재하지 않거나 읽기 권한이 없는 경우입니다. 이러한 예외를 처리하여 프로그램의 비정상적인 종료를 방지할 수 있습니다.

try:
    file = open("nonexistent_file.txt", 'r')
except FileNotFoundError:
    print("The file does not exist.")
finally:
    file.close()

위 코드는 파일이 존재하지 않을 경우 FileNotFoundError를 처리하여 사용자에게 파일이 없음을 알립니다. finally 블록은 예외 발생 여부에 관계없이 실행되며, 필요하다면 리소스를 정리하는 곳입니다.

with 문을 사용하는 경우 파일 닫기가 자동으로 처리되므로, 예외 처리가 조금 더 간단해질 수 있습니다.

마무리

이번 장에서는 파이썬의 입출력에 대한 다양한 방법을 다루었습니다. 콘솔 입출력과 파일 입출력의 기초부터, 예외 처리 방법에 이르기까지 파이썬을 통해 어떻게 데이터를 효과적으로 입력하고 출력할 수 있는지를 배웠습니다. 실제로 이러한 입출력 기능은 거의 모든 파이썬 프로그램에서 중요한 부분을 다루고 있기 때문에 더 많은 연습과 활용이 필요합니다.

앞으로의 강좌에서는 더욱 심화된 주제를 다룰 예정이니, 본 장의 내용을 충분히 이해하고 연습해 두세요.

04-4 파이썬의 입출력, 프로그램의 입출력

이번 강좌에서는 파이썬을 통한 입출력 방법에 대해 깊이 있게 살펴보도록 하겠습니다. 입출력은 모든 프로그래밍 언어의 근본적인 요소 중 하나로, 데이터를 읽고 쓰는 기능을 제공합니다. 파이썬에서는 다양한 방식으로 입출력을 수행할 수 있으며, 각각의 방법에 고유한 사용 사례가 있습니다.

표준 입출력(Standard Input/Output)

파이썬은 print() 함수를 통해 표준 출력(콘솔)에 데이터를 출력합니다. 이 함수는 따로 지정하지 않아도 기본적으로 문자열을 화면에 출력하는 방법입니다. print() 함수는 하나 이상의 데이터를 콤마로 구분하여 출력할 수도 있으며, 출력할 때 개행 문자를 포함하여 다양한 형식을 지정할 수 있습니다.

print("안녕하세요, 파이썬!")  # 기본 출력
print("이름:", "홍길동", "나이:", 25)  # 여러 항목을 출력

반대로 표준 입력을 받을 때는 input() 함수를 사용합니다. 사용자의 입력을 문자열로 받아들이며, 이를 통해 동적인 프로그램을 설계할 수 있습니다. input() 함수를 사용하여 입력받은 데이터는 항상 문자열 형태로 저장되므로, 필요에 따라 적절한 데이터 타입으로 변환하는 과정이 필수적입니다.

name = input("이름을 입력하세요: ")  # 사용자 입력
print("안녕하세요,", name)  # 입력받은 데이터를 출력

파일 입출력(File I/O)

파일 입출력은 데이터를 파일에 저장하거나 파일에서 데이터를 읽어오는 방법을 말합니다. 파이썬에서는 open() 함수를 사용하여 파일을 열고, 파일 객체의 메서드를 사용하여 데이터를 읽고 쓸 수 있습니다. 파일은 보통 텍스트 모드로 열리지만, 이진 모드로도 열 수 있습니다. 파일 모드는 읽기(‘r’), 쓰기(‘w’), 추가(‘a’) 등으로 지정할 수 있습니다.

# 파일에 데이터 쓰기
with open("example.txt", "w") as file:
    file.write("Hello, world!")  # 파일에 문자열 쓰기

위의 예제에서는 with 구문을 사용하여 파일을 엽니다. with 구문은 파일을 열고 나서 각종 작업을 수행한 후, 자동으로 파일을 닫아주는 역할을 합니다.

파일에서 데이터를 읽는 방법은 다음과 같습니다:

# 파일에서 데이터 읽기
with open("example.txt", "r") as file:
    content = file.read()  # 파일의 모든 내용을 읽어옴
    print(content)

파일 모드의 이해

파이썬에서 파일을 열 때 사용할 수 있는 다양한 모드가 있습니다. 각 모드는 파일을 어떻게 다룰지를 결정합니다.

  • r: 읽기 전용 모드로 파일을 엽니다. 파일이 존재하지 않으면 오류가 발생합니다.
  • w: 쓰기 전용 모드로 파일을 엽니다. 파일이 이미 존재한다면 내용을 덮어씁니다.
  • a: 추가 모드로 파일을 엽니다. 파일이 이미 있다면 끝에 내용을 추가합니다.
  • r+: 읽기/쓰기 모드로 파일을 엽니다. 파일이 존재해야 합니다.
  • w+: 읽기/쓰기 모드로 파일을 엽니다. 파일이 이미 존재한다면 내용을 덮어씁니다.
  • a+: 읽기/추가 모드로 파일을 엽니다. 파일이 이미 있다면 끝에 내용을 추가합니다.
  • b: 이진 모드로 파일을 엽니다.

예제: 바이너리 파일 읽기

텍스트 파일이 아니라 소위 바이너리 파일(이미지, 영상 등)을 열 때도 파이썬은 강력한 기능을 제공합니다.

with open("example.jpg", "rb") as binary_file:
    data = binary_file.read()
    print("File size:", len(data), "bytes")  # 파일의 크기를 바이트 단위로 출력

고급 입출력 기법

고급 파이썬 입출력 기능에는 파일을 특정 방식으로 처리하는 고급 사용이 포함됩니다. 예를 들어, CSV 파일을 처리하거나 JSON 파일을 읽는 작업은 입출력의 확장된 형태라 할 수 있습니다.

CSV 파일 처리

파이썬의 csv 모듈을 사용하여 CSV 파일을 보다 쉽게 처리할 수 있습니다. CSV 파일은 데이터를 카마(,)로 구분하여 저장하는 간단한 형태의 파일입니다.

import csv

# CSV 파일 쓰기
with open("data.csv", "w", newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["Name", "Age"])
    writer.writerow(["Alice", 25])
    writer.writerow(["Bob", 30])

# CSV 파일 읽기
with open("data.csv", "r") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

JSON 파일 처리

JSON은 자바스크립트 객체 표기법을 파이썬에서 다루기 위한 역활을 합니다. 파이썬의 json 모듈은 JSON 형식을 파이썬 데이터 타입으로 변환하고 반대로 변환하는 기능을 제공합니다.

import json

# JSON 데이터 쓰기
data = {
    "name": "Charlie",
    "age": 35,
    "city": "Seoul"
}

with open("data.json", "w") as jsonfile:
    json.dump(data, jsonfile)

# JSON 데이터 읽기
with open("data.json", "r") as jsonfile:
    data_loaded = json.load(jsonfile)
    print(data_loaded)

NOTE: JSON과 CSV는 웹에서 데이터 교환에 많은 용도로 사용됩니다. 위험을 최소화하기 위해 데이터를 정확한 형식으로 처리하는 것이 중요합니다.

문자 인코딩과 디코딩

입출력을 할 때는 문자 인코딩과 디코딩을 올바르게 설정하는 것이 중요합니다. 특히 다국어를 지원하는 프로그램에서는 UTF-8을 사용하는 것이 일반적입니다.

# UTF-8 파일 쓰기
with open("utf8_file.txt", "w", encoding="utf-8") as file:
    file.write("안녕하세요. UTF-8 인코딩 파일입니다.")

# UTF-8 파일 읽기
with open("utf8_file.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print(content)

인코딩을 설정하지 않으면, 파이썬은 개별 운영체제의 기본 설정을 따르게 됩니다. 이는 파일을 다른 시스템에서 사용할 때의 호환성 이슈를 일으킬 수 있습니다. 따라서 항상 명시적인 인코딩 설정이 권장됩니다.

결론

파이썬은 강력하고 유연한 입출력 가능성을 제공합니다. 입출력 과정은 단순한 데이터를 화면에 출력하거나 파일로부터 읽는데 그치지 않고, 다양한 형식의 데이터를 읽고 쓰는 데 필요한 방법들을 포함합니다. 표준 입출력부터 파일 입출력까지, 그리고 파일의 모드를 이해하고 다루는 것은 모두 중요한 스킬입니다.

계속해서 다양한 입출력 메서드와 응용을 연습하면서, 여러분의 프로그래밍 기술을 넓혀가길 바랍니다. 다음 번에는 파이썬의 예외 처리에 대해 자세히 알아보겠습니다. 질문이 있으면 언제든지 댓글로 남겨주세요!

파이썬의 입출력: 파일 읽고 쓰기

서론

파일 입출력은 대부분의 프로그래밍 언어에서 필수적인 요소이며, 데이터를 영구적으로 저장하거나 외부의 데이터를 프로그램에 반입하는 데 사용됩니다. 파이썬에서는 이러한 파일 입출력 작업을 매우 쉽게 수행할 수 있는 강력하고 직관적인 기능을 제공합니다. 이번 강좌에서는 파이썬을 사용하여 파일을 읽고 쓰는 방법을 자세히 설명하도록 하겠습니다.

파일 열기와 닫기

파일 작업을 하기 위해 가장 먼저 해야 할 일은 파이썬에서 파일을 여는 것입니다. 파일을 열기 위해서는 내장 함수인 open()을 사용합니다. open() 함수는 파일 이름과 파일 열기 모드를 매개변수로 받아들입니다.

file_object = open("example.txt", "r") # 읽기 모드로 파일 열기

파일을 사용한 후에는 꼭 닫아줘야 합니다. 이를 통해 시스템 자원이 해제되고, 데이터 손상을 방지할 수 있습니다. 파일 닫기는 close() 메서드를 통해 수행할 수 있습니다.

file_object.close()

파일 열기 모드

파일을 열 때 파일의 용도에 따라 다양한 모드를 사용할 수 있습니다. 주요 파일 열기 모드들은 다음과 같습니다:

  • 'r': 읽기 모드. 파일의 내용을 읽기 위해 사용합니다. 파일이 존재해야 합니다.
  • 'w': 쓰기 모드. 파일에 내용을 쓰기 위해 사용합니다. 파일이 존재하지 않으면 새로 생성되고, 기존 파일이 존재하면 해당 파일의 내용이 모두 삭제됩니다.
  • 'a': 추가 모드. 파일 끝에 내용을 덧붙이기 위해 사용합니다. 파일이 존재하지 않으면 새로 생성됩니다.
  • 'b': 바이너리 모드. 파일을 바이너리로 처리할 때 사용됩니다. 예를 들어, ‘rb’는 바이너리 읽기 모드입니다.
  • 't': 텍스트 모드. 기본값이며, 텍스트 파일로 처리합니다.
  • 'x': 배타적 생성 모드. 파일이 존재하지 않을 때 새 파일을 생성합니다. 파일이 이미 존재하면 오류가 발생합니다.

파일 읽기

파일을 읽는 작업은 주로 read()readline()readlines() 메서드를 통해 이루어집니다. 파일 크기와 형식에 따라 적절한 메서드를 선택하여 사용할 수 있습니다.

read() 메서드

read() 메서드는 파일의 내용을 문자열로 읽어들입니다. 전체 파일 내용을 한 번에 읽거나, 읽을 바이트 수를 지정할 수 있으며, 읽기 작업 후에는 파일 포인터가 파일 끝에 위치하게 됩니다.

with open("example.txt", "r") as file:
    content = file.read()
print(content)

readline() 메서드

readline() 메서드는 한 줄씩 읽어들일 때 유용합니다. 줄 끝의 개행 문자는 포함되어 있으며, 읽기 작업 후에는 파일 포인터가 다음 줄로 이동합니다.

with open("example.txt", "r") as file:
    line = file.readline()
    while line:
        print(line, end='')
        line = file.readline()

readlines() 메서드

readlines() 메서드는 파일의 모든 줄을 읽어 리스트로 반환합니다. 각 줄은 리스트의 개별 요소로 처리됩니다.

with open("example.txt", "r") as file:
    lines = file.readlines()
for line in lines:
    print(line, end='')

파일 쓰기

파일에 내용을 쓰는 작업은 write()와 writelines() 메서드를 통해 이루어집니다. 파일에 데이터를 기록하는 다양한 방법을 제공하여 유연하게 사용할 수 있습니다.

write() 메서드

write() 메서드는 문자열 데이터를 파일에 기록합니다. 데이터를 기록한 후에는 반드시 flush()를 호출하거나 파일을 닫아야 실제로 데이터가 기록됩니다.

with open("example.txt", "w") as file:
    file.write("Hello, World!")

writelines() 메서드

writelines() 메서드는 문자열 리스트를 받아 파일에 기록합니다. 각 문자열은 기존 줄 끝에 이어져 기록되므로 각 줄 끝에 개행 문자를 명시적으로 추가해야 할 수도 있습니다.

with open("example.txt", "w") as file:
    lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
    file.writelines(lines)

파일 처리 예외 관리

파일 작업은 다양한 오류가 발생할 수 있으므로, 예외 처리를 통해 오류를 효과적으로 처리하는 것이 중요합니다. 파이썬의 tryexcept 구문을 사용하여 예외를 관리할 수 있으며, 이를 통해 파일 없음, 읽기 오류 등의 예외를 처리할 수 있습니다.

try:
    with open("example.txt", "r") as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("파일이 존재하지 않습니다.")
except Exception as e:
    print(f"예외가 발생했습니다: {e}")

결론

이번 강좌에서는 파이썬에서 파일을 읽고 쓰는 기본적인 방법과 주요 메서드, 그리고 파일 처리 시 예외 관리를 다루었습니다. 파일 입출력은 응용 프로그램의 데이터를 외부와 주고받고 저장하는 데 필수적인 기능입니다. 다양한 파일 입출력 방식과 적절한 예외 관리를 통해 파이썬 프로그램을 더욱 견고하게 작성할 수 있습니다.

파이썬 강좌: 파이썬의 입출력, 사용자 입출력

파이썬은 강력한 프로그래밍 언어로서 데이터의 입출력을 매우 쉽게 처리할 수 있는 기능을 제공합니다. 이 강좌에서는 파이썬에서 제공하는 기본적인 입출력 메커니즘과 사용자의 입력을 처리하는 방법을 깊이 있게 다룰 것입니다. 이를 통해 여러분은 데이터와 직접 상호작용하는 애플리케이션을 만드는 능력을 갖추게 될 것입니다.

파이썬의 표준 입력과 출력

파이썬에서 입출력을 이해하려면 가장 기본적인 함수들로 시작해야 합니다. print()와 input() 함수는 파이썬 프로그래밍에서 매우 자주 사용됩니다. print() 함수는 콘솔에 출력을 나타내기 위한 함수이며, input() 함수는 사용자의 입력을 받기 위해 사용됩니다.

print() 함수

print() 함수는 데이터의 가시화를 위해 사용됩니다. 예를 들어, 변수의 값을 확인하거나 프로그램의 실행 상태를 모니터링하는 데 사용됩니다.

# Hello, World! 출력
print("Hello, World!")

위의 코드에서는 문자열 "Hello, World!"가 콘솔에 출력됩니다. print() 함수는 다양한 유형의 데이터를 출력할 수 있으며, 여러 인자를 쉼표로 구분하여 출력할 수 있습니다.

a = 5
b = "Python Programming"
print(a, b)

위 코드에서는 숫자 5와 문자열 “Python Programming”이 공백으로 구분되어 출력됩니다. print() 함수는 추가적인 매개변수를 통해 출력물의 형식을 더 유연하게 조정할 수 있습니다. 예를 들어, 출력물 간의 구분을 변경하거나 끝에 추가적인 문자열을 붙이는 방법입니다.

print(a, b, sep=", ", end="!!\n")

이 경우, 출력은 “5, Python Programming!!” 형식으로 나타나며, 각 요소는 쉼표와 공백으로 구분되고 출력 끝에 “!!”가 추가됩니다.

input() 함수

input() 함수는 사용자의 입력을 받을 때 사용됩니다. 이 함수는 입력을 문자열로 처리하므로, 숫자를 입력받고자 하는 경우에는 자료형 변환이 필요합니다.

name = input("Enter your name: ")
print("Hello,", name)

위 예제에서는 사용자가 이름을 입력하면, 그 이름을 사용하여 “Hello, [Name]”이라는 메시지를 출력합니다. 이 때, 사용자가 입력한 모든 것은 문자열로 처리된다는 점을 기억해야 합니다.

고급 출력 포매팅

출력을 형식화하는 방법은 다양하며, 가독성과 유연성을 높이기 위해 파이썬은 여러 출력 형식화를 지원합니다.

기본 문자열 포맷팅

파이썬의 기본 문자열 포멧팅을 사용하는 전통적인 방법은 다음과 같습니다. 문자열 내에 % 기호를 사용하여 변수 자리를 표시하고, 이 자리에 대응할 변수를 할당합니다.

age = 30
print("나는 %d살 입니다." % age)

이 방식은 튜플을 사용하여 여러 항목을 포함할 수도 있습니다.

name = "철수"
age = 30
print("%s는 %d살 입니다." % (name, age))

하지만 이러한 방식은 현대적인 방법에 비해 다소 제한적이고 가독성이 떨어질 수 있습니다.

str.format() 메서드

파이썬 2.7과 3.2부터는 str.format() 메서드를 사용하여 포맷팅할 수 있습니다. 이 방식은 {} 기호를 사용자 자리에 넣고, format() 메소드의 인자로 해당 값을 전달합니다.

print("{}는 {}살 입니다.".format(name, age))

또는 인덱스를 사용하여 더욱 명확하게 어느 값이 어느 위치에 와야 할지를 지정할 수 있습니다.

print("{0}는 {1}살 입니다.".format(name, age))

이 방법은 보다 읽기 쉽고, 변수의 순서를 변경하거나 출력 형식을 쉽게 수정 가능하다는 이점이 있습니다.

파이썬 3.6과 f-strings

파이썬 3.6부터는 f-string을 사용할 수 있습니다. 이는 문자열 앞에 f를 붙여서, 중괄호 안에 변수를 직접 넣는 방식으로, 매우 직관적이고 코드가 간결해집니다.

print(f"{name}는 {age}살 입니다.")

이 방법은 가독성이 가장 뛰어나며, 변수를 직접 삽입할 수 있다는 장점이 있습니다. 또한, 내장 표현식을 지원하므로 복잡한 데이터 변환이나 계산도 쉽게 적용할 수 있습니다.

사용자 입력 처리 심화

사용자의 입력을 다루는 것은 단순히 입력을 받는 것을 넘어서, 그 입력의 유효성을 검사하고 적절한 피드백을 제공하며, 필요할 경우 사용자로부터 재입력을 요구하는 과정을 포함합니다.

자료형 변환과 예외 처리

input() 함수는 항상 문자열을 반환하므로, 숫자 등의 다른 자료형이 필요한 경우에는 변환이 필요합니다. 이 과정에서 발생할 수 있는 오류를 관리하기 위해 예외 처리가 필요합니다.

try:
    age = int(input("나이를 입력하세요: "))
    print(f"당신의 나이는 {age}입니다.")
except ValueError:
    print("유효한 숫자를 입력해 주세요.")

위 코드에서, 사용자가 숫자가 아닌 다른 값을 입력한 경우, ValueError가 발생하며 친절한 오류 메시지를 출력하고 프로그램을 안전하게 유지합니다.

반복을 통한 유효한 입력 받기

사용자가 유효한 입력을 할 때까지 계속해서 반복 요청할 수 있습니다. 이는 특정 조건이 충족될 때까지 입력을 요구하는 방식으로 구현됩니다.

while True:
    try:
        age = int(input("나이를 입력하세요: "))
        break  # 유효한 입력인 경우 반복 중지
    except ValueError:
        print("유효한 숫자를 입력해 주세요.")

print(f"입력 받은 나이는 {age}입니다.")

이러한 반복 구조는 유효하지 않은 입력이 주어졌을 때 사용자에게 기회를 제공하면서 프로그램의 정상적인 흐름을 유지합니다.

마치며

이번 강좌에서는 파이썬의 기본 입출력 방법과 사용자 입력을 처리하는 다양한 기법을 학습했습니다. 이를 통해 여러분은 프로그램의 유연성과 안전성을 높이는 방법을 익혔을 것입니다. 다음 강좌에서는 파일 입출력과 같은 더 복잡한 데이터 처리 기술을 탐구해 보겠습니다.

그 동안 질문이 있거나 도움이 필요하다면, 언제든지 아래 댓글 섹션에 문의하시기 바랍니다. 행복한 코딩 되세요!