콘텐츠로 건너뛰기

async for 구문의 작동 원리

비동기, 즉 작업이 완료되지 않더라도 리턴하는 함수는 프로그래밍에서 꽤 오랜 역사를 가지고 있는 아이디어입니다. . 비동기 함수는 ‘동시성’ 혹은 ‘병렬처리’를 위해 고안된 개념이기도 하고요. asyncio 가 비동기 처리에 관한 라이브러리라는 것은 그 이름부터 이미 알려주고 있습니다. 그런데 다시 말하지만 ‘비동기’는 동시성이나 병렬처리를 위해 고안된 개념이라는 것입니다. 컴퓨터 공학 분야에서 병렬처리나 분산처리에 대한 논의는 오래전부터 있었고, 지금 널리 사용되고 있는 다중 스레드의 개념도 이때 등장하여, 여러 상황이나 조건들에 의해 채택되고 지금까지 이어지고 있는 것입니다. 거꾸로 말하면 동시성 처리를 위해서 반드시 스레드만… 더 보기 »async for 구문의 작동 원리

Textual 강좌 3 – 위젯과 DOM 쿼리

위젯은 화면의 일정 영역을 관리하는 역할을 담당하는 구성 요소라고 정의된다. 위젯은 앱이 하는 것과 똑같은 방식으로 이벤트에 응답하고, 하위 위젯을 포함하여 계층 구조를 이룰 수도 있으므로 일종의 미니앱이라고 생각할 수 있다. DOM 쿼리 Textual에서 위젯의 UI 스타일은 CSS를 통해서 설정하게 된다. 해석한 CSS 내의 특정한 스타일을 위젯에 적용하기 위해서는 CSS 셀렉터로부터 그에 매칭하는 위젯을 선택할 수 있어야 함을 의미한다. 따라서 Textual에는 웹브라우저와 마찬가지로 DOM 쿼리를 통해 요소를 찾는 기능을 기본적으로 제공한다. query_*로 시작하는 메소드들을 사용하는데, 가장 많이 사용하는 메소드는 query_one… 더 보기 »Textual 강좌 3 – 위젯과 DOM 쿼리

Textual – 프로그레스 바 추가하기

Textual에서 시간이 오래 걸리는 작업을 처리하면 UI의 반응성이 떨어지는 상황이 발생한다. 이 때 취할 수 있는 UI 적인 개선으로는 몇 가지 방법이 있는데, 그 중 가장 직관적인 것이 진행률을 보여주는 것이다. 진행률을 보여주는 프로그레스 바는 원래 Rich에도 포함되어 있는데, 그 중 기본적인 유형을 Textual에도 사용할 수 있게 되었다. ProgressBar 위젯을 생성하여 화면에 추가한 다음, total 속성을 전체 일의 양으로 지정하고, 매 작업을 처리할 때마다 update() 나 advance()를 사용하여 진행된 분량을 늘려주면 프로그레스바는 그에 따라 UI 내용을 자동으로 업데이트한다. 이러한 사용방법은… 더 보기 »Textual – 프로그레스 바 추가하기

Textual 강좌 2 – 이벤트

사용자가 앱에서 키보드의 키를 누르거나, 마우스로 버튼등의 UI 위젯을 클릭하는 등의 조작을 앱은 그에 따른 어떤 동작을 수행하여 사용자 입력에 반응해야 한다. Textual에서 사용자 조작은 이벤트로 취급되어 해당 이벤트를 처리하는 이벤트 핸들러에 의해 미리 지정된 동작이 수행된다. 이벤트의 처리는 메시지 시스템이라는 매커니즘을 통해 처리된다. 이 방식은 웹에서 자바스크립트로 이벤트를 처리하는 것과 유사한 방식으로, 모든 이벤트는 메시지로 발행되고, 메시지를 수신할 수 있는 객체가 해당 메시지를 처리하게 된다. Textual이 내부적으로 미리 정의해놓은 메시지 외에도 커스텀 메시지를 정의하고 발행할 수 있으며, 이는 특정한… 더 보기 »Textual 강좌 2 – 이벤트

