본문 바로가기

python23

파이썬 기초 - 비동기 프로그래밍 보호되어 있는 글 입니다. 2025. 3. 25.
파이썬 기초 - 멀티 프로세싱 멀티프로세싱 vs 멀티스레딩멀티스레딩은 하나의 프로세스 내에서 여러 실행 흐름을 만드는 방식으로, I/O-bound 작업(예: 파일 읽기, 웹 요청 등)에 적합하다. 하지만 Python은 GIL(Global Interpreter Lock)이라는 내부 구조 때문에, 동시에 여러 스레드가 CPU를 점유할 수 없다. 그래서 멀티스레딩으로 CPU-bound 작업(예: 수치 연산, 이미지 처리)을 처리하면 병렬화 효과가 거의 없다.반면, 멀티프로세싱은 프로세스를 여러 개 생성하여 병렬로 실행하기 때문에, GIL의 영향을 받지 않으며 CPU를 효율적으로 활용할 수 있다. 각각의 프로세스는 독립적인 Python 인터프리터와 메모리 공간을 가지므로, 완전한 병렬처리가 가능하다.멀티스레딩 vs 멀티프로세싱 시간 비교im.. 2025. 3. 25.
파이썬 기초 - 멀티 스레드 스레드스레드는 하나의 프로그램(프로세스) 안에서 실행되는 작업의 흐름 단위이다. 스레드는 같은 메모리 공간을 공유한다. CPU-bound vs I/O-bound작업 종류예시특징멀티스레드 적합성CPU-bound수학 계산, 이미지 필터링CPU 연산 중심GIL 때문에 효과 적음I/O-bound파일 읽기, 웹 요청, DB 쿼리기다림 중심멀티쓰레딩 효과 큼I/O-bound에서 멀티쓰레딩이 유리한 이유Python은 GIL(Global Interpreter Lock) 때문에 한 번에 하나의 스레드만 실행됨하지만 I/O 작업 중엔 CPU를 기다림 상태로 놔두기 때문에, 다른 스레드가 실행 가능GIL의 제약이 있어도 I/O 작업에선 병렬성 효과가 나타남기본 스레드 생성 예제import threadingimport tim.. 2025. 3. 25.
파이썬 기초 - 유용한 자료구조 - collections와 enum Collections 모듈의 확장 자료구조defaultdict - 기본값이 있는 딕셔너리존재하지 않는 키에 접근할 때 KeyError를 발생시키는 대신, 자동으로 지정한 기본값으로 초기화해주는 딕셔너리이다.데이터 그룹화나 개수 세기 같은 작업에서 조건문 없이 간결한 코드를 작성할 수 있고, 중첩 딕셔너리를 생성할 때 유용하게 사용할 수 있다.기본 사용법from collections import defaultdictintdd = defaultdict(int) # 0으로 초기화listdd = defaultdict(list) # []로 초기화setdd = defaultdict(set) # {}로 초기화intdd["key"]listdd["key"]setdd["key"]print(intdd) # defaultdi.. 2025. 3. 23.
파이썬 기초 - 메타 클래스와 추상 클래스 추상 클래스 (Abstract Class)추상 클래스는 하나 이상의 추상 메서드를 가지고, 직접 인스턴스화할 수 없는 클래스이다. 서브클래스에서 반드시 구현해야 하는 메서드를 정의할 때 사용하며, abc 모듈을 사용해 선언한다. 추상 클래스는 서브클래스에서 특정 메서드를 반드시 구현해야 할 때 사용한다. 또한 추상 클래스를 사용하면 일관된 인터페이스를 제공할 수 있다.from abc import ABC, abstractmethodclass Animal(ABC): def eat(self): return "냠냠 쩝쩝" @abstractmethod def make_sound(self): """서브 클래스에서 반드시 구현해야 하는 메서드""" pass.. 2025. 3. 23.
파이썬 기초 - 메서드 유형과 매직 메서드 인스턴스 메서드인스턴스 메서드는 클래스의 인스턴스에 대해 작동하는 가장 기본적인 메서드이다. 첫 번째 매개변수는 항상 self로, 메서드를 호출한 인스턴스 자신을 참조한다. 인스턴스에 종속적인 기능을 만들 때 사용한다. 인스턴스 변수의 값을 다루고 인스턴스마다에서 서로 다른 결과를 출력한다는 특징이 있다.class Calculator: def __init__(self, value=0): self.value = value def add(self, x): self.value += x return self.value def subtract(self, x): self.value -= x return sel.. 2025. 3. 22.
파이썬 기초 - 클래스 속성 관리와 접근 제어 명명 규칙에 의한 접근 제어파이썬은 언어 차원에서 강제적인 접근 제어 기능을 제공하지 않지만, 명명 규칙을 통해 접근 제어 표현할 수 있다.public: 클래스 내부 및 외부 어디서든 접근이 가능한 속성이나 메서드이다. 변수명에 별도의 접두사를 붙이지 않는다. (예: name)protected: 클래스 내부 및 서브클래스(상속받은 클래스)에서만 사용해야 한다는 의미를 갖는다. 하지만 관례상일 뿐, 실제로 접근이 차단되는 것은 아니다. 단일 밑줄(_)을 접두사로 붙여 표시한다. (예: _name)private: 클래스 내부에서만 접근 가능하도록 의도된 속성이다. 네임 맹글링이 적용되어 외부에서 직접 접근할 수 없도록 처리된다. 다만, 이는 보안 목적이 아니라 속성명이 내부적으로 충돌하는 것을 방지하기 위해.. 2025. 3. 20.
파이썬 기초 - Decorator 데코레이터의 기본 개념데코레이터(Decorator)는 함수 또는 클래스를 감싸서 추가적인 기능을 부여하는 기능이다. 이를 통해 코드를 수정하지 않고도 부가적인 동작(로깅, 인증, 캐싱 등)을 쉽게 추가할 수 있다.데코레이터가 필요한 이유코드 재사용: 여러 함수에 동일한 기능을 추가할 때 코드 중복을 피할 수 있다.관심사 분리: 핵심 로직과 부가 기능(로깅, 타이밍, 검증 등)을 분리할 수 있다.가독성 향상: 함수의 주요 로직을 깔끔하게 유지하면서 부가 기능을 추가할 수 있다.데코레이터의 원리Python의 함수는 함수 자체를 변수에 할당하거나, 다른 함수의 인자로 전달할 수 있다. 데코레이터는 이를 활용하여 함수를 인자로 받아 새로운 동작을 추가하는 방식으로 동작한다. def greeting(): r.. 2025. 3. 20.
파이썬 기초 - 예외처리 기본 예외 처리 문법Python에서 예외 처리는 try, except 블록을 사용하여 구현한다. 예외 처리의 기본 구조는 다음과 같다.try: # 예외가 발생할 가능성이 있는 코드 result = 10 / 0 # ZeroDivisionError 발생except: # 예외가 발생했을 때 실행할 코드 print("오류가 발생했습니다.") 하지만 위의 방식은 모든 예외를 동일하게 처리하므로 권장하지 않는다. 대신 특정 예외 유형을 지정하여 처리하는 것이 좋다.try: result = 10 / 0except ZeroDivisionError: print("0으로 나눌 수 없습니다.") 여러 예외를 처리하는 방법은 다음과 같다.try: # 코드 실행 num = int(i.. 2025. 3. 19.
파이썬 기초 - Context Manager Context ManagerPython의 Context Manager는 특정 작업을 수행할 때, 리소스를 할당하고, 사용한 후 자동으로 해제해주는 객체이다.일반적으로 with문과 함께 사용되며, 리소스 관리, 로깅, 트랜잭션 관리 등에 활용된다.기본 구문파이썬의 with 문을 사용하면 파일 입출력, 데이터베이스 연결 등 리소스를 다룰 때 자동으로 정리(clean-up) 작업을 수행할 수 있다.with 컨텍스트_매니저 as 변수: #TODO파일 다루기with 블록이 끝나면 Python이 자동으로 파일을 닫는다. # Context Manager를 사용하는 방법with open("example.txt", "r") as file: content = file.read()# 파일이 자동으로 닫힘 Cont.. 2025. 3. 19.
반응형