모든 파일은 여러 디렉터리(폴더) 안에 저장됩니다. 파이썬은 이러한 디렉터리도 손쉽게 처리할 수 있으며, 표준 라이브러리인 os 모듈은 디렉터리를 생성하고, 삭제하고, 현재 위치를 변경하는 데 유용한 다양한 메서드를 제공합니다.이 글에서는 디렉터리 작업에 가장 많이 사용되는 네 가지 메서드인 mkdir(), chdir(), getcwd(), rmdir()의 사용법을 예제와 함께 살펴보겠습니다.1. mkdir() — 디렉터리 생성os 모듈의 mkdir() 메서드를 사용하면 현재 디렉터리 안에 새로운 디렉터리를 만들 수 있습니다. 이
문제 설명비어 있지 않은 두 개의 연결 리스트(linked list)가 주어졌다고 가정해 보겠습니다. 이 두 리스트는 각각 음수가 아닌 정수를 나타내며, 숫자는 역순(일의 자리부터)으로 저장되어 있습니다. 각 노드에는 한 자릿수만 들어갑니다. 우리의 목표는 이 두 수를 더한 결과를 다시 연결 리스트 형태로 반환하는 것입니다. 단, 숫자 0 자체를 제외하고는 어떤 수도 선행 0(leading zero)을 포함하지 않는다고 가정합니다.예를 들어 120 + 230을 계산한다면, 연결 리스트로는 [0 → 2 → 1] + [0 → 3 → 2
어설션(assertion)은 프로그램의 테스트가 끝난 후 켜거나 끌 수 있는 일종의 안전 점검(sanity check) 장치입니다. 코드가 의도한 대로 동작하고 있는지 개발 단계에서 빠르게 확인할 수 있도록 도와주는 도구라고 할 수 있습니다.어설션을 가장 쉽게 이해하는 방법은 raise-if 문(정확히는 raise-if-not 문)에 비유하는 것입니다. 즉, 특정 표현식을 검사하여 그 결과가 거짓(false)이면 예외를 발생시키는 방식으로 동작합니다.어설션은 파이썬 1.5 버전에서 새롭게 도입된 키워드인 assert 문을 통해 수행
문제 개요문자열이 하나 주어졌을 때, 반복되는 문자가 없는 가장 긴 부분 문자열(substring)의 길이를 찾는 것이 이번 문제의 목표입니다. 예를 들어 문자열이 ABCABCBB라고 한다면, 반복 문자가 없는 부분 문자열 중 가장 긴 것은 ABC이며 그 길이는 3이므로 결과값은 3이 됩니다.접근 방법: 슬라이딩 윈도우이 문제는 두 개의 포인터 i와 j를 활용하는 슬라이딩 윈도우(Sliding Window) 기법으로 효율적으로 해결할 수 있습니다. 여기에 해시맵(파이썬 딕셔너리)을 함께 사용하면 각 문자가 마지막으로 등장한 위치를
파이썬 예외(Exception)란?예외(exception)는 프로그램 실행 도중에 발생하여 프로그램의 정상적인 명령 흐름을 방해하는 이벤트입니다. 일반적으로 파이썬 스크립트가 스스로 처리할 수 없는 상황에 직면하면 예외를 발생(raise)시킵니다. 즉, 예외란 오류를 나타내는 하나의 파이썬 객체라고 할 수 있습니다.파이썬 스크립트가 예외를 발생시키면 해당 예외를 즉시 처리해야 합니다. 그렇지 않으면 스크립트는 더 이상 실행되지 않고 종료됩니다.예외 처리 방법예외가 발생할 가능성이 있는 의심스러운 코드가 있다면, 그 코드를 try 블
try-finally란? Python에서는 try 블록과 함께 finally 블록을 사용할 수 있습니다. finally 블록은 try 블록에서 예외가 발생했는지 여부와 상관없이 반드시 실행해야 하는 코드를 작성하는 공간입니다. 파일 닫기, 리소스 해제, 연결 종료처럼 어떤 경우에도 수행되어야 하는 정리(cleanup) 작업을 처리할 때 특히 유용합니다. try-finally 기본 문법 try: # 여기서 원하는 작업을 수행합니다. # ...................... # 예외가 발생하면 이 부분은 건
문자열 S가 주어졌을 때, S 안에서 가장 긴 회문(palindromic) 부분 문자열을 찾는 문제입니다. 여기서는 문자열의 길이가 최대 1000이라고 가정합니다. 예를 들어 문자열이 BABAC라면, 가장 긴 회문 부분 문자열은 BAB가 됩니다.회문이란 앞에서 읽으나 뒤에서 읽으나 같은 문자열을 의미합니다. 이 문제는 동적 계획법(Dynamic Programming, DP)을 활용하면 효율적으로 해결할 수 있습니다.해결 접근 방식DP 테이블을 활용한 해결 단계는 다음과 같습니다.문자열 길이와 같은 크기의 정사각 행렬(DP 테이블)을
Python에서 예외(Exception)는 문제에 대한 추가 정보를 전달하는 인수(argument)를 가질 수 있습니다. 인수에 어떤 내용이 담기는지는 예외의 종류에 따라 달라지며, except 절에 변수를 지정하면 해당 예외의 인수를 받아낼 수 있습니다.예외 인수를 받는 기본 문법try: 여기에서 작업을 수행합니다; ...................... except ExceptionType as Argument: 여기에서 Argument 값을 출력할 수 있습니다...단일 예외만 처리하는 코드라면 excep
Python에서는 raise 문을 사용하여 다양한 방식으로 예외를 직접 발생시킬 수 있습니다. 예외를 강제로 발생시키면 특정 조건에서 프로그램의 실행 흐름을 의도적으로 중단하고, 오류 상황을 호출자에게 명확하게 알릴 수 있습니다.raise 문 기본 문법raise [Exception [, args [, traceback]]]여기서 Exception은 발생시킬 예외의 종류(예: NameError)를 의미하고, args는 해당 예외에 전달할 인수 값입니다. 인수는 선택 사항이며, 지정하지 않으면 예외 인수는 None으로 설정됩니다.마지막
Python 사용자 정의 예외란?Python은 표준 내장 예외 클래스를 상속받아 자신만의 사용자 정의 예외(Custom Exception)를 만들 수 있도록 지원합니다. 이를 활용하면 프로그램에서 발생하는 오류 상황을 더 명확하고 구체적인 메시지로 표현할 수 있습니다.RuntimeError를 상속한 예외 클래스 정의다음은 RuntimeError를 상속하는 예외 클래스의 예입니다. 여기서는 Networkerror라는 클래스를 새로 정의하며, 이 클래스는 RuntimeError의 하위 클래스입니다. 예외가 발생(caught)했을 때 보
파이썬은 객체 지향 프로그래밍(Object-Oriented Programming, OOP)을 지원하는 대표적인 언어로, 코드를 구조화하고 재사용성을 높이는 데 매우 효과적입니다. OOP를 제대로 활용하려면 먼저 핵심 용어들을 정확히 이해하는 것이 중요합니다. 아래에서 파이썬 OOP의 주요 용어들을 하나씩 살펴보겠습니다. 1. 클래스(Class) 클래스는 객체를 생성하기 위한 사용자 정의 설계도(프로토타입)입니다. 클래스는 해당 클래스에 속한 모든 객체의 특징을 결정짓는 속성(attribute)들의 집합을 정의하며, 속성은 데이터
파이썬 클래스 정의하기 파이썬에서는 class 문을 사용하여 새로운 클래스를 정의합니다. 클래스 이름은 class 키워드 바로 뒤에 작성하고, 그 뒤에 콜론(:)을 붙이면 됩니다. class ClassName: 선택적인 클래스 문서화 문자열(docstring) class_suite 클래스에는 문서화 문자열(docstring)을 포함할 수 있으며, ClassName.__doc__을 통해 언제든지 확인할 수 있습니다. class_suite는 클래스 멤버, 데이터 속성, 함수(메서드)를 정의하는 모든 구성 문장으로 이루어
인스턴스 객체 생성하기 클래스의 인스턴스를 생성하려면 함수를 호출하듯이 클래스 이름을 사용하고, 해당 클래스의 __init__ 메서드가 받는 인수를 함께 전달하면 됩니다. # Employee 클래스의 첫 번째 객체 생성 emp1 = Employee(Zara, 2000) # Employee 클래스의 두 번째 객체 생성 emp2 = Employee(Manni, 5000) 객체의 속성(attribute)에 접근할 때는 점(.) 연산자를 사용합니다. 클래스 변수는 아래와 같이 클래스 이름으로 접근합니다. emp1.displayEmploy
파이썬(Python)에서 정의하는 모든 클래스는 별도로 선언하지 않아도 자동으로 생성되는 내장(built-in) 속성들을 가지고 있습니다. 이러한 속성은 일반적인 속성과 마찬가지로 점(.) 연산자를 통해 언제든 조회할 수 있으며, 클래스의 구조와 메타 정보를 동적으로 확인하는 데 매우 유용합니다. 주요 내장 속성 __dict__ — 클래스의 네임스페이스 전체가 담겨 있는 딕셔너리입니다. __doc__ — 클래스의 문서화 문자열(docstring)입니다. 정의되어 있지 않으면 None을 반환합니다. __name__ — 클래스의 이름
Python은 더 이상 필요하지 않은 객체(내장 타입 또는 클래스 인스턴스)를 자동으로 삭제하여 메모리 공간을 확보합니다. 이처럼 Python이 주기적으로 사용되지 않는 메모리 블록을 회수하는 과정을 가비지 컬렉션(Garbage Collection)이라고 부릅니다. Python의 가비지 컬렉터는 프로그램 실행 중에 동작하며, 객체의 참조 카운트(reference count)가 0에 도달하는 시점에 트리거됩니다. 객체를 가리키는 별칭(alias)의 수가 변하면 그에 따라 참조 카운트도 함께 변경됩니다. 객체에 새로운 이름이 할당되거
파이썬에서는 처음부터 모든 코드를 새로 작성하는 대신, 기존에 존재하는 클래스를 기반으로 새로운 클래스를 파생시켜 만들 수 있습니다. 새 클래스 이름 뒤 괄호 안에 부모 클래스를 나열하기만 하면 됩니다.이렇게 만든 자식 클래스는 부모 클래스의 속성과 메서드를 그대로 물려받으며, 마치 자식 클래스 내부에서 직접 정의한 것처럼 자유롭게 사용할 수 있습니다. 또한 필요에 따라 부모 클래스의 데이터 멤버나 메서드를 재정의(오버라이드)할 수도 있습니다.상속 문법파생 클래스는 일반 클래스와 거의 같은 방식으로 선언합니다. 다만 클래스 이름 뒤
메서드 재정의(Overriding)란? 파이썬에서는 언제든지 부모 클래스의 메서드를 재정의(오버라이딩)할 수 있습니다. 부모 클래스의 메서드를 재정의하는 가장 큰 이유는, 서브클래스에서 부모와는 다른 특별한 기능이나 동작이 필요할 때입니다. 자식 클래스에서 부모 클래스와 같은 이름의 메서드를 정의하면, 객체가 해당 메서드를 호출할 때 자식 클래스에 정의된 메서드가 우선적으로 실행됩니다. 이것이 바로 메서드 오버라이딩입니다. 예제 코드 #!/usr/bin/python class Parent: # 부모 클래스 정의 def m
파이썬(Python)은 객체지향 언어로서, 클래스 내부에 특수 메서드(매직 메서드, 던더 메서드)를 정의하면 연산자나 내장 함수의 기본 동작을 재정의할 수 있습니다. 이를 기본 오버로딩(Default Overloading)이라고 부르며, 이를 잘 활용하면 사용자 정의 클래스를 마치 리스트나 문자열 같은 내장 타입처럼 자연스럽게 다룰 수 있습니다.재정의 가능한 주요 메서드 목록아래 표는 사용자 정의 클래스에서 오버로딩할 수 있는 대표적인 일반 기능들을 정리한 것입니다.번호메서드 · 설명 · 호출 예시1__init__( self [,a
파이썬으로 2차원 벡터를 표현하는 Vector 클래스를 만들었다고 가정해 봅시다. 그런데 이 객체 두 개를 더하기 연산자(+)로 더하면 어떻게 될까요? 별도의 처리 없이는 파이썬은 TypeError를 발생시키며 오류를 냅니다.하지만 클래스 안에 __add__ 메서드를 직접 정의하면 이야기가 달라집니다. 이 메서드는 덧셈 연산자가 사용될 때 자동으로 호출되며, 여기에 벡터 덧셈 로직을 구현해 두면 + 연산자가 우리가 기대하는 대로 동작합니다.연산자 오버로딩이란?연산자 오버로딩(Operator Overloading)은 이미 존재하는 연
객체의 속성(attribute)은 클래스 정의 외부에서 보일 수도 있고, 숨겨질 수도 있습니다. 파이썬에서는 속성 이름 앞에 이중 언더스코어(__)를 붙이면 해당 속성이 클래스 외부에서 직접 접근할 수 없도록 은닉됩니다. 이러한 기법을 데이터 은닉(Data Hiding)이라고 부르며, 객체 지향 프로그래밍에서 내부 구현을 보호하고 캡슐화를 강화하는 중요한 개념입니다.예제 코드#!/usr/bin/python class JustCounter: __secretCount = 0 def count(self): s