Textual 강좌 1 – App 구성하기

Textual은 터미널 환경에서 복잡한 UI를 가진 TUI앱을 빠르게 개발할 수 있는 애플리케이션 개발 프레임워크이다. 다른 의존성은 거의 필요하지 않으며, 모든 플랫폼의 터미널에서 작동한다. TUI앱의 가장 큰 장점은 SSH와 같은 원격 터미널에서도 UI를 갖춘 앱을 실행할 수 있다는 것이다. 파이썬에서 GUI를 구현하기 위한 여러 라이브러리나 프레임워크를 몇 년간 찾아 보았지만, 이 만큼 사용하기 편리하고 멋진 도구는 만난적이 없었다. Textual 홈페이지의 가이드 중 일부를 가져와서 간단한 강좌의 형식으로 소개해보고자 한다. 앱 구성하기 Textual 앱을 구성하고 실행하는 방법은 다음과 같다. Textual은 간단한 텍스트… 더 보기 »Textual 강좌 1 – App 구성하기

프로젝트 오일러 92

어떤 자연수의 각 자리 숫자를 제곱하여 그 합을 구하는 계산을 반복하면 1이 되는 경우가 많다. 이런 숫자들은 happy number 라고 부른다. 행복하지 못한 숫자들은 계산을 반복하는 과정에서 89를 만나게 되고, 89는 다시 몇 단계의 과정을 거쳐 89가 되어 영원히 1이 될 수 없다. 각 자리 숫자의 제곱의 합은 간단히 구할 수 있기 때문에 간단한 코드로 어떤 숫자가 행복한지 여부를 알아내는 것은 쉽지만, 문제는 그 범위가 1천만 개나 된다는 점이다. 간단한 작업이지만 백만 번을 넘게 반복한다면 제법 오랜 시간이 걸릴 것이다.… 더 보기 »프로젝트 오일러 92

소프트 키워드(Soft Keyword)

키워드는 예약어(reserved word)라고도 하며, 문법적으로 특별한 의미를 지니기 때문에 변수나 함수의 이름으로 사용하는 것이 제한되는 단어들을 말합니다. 예를 들어 if, for, while 과 같은 단어들은 특정한 구문을 표현하기 위해 문법적으로 특별한 의미를 지니도록 지정되어 있으며, 이러한 단어를 변수명으로 사용하려는 경우, Syntax Error가 발생하면서 정상적으로 처리되지 않습니다. 그런데 문법을 읽고 이해하기 쉽게 만들기 위해서 이러한 키워드들은 보통 아주 일상적인 단어로 표현되는 경향이 있습니다. 그런데 많은 사람들이 자신이 짓는 변수의 이름도 일상적이거나 일반적인 단어를 그대로 사용하는 경향이 있습니다. 또한 언어의 역사가 진행되는… 더 보기 »소프트 키워드(Soft Keyword)

파이썬에서 싱글톤 구현하기

싱글톤은 어떤 클래스의 인스턴스가 하나만 만들어지도록 강제하는 디자인 패턴의 한 종류입니다. 싱글톤은 시스템 전체에 걸쳐 단 하나의 객체 인스턴스만 있으면 될 때 사용할 수 있으며, 전역 변수를 사용하지 않고도 특정한 객체를 어디서나 참조할 수 있게 되는 장점이 있습니다. 싱글톤을 구현하는 일반적인 방법으로는 1) 생성자를 private하게 만들어서 다른 객체가 직접적으로 호출할 수 없도록 하고, 2) 별도의 정적 메소드를 제공하여 싱글톤 객체를 획득할 수 있게 합니다. 싱글톤 구현방법 파이썬에서는 생성자를 숨길 수 없기 때문에, 생성자 그 자체가 싱글톤 객체를 반환하도록 하면 됩니다.… 더 보기 »파이썬에서 싱글톤 구현하기