콘텐츠로 건너뛰기
Home » 파이썬

파이썬

소프트 키워드(Soft Keyword)

키워드는 예약어(reserved word)라고도 하며, 문법적으로 특별한 의미를 지니기 때문에 변수나 함수의 이름으로 사용하는 것이 제한되는 단어들을 말합니다. 예를 들어 if, for, while 과 같은 단어들은 특정한 구문을 표현하기 위해 사용하는 단어들이고, 이들 단어는 변수명으로 사용하려는 경우, Syntax Error가 발생하면서 정상적으로 처리되지 않습니다. 키워드들은 보통 아주 일상적인 단어로 표현되는 경우가 많으며, 어떤 경우에는 흔히 자기도 모르게 변수명으로 사용하려고 시도하는 경우가 생길 수 있습니다. 게다가 언어의 역사가 진행되는 과정에서 새로운 기능이 추가되고 이를 지원하기 위한 문법이 추가될 수 있습니다. 이 경우에는 새로운… 더 보기 »소프트 키워드(Soft Keyword)

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

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

메타 클래스와 추상 클래스

사실 ‘객체 지향’이라는 단어는 프로그래밍 관련 커뮤니티나 여러 글에서 어렵지 않게 접하게 되지만, 객체 지향 프로그래밍에서 가장 중요하다고 하는 ‘클래스’의 개념을 명확하게 이해하기는 쉽지 않습니다. 애초에 추상적인 개념이니 명확하게 이해하는 것이 이상한 거라고 봐야 할까요? 그런데 파이썬이나 다른 객체 지향 언어를 공부하다보면 ‘메타 클래스’니, ‘추상 클래스’니 하는 용어들이 눈에 띄곤 합니다. 아니, 클래스도 뭔지 감이 잘 안오는데 추상 클래스는 뭐고 또 메타 클래스는 뭐란 말일까요? 일단 파이썬에서 출발해보죠. 클래스에 대해서 간단히 짚고 넘어가겠습니다. 우선 클래스가 무엇인지를 이해하기 위해서는 클래스를 설명하기위해… 더 보기 »메타 클래스와 추상 클래스

Python 101 – 클래스

이 글을 읽으시는 파이썬을 공부하는 여러분은 아마도 들어보셨겠지만, 파이썬은 객체 지향 언어입니다. 객체 지향 언어는 객체 지향 프로그래밍이라는 패러다임을 따르는 방식으로 설계된 언어입니다. 그리고 클래스는 어떤 객체를 정의해놓은 청사진과 같다고들 합니다. 그래서 클래스가 무엇인지를 이해하려면 먼저 객체가 무엇인지를 알아야겠네요. 위키 백과에서 객체에 대해 찾아보면 다음과 같은 설명을 찾을 수 있습니다.

컴퓨터 과학에서 객체 또는 오브젝트(object)는 클래스에서 정의한 것을 토대로 메모리에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 변수, 자료 구조, 함수 또는 메소드가 될 수 있다.

여러 편집자들이 고민하여 작성한 설명이겠지만, 이 설명만 들어서는 객체가 무엇인지 알기가 어렵습니다. 사실 객체의 개념은 워낙 추상적이라 일상의 언어로 정확하게 설명하기란 어렵습니다. 그래서 대략의 어설픈 이해를 바탕으로 접근해서, 객체가 어떤 식으로 사용되고 또 어떻게 만들 수 있는지를 받아들이는 편이 좋을 듯 합니다. 사실 학문적으로 엄밀하고 정확한 이해보다는 어떻게 만들고 사용할 수 있는지를 아는 것이 더 중요하니까요.

더 보기 »Python 101 – 클래스

Python 101 – 함수

프로그래밍에서 함수는 핵심적인 개념이지만, 언어나 상황마다 용어가 다르기도 하고 정의도 모호해서 “함수는 이것이다!”라고 딱 잘라 말하기는 사실 힘듭니다. 위키 백과의 정의만 찾아봐도요.

함수(function), 서브루틴(subroutine), 루틴(routine), 메서드(method), 프로시저(procedure)는 소프트웨어에서 특정 동작을 수행하는 일정 코드 부분을 의미한다.

함수는 대부분의 프로그래밍 언어에서 지원하는 기능으로, 하나의 큰 프로그램을 여러 부분으로 나누어주기 때문에 같은 함수를 여러 상황에서 여러 차례 호출할 수 있으며 일부분을 수정하기 쉽다는 장점을 가진다.

https://ko.wikipedia.org/wiki/함수_(컴퓨터_과학)

