yield 키워드란 무엇인가? yield 키워드는 제너레이터(generator)에서 사용됩니다. 그 동작 방식을 이해하려면 먼저 이터러블(iterable)이 무엇인지 알아야 합니다. Python에서 리스트(list), 파일(file), 문자열(string) 등의 객체를 이터러블이라고 부릅니다. 즉, for ... in 구문으로 순회할 수 있는 모든 객체가 이터러블에 해당합니다. 이터레이터(iterator) 객체 역시 이터러블의 일종이지만, 단 한 번만 순회할 수 있다는 점이 다릅니다. 이터레이터 객체는 iter() 함수를 통해 모든
Python 튜플에서 첫 번째 요소 제거하기Python에서 튜플(tuple)은 정의상 불변(immutable) 객체입니다. 따라서 한 번 생성된 튜플에서는 pop()이나 remove() 같은 메서드로 요소를 직접 삭제할 수 없습니다.하지만 우회적인 방법이 있습니다. 바로 튜플을 리스트(list)로 변환한 뒤 원하는 요소를 제거하고, 다시 튜플로 되돌리는 것입니다. 리스트는 가변(mutable) 객체이므로 자유롭게 요소를 추가하거나 삭제할 수 있습니다.변환 과정 단계별 설명list() 함수로 튜플을 리스트로 변환합니다.리스트의 pop
Python 튜플 슬라이싱이란?슬라이싱 연산자는 튜플(Tuple)을 포함한 모든 시퀀스 데이터 타입에 사용할 수 있습니다. 슬라이싱이란 시퀀스의 일부분을 분리해 내는 작업을 의미하며, 여기서는 튜플의 일부를 추출하는 것을 말합니다.슬라이싱에 사용되는 기호는 콜론(:)입니다. 이 연산자는 두 개의 피연산자를 필요로 합니다. 첫 번째 피연산자는 슬라이스의 시작 요소 인덱스이고, 두 번째 피연산자는 슬라이스의 마지막 요소 인덱스 + 1입니다. 슬라이싱 결과 역시 튜플 형태로 반환됩니다.기본적인 슬라이싱 예제>>> T1=(
Python 튜플은 변경 불가능(Immutable)한 객체입니다Python에서 튜플(tuple)은 한 번 생성되면 내용을 수정할 수 없는 불변(immutable) 객체입니다. 따라서 리스트처럼 append() 메서드를 사용해 요소를 직접 추가하려고 하면 오류가 발생합니다.하지만 몇 가지 우회 방법을 사용하면 사실상 튜플에 새로운 요소를 추가한 것과 같은 결과를 얻을 수 있습니다.방법 1: list()와 tuple() 함수를 활용한 변환가장 대표적인 방법은 다음과 같습니다.내장 함수 list()를 사용해 튜플을 리스트로 변환합니다.리
파이썬에서 튜플(tuple)은 불변(immutable) 객체입니다. 따라서 append()나 insert()처럼 튜플을 직접 수정하려는 모든 연산은 허용되지 않으며, 시도할 경우 AttributeError가 발생합니다.왜 튜플은 수정할 수 없을까?튜플은 한 번 생성되면 내부 요소를 추가, 삭제, 변경할 수 없습니다. 이러한 불변성 덕분에 튜플은 리스트보다 메모리 효율이 좋고, 딕셔너리의 키로 사용하거나 데이터가 의도치 않게 변경되지 않아야 하는 상황에서 안전하게 활용됩니다.해결 방법: 리스트로 변환 후 다시 튜플로 변환튜플에 값을
클래스 속성과 인스턴스 속성의 차이클래스 속성(class attribute)은 클래스의 개별 인스턴스가 아니라 클래스 자체에 속하는 속성입니다. 반면 인스턴스 속성(instance attribute)은 각 객체마다 독립적으로 생성되고 유지되는 속성입니다.아래 코드에서 class_var는 클래스 속성이고, i_var는 인스턴스 속성입니다. 해당 클래스의 모든 인스턴스는 class_var에 접근할 수 있으며, 클래스 자체의 속성으로도 접근이 가능합니다.예제 코드class MyClass(object): class_var = 2
파이썬 점(.) 연산자란 무엇인가? 파이썬(Python)에서는 거의 모든 것이 객체(Object)입니다. 그리고 모든 객체는 저마다 고유한 속성(attribute)과 메서드(method)를 가지고 있습니다. 이때 어떤 속성이나 메서드가 특정 객체에 속해 있다는 관계를 나타내는 기호가 바로 객체와 속성(또는 메서드) 사이에 위치하는 점(dot, .)입니다. 클래스와 인스턴스 예제로 이해하기 예를 들어 Dog라는 클래스(class)가 있다고 가정해 보겠습니다. 이 클래스로 생성된 Fido라는 이름의 개는 Dog 클래스의 인스턴스(in
소멸자(Destructor)란 무엇인가?파이썬에서 클래스는 __del__()이라는 특수 메서드를 구현할 수 있으며, 이 메서드를 소멸자(destructor)라고 부릅니다. 소멸자는 해당 클래스의 인스턴스가 곧 소멸(파괴)되기 직전에 자동으로 호출됩니다.이 메서드의 주요 용도는 인스턴스가 사용 중이던 메모리 외부 리소스를 정리하는 것입니다. 예를 들어 열려 있는 파일 핸들, 데이터베이스 연결, 네트워크 소켓 등을 닫는 작업에 활용할 수 있습니다.예제 코드다음 예제의 __del__() 소멸자는 곧 소멸될 인스턴스의 클래스 이름을 출력합
파이썬(Python)은 더 이상 필요하지 않은 객체(내장 타입이나 클래스 인스턴스)를 자동으로 삭제하여 메모리 공간을 확보합니다. 이처럼 파이썬이 주기적으로 사용되지 않는 메모리 블록을 해제하고 회수하는 과정을 가비지 컬렉션(Garbage Collection)이라고 부릅니다. 참조 카운트(Reference Count) 기반의 메모리 관리 파이썬의 가비지 컬렉터는 프로그램 실행 도중에 동작하며, 객체의 참조 카운트가 0에 도달하는 순간 트리거됩니다. 객체의 참조 카운트는 해당 객체를 가리키는 별칭(alias)의 개수가 변할 때마다
클래스 상속(Inheritance)이란?파이썬에서는 새로운 클래스를 처음부터 정의하는 대신, 이미 존재하는 클래스를 기반으로 삼아 새로운 클래스를 만들 수 있습니다. 이를 상속(inheritance)이라 하며, 새 클래스 이름 뒤 괄호 안에 부모 클래스(상위 클래스)를 나열하는 방식으로 구현합니다.이렇게 만들어진 자식 클래스(하위 클래스)는 부모 클래스의 속성과 메서드를 그대로 물려받습니다. 즉, 부모 클래스에 정의된 기능을 마치 자식 클래스 안에 직접 정의한 것처럼 자유롭게 사용할 수 있습니다. 또한 필요에 따라 부모의 데이터 멤
다중 상속으로 클래스 정의하기 파이썬에서는 하나의 자식 클래스가 여러 개의 부모 클래스로부터 동시에 상속받을 수 있습니다. 이를 다중 상속(multiple inheritance)이라고 하며, 아래와 같이 작성합니다. class A: # A 클래스 정의 ..... class B: # B 클래스 정의 ..... class C(A, B): # A와 B를 모두 상속받는 하위 클래스 ..... 위 예제에서 C 클래스는 A와 B 두 클래스를 부모로 가지므로, 두 부모 클래스의 속성
파이썬 다중 상속 기본 개념파이썬은 하나의 클래스가 여러 부모 클래스로부터 동시에 상속받을 수 있는 다중 상속(Multiple Inheritance)을 지원합니다. 아래와 같이 클래스 C를 정의할 때 괄호 안에 두 개 이상의 부모 클래스를 나열하면 됩니다.class A: # 클래스 A 정의 ... class B: # 클래스 B 정의 ... class C(A, B): # A와 B를 모두 상속받는 하위 클래스 ...이처럼 다중 상속 구조에서는 특정 객체가 어느 클래스와 관계가 있는지
파이썬에서는 issubclass() 함수나 __bases__ 속성을 활용하여 어떤 클래스가 주어진 슈퍼클래스(부모 클래스)의 하위 클래스인지 간단히 확인할 수 있습니다. 예제 클래스 정의 먼저 다음과 같이 두 개의 클래스 A와 B를 정의합니다. 여기서 B는 A를 상속받은 하위 클래스입니다. class A(object): pass class B(A): pass 방법 1: issubclass() 함수 사용 issubclass() 내장 함수는 첫 번째 인자로 전달한 클래스가 두 번째 인자로 전달한 클래스의 하위 클래스
개요파이썬에서 어떤 클래스가 다른 클래스의 슈퍼 클래스(상위 클래스)인지 확인해야 하는 경우가 종종 있습니다. 예를 들어 다음과 같이 두 클래스 A와 B가 정의되어 있다고 가정해 보겠습니다.class A(object): pass class B(A): pass여기서 B는 A를 상속받은 서브 클래스이며, 따라서 A는 B의 슈퍼 클래스입니다. 이 사실을 확인하는 방법은 크게 두 가지가 있습니다.방법 1: issubclass() 함수 사용내장 함수 issubclass()를 사용하면 첫 번째 인자가 두 번째 인자의 서브 클래
파이썬에서 어떤 클래스 속성이 해당 클래스 안에 직접 정의된 것인지, 아니면 부모 클래스로부터 상속(파생)된 것인지 구분해야 하는 경우가 있습니다. 이럴 때 __dict__ 속성과 hasattr() 함수를 함께 활용하면 간단하게 판별할 수 있습니다.핵심 원리클래스.__dict__: 해당 클래스에 직접 정의된 속성만 담고 있는 딕셔너리입니다. 상속받은 속성은 여기에 포함되지 않습니다.hasattr(클래스, 속성명): 해당 클래스가 속성을 가지고 있는지 확인합니다. 상속받은 속성까지 포함하여 검사하며, 존재하면 True를 반환합니다.따
객체 지향 프로그래밍과 상속이란? 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로젝트 전반에서 코드 중복을 방지하기 위해 재사용 가능한 코드 패턴을 만드는 프로그래밍 패러다임입니다. 재사용 가능한 코드를 만드는 대표적인 방법 중 하나가 바로 상속(Inheritance)으로, 하나의 하위 클래스가 다른 기반 클래스의 코드를 활용하는 것을 말합니다. 상속이란 한 클래스가 다른 클래스 안에 작성된 코드를 그대로 가져다 사용할 수 있도록 하는 기능입니다. 자식 클래스(child class) 또는 서
Python에서 서브클래스가 상속받은 부모 클래스(슈퍼 클래스)를 초기화할 때는 내장 함수인 super()를 사용하는 것이 좋습니다. 부모 클래스를 직접 호출하는 방식보다 super()를 사용하면 코드가 더 유연하고 유지 보수하기 쉬워집니다.super()를 사용하는 이유부모 클래스 이름을 직접 명시해 초기화할 수도 있지만, 이 방식은 나중에 부모 클래스 이름이 바뀌면 코드를 일일이 수정해야 하는 번거로움이 있습니다. 반면 super()는 현재 클래스와 인스턴스를 기준으로 자동으로 부모 클래스를 찾아주기 때문에, 클래스 구조가 변경되
메서드 오버로딩이란 무엇인가?메서드 오버로딩(method overloading)이란 같은 이름의 메서드를 여러 개 정의하고, 전달되는 인자의 개수나 타입에 따라 서로 다른 동작을 수행하도록 만드는 기법입니다. Java나 C++처럼 타입을 명시적으로 선언하는 정적 타이핑 언어에서 자주 볼 수 있는 기능입니다.Python에서는 메서드 오버로딩이 불가능합니다결론부터 말씀드리면, Python에서는 메서드 오버로딩을 사용할 수 없습니다. Python에서는 같은 이름의 메서드를 클래스 안에 두 번 정의하면, 나중에 정의한 메서드가 앞선 메서드
메서드 오버라이딩이란?오버라이딩(Overriding, 재정의)은 클래스가 기반 클래스(부모 클래스) 중 하나에서 제공하는 메서드의 구현을 자신에게 맞게 변경할 수 있는 객체 지향 프로그래밍(OOP)의 핵심 속성입니다.오버라이딩은 상속이 그 힘을 최대한 발휘할 수 있도록 해주기 때문에 OOP에서 매우 중요한 개념입니다. 메서드 오버라이딩을 활용하면 한 클래스가 다른 클래스를 사실상 복사하여 중복 코드를 작성하지 않으면서도, 필요한 부분만 향상시키거나 커스터마이징할 수 있습니다. 즉, 메서드 오버라이딩은 상속 메커니즘의 중요한 일부라고
__init__ 메서드란?__init__은 파이썬 클래스에서 사용되는 특수한 예약 메서드로, 객체 지향 프로그래밍(OOP)에서 말하는 생성자(constructor) 역할을 합니다. 클래스로부터 객체(인스턴스)가 생성되는 순간 자동으로 호출되며, 이를 통해 해당 클래스의 속성(attribute)들을 초기화할 수 있습니다.즉, 새로운 객체가 만들어질 때 반드시 거쳐가는 초기 설정 단계라고 생각하면 이해하기 쉽습니다.__init__은 어떻게 사용할까?예를 들어 Car(자동차)라는 클래스를 만든다고 가정해 보겠습니다. 자동차는 color(