전체 글 1185

[python] "@dataclass"를 활용하여 클래스 작성을 빠르게 해보자

파이썬 3.7에서 도입된 @dataclass 데코레이터는 클래스 작성 방식을 획기적으로 바꾸어 놓은 기능입니다. 복잡하고 반복적인 보일러플레이트 코드(boilerplate code)를 자동화하여 개발자가 핵심 로직에 집중할 수 있도록 도와줍니다.@dataclass란 무엇인가?@dataclass는 파이썬의 dataclasses 모듈에 포함된 데코레이터로, 클래스 선언에 붙여 사용합니다. 이 데코레이터는 클래스의 필드를 기반으로 __init__, __repr__, __eq__ 등의 특수 메서드를 자동으로 생성해줍니다.기본 사용법from dataclasses import dataclass@dataclassclass Person: name: str age: int email: str위 코드는 다..

드라마 "미지의 서울"을 본 후에...

박보영의 뛰어난 연기력, 그만큼 재미있는 작품재미있다는 평가를 많이 보고서 기대를 품고 시청하게 된 드라마 "미지의 서울"의 정주행을 주말 동안 완료했습니다. 결론부터 말씀드리면, 정말로 기대를 저버리지 않는, 재미 있는 작품이었습니다.무엇보다 박보영 배우의 연기가 정말 인상적이었습니다. 일란썽 쌍둥이를 혼자서 1인 다역으로 다양한 상황에서의 감정 표현과 인물에 대한 깊은 이해가 느껴지는 연기로, 저로 하여금 몰입할 수 밖에 없게 만들었습니다.최근 드라마들에서 흔히 볼 수 있는 복잡한 가정사나 불륜과 같은 자극적인 소재 없이도 충분히 흥미로운 이야기를 풀어낸 점이 매우 인상적이었습니다. 생각보다 깔끔한 전개로 이어져서 부담 없이 시청할 수 있었습니다.주인공의 시련 극복 및 성장기, 따뜻한 가족애가 듬뿍 ..

취미/영화보기 2025.06.30

[python] 비동기 IO에서 코루틴과 태스크의 차이점은?

파이썬 비동기 I/O (AsyncIO)에서 코루틴(Coroutine) 과 태스크(Task) 는 밀접하게 관련되어 있지만, 명확한 차이가 있습니다. 이 둘의 관계를 이해하는 것이 AsyncIO를 효과적으로 사용하는 데 중요합니다.코루틴 (Coroutine)정의: 코루틴은 async def 키워드로 정의된 함수입니다. 일반 함수와 달리, 코루틴은 실행 중에 일시 중단(suspend)되었다가 나중에 중단된 지점부터 다시 시작할 수 있습니다.특징await 키워드를 사용하여 다른 코루틴의 실행이 완료될 때까지 기다릴 수 있습니다. await는 I/O 작업(네트워크 요청, 파일 읽기/쓰기 등)이 완료될 때까지 블로킹 없이 기다리게 해주어, 그동안 다른 코루틴이 실행될 수 있도록 제어권을 이벤트 루프에 반환합니다.a..

[python] asyncio.gather() 함수와 asyncio.wait() 함수의 차이는?

asyncio.gather()와 asyncio.wait()는 모두 여러 코루틴(또는 태스크)을 동시에 실행하고 그 결과를 기다리는 데 사용되는 asyncio 라이브러리의 핵심 함수입니다. 하지만 동작 방식과 사용 목적에 있어서 중요한 차이점이 있습니다.asyncio.gather(*aws, return_exceptions=False)목적: 여러 개의 awaitable 객체(코루틴, 태스크, 퓨처 등)를 그룹으로 묶어 함께 실행하고, 모든 awaitable이 완료될 때까지 기다린 후 그 결과를 수집합니다.반환 값: 모든 awaitable의 결과가 담긴 리스트를 반환합니다. 이 리스트의 순서는 입력된 awaitable의 순서와 동일합니다.예외 처리기본적으로 return_exceptions=False입니다. 이..

[python] asyncio로 비동기 코루틴으로 두 개중 하나가 종료되면, 나머지도 종료하기

비동기 코루틴 두 개 중 하나라도 완료되면 나머지 태스크를 종료하고 프로그램이 종료되도록 하려면 asyncio.wait와 asyncio.FIRST_COMPLETED를 사용하고, 완료되지 않은 태스크를 취소하는 로직을 추가해야 합니다.다음은 이를 구현한 예제 코드입니다.import asyncioasync def task_one(): print("Task One: 시작") try: await asyncio.sleep(3) # 3초 대기 print("Task One: 완료") return "Task One 완료됨" except asyncio.CancelledError: print("Task One: 취소됨") raiseasync ..