가장 넓은 의미에서 함수를 정의하자면 “1개 이상의 동작을 묶어놓은 것”이라고 할 수 있습니다. 즉 일련의 동작을 하나의 단위로 묶어두고, 원하는 만큼 여러 차례 호출하여 사용하는 것이죠. 그렇게해서 전체 코드의 양을 줄일 수 있고, 또 공통된 동작에서 어떤 변경이나 수정이 필요할 때, 소스 코드의 이곳 저곳이 아닌 한 부분만 수정하면 되기 때문에 유지 보수 관점에서도 노력을 아낄 수 있죠.

이미 우리는 파이썬에서 함수를 사용하는 법을 알고 있습니다. 어떤 문자열이나 객체의 내용을 출력하는 print() 나 사용자로부터 문자열을 입력받는 input() 과 같은 동작은 파이썬이 미리 제공하는 함수입니다. 이렇게 별다른 사전 준비 없이 바로 사용할 수 있는, 파이썬이 기본적으로 제공하는 함수를 내장함수(builtin function)라고 합니다. 우리는 내장 함수를 사용하는 것외에 우리가 원하는 동작을 함수로 만들어서 사용할 수도 있습니다. 이런 개념을 내장함수에 상대적인 개념으로 사용자 정의 함수 (user defined function)이라고 합니다.

더 보기 »Python 101 – 함수

Python 101 : 맵, 필터와 반복문

지난 글에서는 리스트 및 그와 비슷한 집합 형태의 자료형을 살펴보면서 “반복 가능”이라는 개념에 대해서 소개했다. 반복 가능하다는 특성은 꼭 리스트가 아니어도 여러 개의 값을 포함하는 집합/모임(collection)의 성질을 갖는 다양한 자료형에서 나타나는 성질이며, 이러한 특성을 갖는 객체들은 그 내부 구현에 상관없이 for 루프나 comprehension 축약 문법에 적용될 수 있다.

더 보기 »Python 101 : 맵, 필터와 반복문

Python 101 : 리스트

지난 글에서 파이썬에서 사용되는 가장 기본적인 값의 유형에 대해 살펴보았다. 오늘은 리스트에 대해서 이야기해보려고 한다. 리스트는 여러 개의 값이 연속적으로 배치된 일종의 집합이다. 다른 프로그래밍 언어에서는 배열(Array)이라고 하기도 한다. 사실 배열과 다른 리스트라는 자료 구조가 별도로 존재하기는 하는데 (연결 리스트 같은 걸 들어본 적이 있을지도 모르겠다.) 파이썬의 리스트는 C의 배열과 크게 다르지 않다고 생각하면 된다.

더 보기 »Python 101 : 리스트

파이썬으로 구현하는 채팅앱

파이썬으로 터미널 상에서 돌아가는 간단한 채팅앱을 구현해보고자 한다. 채팅 앱은 서버와 클라이언트로 구성되며, 각각의 클라이언트가 보내는 메시지를 모든 클라이언트에게 되돌려주면 된다. 이 때 일반적인 에코서버 구현과 다른 점은, 대화 메시지가 오고 가는 방식은 비동기적이기 때문에 실제로는 서버와 클라이언트 모두 각각 수신용과 발신용의 2개의 소켓을 준비해야 한다는 점이다. 어쨌든 이것은 ZMQ를 사용하면 손쉽게 해결할 수 있다. 다음으로 채팅앱에서 어려운 점은 일반적인 input() 함수에 관한 것이다. 채팅앱은 키보드를 통해 메시지를 입력하는 중간에도 수신한 메시지를 출력할 수 있어야 한다. 그런데 input() 함수는 블록킹함수이기… 더 보기 »파이썬으로 구현하는 채팅앱

Subprocess 모듈 사용법 (2021 업데이트)

subprocess 모듈을 사용하는 방법에 대해 정리한 이전 글이 있는데, 이 글도 2021년 기준으로 벌써 6년전 글이고, 실제로 글이 발행됐을 때쯤에 파이썬 3.5가 나오면서 subprocess 모듈이 다시 업데이트 됐었다. 지금은 그 글에서 설명하고 있는 여러 API들은 레거시로 분류되어 있다. 그래서 좀 늦은 감은 있지만 subprocess 모듈의 사용법을 새롭게 정리해 보고자 한다. 급한 사람들을 위한 요약 딱 두 가지이다. 이제 subprocess.run() 함수만 쓰면 된다. run() 의 리턴값인 객체에서 리턴코드, 출력 내용 등을 확인할 수 있다. 물론 함수에 전달하는 추가적인 파라미터에 따라 여러가지… 더 보기 »Subprocess 모듈 사용법 (2021 업데이트)