나는 이렇게 학습한다/Language 51

Python threading.local 와 ContextVar 비교

threading.local 와 ContextVar 는 둘 다 데이터를 격리하고 동적으로 할당한다는 점에서 유사한 목적을 가지고 있지만 사용되는 상황과 특징이 조금 다르다. 이 글에서는 둘의 공통점과 차이점을 예제 코드와 함께 비교해보고자 한다. threading.local threading.local 은 각 스레드마다 고유한 데이터를 가질 수 있게 해준다. 아래 예제 코드를 살펴보자. import threading # threading.local 객체 생성 thread_local_data = threading.local() def 스레드_울음소리(): thread_local_data.value = "끼룩끼룩!" def 스레드_동물호출(): value = getattr(thread_local_data, ..

Python _ setup.py 의 역할과 사용법

setup.py는 파이썬 프로젝트 및 패키지의 빌드, 패키징 및 배포를 관리하는 스크립트 파일이다. 이 파일은 주로 setuptools 및 distutils 라이브러리를 사용하여 파이썬 패키지 정보와 설정을 정의한다. setup.py의 주요 역할 패키지 정보 정의: 패키지의 이름, 버전, 저자, 라이선스 등의 메타데이터를 정의 의존성 관리: 패키지의 작동을 위해 필요한 다른 파이썬 패키지들을 명시 빌드 및 배포 명령 제공: python setup.py install, python setup.py sdist 등의 명령어로 패키지를 빌드하거나 설치 엔트리 포인트 지정: 특정 스크립트나 함수를 명령어로 실행할 수 있게 설정 setup.py 예시 from setuptools import setup, find_p..

Python _ Decimal 모듈로 부동 소수점 문제 해결하기

Decimal 이란? Decimal은 '부동 소수점 문제'를 해결하고 소수점을 정확하게 표현하기 위해 사용하는 Python 자료형이다. 컴퓨터에서는 소수를 이진수로 표현하다 보니, 0.1과 같은 값이 정확하게 표현되지 않을 수 있다. 이러한 문제 때문에 금융, 회계 등 정확한 계산이 필요한 경우에는 Decimal을 사용해야 한다. 예를 들어, 파이썬에서 소수형을 그대로 사용하면 다음과 같은 부동 소수점 문제가 발생할 수 있다. value = 0.1 + 0.2 print(value) # 출력: 0.30000000000000004 하지만 아래처럼 Decimal 모듈을 사용하면 이런 문제를 피할 수 있다. from decimal import Decimal value = Decimal('0.1') + Decim..

JavaScript _ 콜백 함수를 알아보자

들어가며 자바스크립트에서 비동기 프로그래밍의 기초 개념 중 하나인 콜백 함수에 대해 알아보자. 본 글에서는 콜백 함수의 개념부터 동기 콜백과 비동기 콜백의 차이, 콜백 지옥과 한계, 그리고 콜백 함수 작성 팁까지 다루겠다. 또한 콜백 함수의 대안으로 선호되는 프로미스와 async/await에 대해서도 간략하게 소개하겠다. 콜백 함수란? 콜백 함수란 다른 함수에 인자로 전달되어, 어떤 작업이 완료된 후에 실행되는 함수이다. 콜백 함수는 자바스크립트에서 흔히 사용되는 패턴으로, 특히 비동기 작업을 처리할 때 유용하다. 비동기 작업이란, 작업의 실행과 완료 시점이 일치하지 않는 작업을 말하는데, 예를 들어 서버에서 데이터를 가져오는 작업이나 타이머를 사용한 작업 등이 비동기로 이루어질 수 있다. 콜백 함수의 ..

Python _ zoneinfo 사용법, ZoneInfo 와 pytz 차이