"드래곤 길들이기(How to Train Your Dragon, 2025)"를 본 후에...

기대 반, 걱정 반으로 시작한 관람예전 아이들과 함께 드래곤 길들이기 애니메이션 시리즈를 정말 재미있게 보았던 즐거운 기억이 있어, 이번 실사 영화에 대한 기대가 컸습니다. 아내를 설득해 주말 점심 시간에 극장을 찾았는데, 다행히 다른 관객들이 많지 않아 여유롭게 감상할 수 있었습니다.여전히 매력적인 비행 장면드래곤 길들이기 하면 가장 먼저 떠오르는 것이 바로 히컵과 투슬리스가 함께 하늘을 나는 장면이었습니다. 애니메이션에서도 그 장면들이 정말 인상적이었는데, 실사화된 이번 영화에서도 역시 제게는 가장 멋진 장면들이었습니다.여러 시행착오를 거치며 비행을 익혀가는 과정 자체도 충분히 흥미진진했지만, 개인적으로는 자유롭게 하늘을 날아다니는 히컵과 투슬리스의 모습을 더 많이 보여주었으면 하는 아쉬움이 남았습..

취미/영화보기 2025.06.23

[python] weekday를 각 OS 언어별 문자열로 변환하는 방법

파이썬에서 날짜의 요일을 각 운영체제(OS) 언어(로케일)별 문자열로 바꾸려면, 주로 locale 모듈과 strftime 메서드를 조합해 사용합니다.locale 모듈과 strftime 사용locale.setlocale(locale.LC_TIME, '로케일명')으로 원하는 언어 환경을 설정합니다.datetime 객체의 strftime('%A') 또는 strftime('%a')를 사용하면, OS 로케일에 맞는 요일 문자열을 얻을 수 있습니다.from datetime import datetimefrom locale import LC_TIME, setlocaledt = datetime(2025, 6, 18)# 영어(미국)setlocale(locale.LC_TIME, 'en_US.UTF-8')print(dt.st..

OTT 드라마 "광장"을 본 후에...

이번에 최근 넷플릭스에서 화제가 된 '광장'을 정주행 해보았습니다. 소집섭 주연의 "광장"은 네이버 웹툰에서 인기를 얻었던 원작을 실사화한 것으로 알려져 있어, 기대감을 가지고 정주행을 시작했습니다.그러나 7화까지 모든 에피소드를 완주한 후의 솔직한 감상을 말씀드리자면, 아쉬움이 많이 남았습니다. 함께 시청한 아내 역시 비슷한 의견을 보였는데, 기대했던 만큼의 재미를 느끼기 어려웠다는 것이 공통된 의견이었습니다.작품의 기본 줄거리는 비교적 단순합니다. 주인공이 동생의 죽음에 분노하여 범인을 찾아 나서며, 그 과정에서 동생과 악연으로 역여힜던 악당?들을 처단해 나간다는 복수극이었습니다. 단순한 이야기 구조는 문제가 되지 않습니다. 오히려 명확한 주제 의식과 간결한 구성이 장점이 될 수 있죠. 하지만 그렇기..

취미/영화보기 2025.06.18

[python] requests - 응답을 UTF-8로 지정하여 받는 방법

requests 기본 사용법파이썬 requests 패키지로 웹 페이지의 HTML 소스를 가져올 때, 기본적으로 .text 속성을 사용하면 HTML 소스가 문자열로 반환됩니다. 이때, requests는 응답의 헤더에서 인코딩 정보를 자동으로 감지해 해당 인코딩으로 디코딩합니다.import requestsurl = "https://www.wikipedia.org/"response = requests.get(url)html = response.text # 자동 인코딩 감지 및 디코딩print(html)UTF-8로 강제 인코딩 지정간혹 서버가 인코딩 정보를 잘못 제공하거나, 한글 등 특수문자가 깨지는 경우가 있습니다. 이럴 때는 .encoding 속성을 직접 'utf-8'로 지정해줄 수 있습니다.import ..

ctypes.addressof() 함수를 이용하여 bytes 객체를 만드는 방법

Python에서 ctypes.addressof() 함수의 반환값(메모리 주소)을 이용해 일정 길이만큼 bytes 객체를 만드는 방법을 알아 보겠습니다.방법 1: ctypes.string_at() 사용 (권장)import ctypes# 예시: 배열 생성arr = (ctypes.c_int * 5)(1, 2, 3, 4, 5)addr = ctypes.addressof(arr)# 주소에서 특정 길이만큼 bytes로 읽기length = ctypes.sizeof(arr) # 또는 원하는 길이data = ctypes.string_at(addr, length)print(type(data)) # print(data.hex()) # 0100000002000000030000000400000005000000방법 2: ct..

728x90