ZoneInfo 을 사용하면 기존 pytz를 사용하지 않고도 타임존을 사용할 수 있다! (*ZoneInfo 는 Python3.9 버전 이상부터 사용가능) 'ZoneInfo' vs 'pytz' 그렇다면 ZoneInfo 와 pytz 는 어떤 차이가 있을까? 우선 ZoneInfo 는 따로 설치할 필요가 없는 빌트인 클래스이므로 다음처럼 간단하게 불러올 수 있다. from zoneinfo import ZoneInfo ZoneInfo 와 pytz 를 각각 사용해 현재시간을 가져와보자. pytztz = timezone("Asia/Seoul") zonetz = ZoneInfo("Asia/Seoul") print(datetime.datetime.now(tz=pytztz).tzname()) print(datetime.d..

Python _ Protocol로 인터페이스 만드는 방법

Python에서 인터페이스를 구현하는 방법에는 여러 가지가 있지만 이번 글에서는 Protocol을 이용한 방법을 소개한다. 인터페이스란? 쉽게 말해 외부와 소통하기 위해 필요한 메서드를 정의한것이다. 하위 모듈들은 해당 인터페이스에 맞춰 기능을 구현한다. Protocol 사용법 아래 코드를 보자. from typing import Protocol class 감정(Protocol): def 기쁘다(self) -> str: ... def 슬프다(self) -> str: ... class 사람: def 기쁘다(self) -> str: return "기뻐!" def 화나다(self) -> str: return "화나!" class 사회생활: def 시작(self, 사람: 감정) -> None: self.사람 =..

Python _ TypedDict를 사용하는 이유(feat. mypy)

Python도 Type을 확인한다구! 파이썬은 타입 힌트를 제공함으로써 해당 데이터가 어떤 타입을 갖고 있는지 알 수 있다. 다만 파이썬은 타입을 강제하지 않기 때문에 일반 런타임 환경에서는 타입의 정상여부를 알기 어렵다. 때문에 타입이 정상인지 확인하기 위해 mypy 나 pyright 같은 정적 검사 도구를 이용한다. 하지만 그럼에도 애매한 경우가 있는데 바로 dict와 같은 value들이 다양한 타입을 가질 경우이다. dict value들의 타입을 일일이 확인하고 명시하기란 매우 귀찮은 일이다. 때문에 Dict[str, Any] 처럼 value에 해당되는 타입을 Any로 넘기는 경우가 많다. 하지만 이는 바람직하지 않다. Any가 어떤 문제를 일으키는지 먼저 살펴보고, 이에 대한 해결책으로서 Type..

Python _ dict의 keys()처럼 dataclass에서 속성 목록 가져오기

파이썬에서 객체를 만드는 방법 중에 dataclass가 있다. @dataclass 데코레이터를 사용하면 타입 유형을 명시한 객체를 만들 수 있다. dataclass를 만드는 코드는 아래와 같다. from dataclasses import dataclass @dataclass(frozen=True) class Dataclass: a:int b:int c:int data = Dataclass(a=1,b=3,c=5) print(data) # 출력 : Dataclass(a=1, b=3, c=5) print(data.a) # 1 print(data.b) # 3 print(data.c) # 5 이렇게 만든 객체는 타입 유형을 명시하고 싶을 때나 DTO, 값 객체 등의 불변 객체로도 사용할 수 있다. dataclas..

Python _ @dataclass 사용법과 타입 확인

파이썬에서는 @dataclass를 통해 데이터의 타입을 명시하고 안정적으로 다룰 수 있습니다. 이 글에서는 간단한 사용법을 소개하고 타입 확인까지 해보겠습니다. @dataclass 사용법 먼저 다음처럼 코드를 작성합니다. from dataclasses import dataclass @dataclass() class Data: name: str int: int dict: dict name은 str, int는 int, dict는 dict로 타입을 지정하였습니다. 이어서 데이터를 만들어보겠습니다. data1 = Data( name = "변덕순", int = 1, dict = {"a":"b"} ) Data클래스를 활용해 data1 이라는 인스턴스를 만들었습니다. print로 name과 타입을 출력해보겠습니다. ..

Python _ 런타임 중에 스크립트 파일 실행하기

스크립트는 보통 직접 명령어를 입력해 실행합니다. 하지만 runtime 환경에서 스크립트 파일을 실행해야할 때도 있습니다. 그런 경우에는 개발자가 직접 터미널에 스크립트 실행 명령어를 치는 것이 아닌, 미리 작성된 파이썬 코드에 의해 스크립트가 실행되도록 해야합니다. 이번 글에는 OS를 사용한 스크립트 실행 방법을 알려드리겠습니다. OS import os os.system("ls") 방법은 아주 간단합니다. os를 import 하고 system 메서드를 사용해 명령어를 안에 넣습니다. 그리고 실행을 해보면 그 결과 값도 함께 보여줍니다. (ls 는 해당 디렉토리를 보여줍니다) >>> project 현재는 project 폴더만 보이네요 하지만 스크립트를 실행하기 위해서 폴더 내로 이동해야 한다고 가정해봅시..