반응형

프로그래밍 215

파이썬3 개별 프로젝트를 위한 가상환경 설정(윈도우)

파이썬을 설치한 후 다양한 패키지들을 설치해봤을 것이다. 주로 pip으로 설치하는데 파이썬은 개발주기도 빠르고 패키지도 패키지 버전에 따라서 호환이 안되거나 하기 때문에 패키지 버전을 신경써줘야 한다. 예를 들어 여러개의 프로젝트를 하다가 어떤 프로젝트에서 특정 패키지의 최신 버전이 필요하다고 해서 함부로 업데이트를 한다면 해당 패키지를 사용하는 다른 프로젝트가 먹통이 될 수도 있을 것이다. 이 밖에도 다양한 이유로 파이썬에서는 가상환경이 유용하기 쓰인다. 파이썬 3.3부터인가? 그 전까지는 virtualenv를 설치해서 독립된 개발환경을 설정할 수 있다. 3.3이후로는 venv라는 표준라이브러리가 이 역할을 대신한다. 우선 간단히 사용방법을 정리해보자. 가상환경 만들기 명령 프롬프트에서 다음 명령을 입..

정규표현식 탐욕적 수량자에 대한 이해

탐욕적 수량자, 또는 욕심쟁이(greedy) 수량자라고도 한다. 이와 반대되는 것은 게으른(lazy) 수량자이다. 수량자에 대해서는 이전에 잠깐 언급했었다. 말 그대로 몇 개를 선택할지 결정하는 것으로 *, +, ?, {n}, {n,}, {n,m}등이 있다. 이런 수량자는 기본적으로 탐욕적(greedy) 수량자이다. 그렇다면 탐욕적이란 의미가 수량자에 어떻게 적용되는지 알아보자. 여기서 탐욕적이라 함은 백트래킹(backtracking) 알고리즘을 사용한다. 설명하자면 우선 정규 표현식을 검사할 문자열에서 전체를 한 덩어리로 보고 정규표현식과 매치되는지를 검사한다. 만약 매치되지 않는다면 끝에서 한 문자를 뺀후 다시 검사한다. 이렇게 뒤에서 하나씩 빼가면서 맞을 때 까지 검사해 나간다. 탐욕적 수량자 *이..

구조체 멤버 맞춤(struct member alignment) C++

아시는 분들도 계시고 모르시는 분들도 계실테지만 오늘은 구조체에 대한 내용을 분석해 보려합니다. 구조체는 일종의 데이터의 집합입니다. 그리고 클래스가 구조체의 업그레이드라고 아시고 계실 겁니다. 따라서 여기서 다루는 내용은 클래스에도 해당되는 내용입니다. 구조체 멤버 맞춤이란 구조체에 선언되는 멤버들이 메모리에 할당될 때 어떻게 할당되는가를 말합니다. 비유하자면 필통에 연필, 자, 지우개 등을 넣을 때 어떤 순서로 어떻게 넣는지에 대한 것과 비슷합니다. 데이터 구조 정렬의 정의 우선 한가지 실험을 먼저 해보겠습니다. Visual Studio c++ 환경입니다. 구조체의 크기 실험 ▼다음은 위 코드의 결과입니다. 코드에 정위된 두 구조체는 멤버의 선언 순서만 다르지 멤버 구성은 동일합니다. 그럼에도 구조체..

프로그래밍/cpp 2017.03.26

캐스팅 연산자 static_cast C++

오늘부터 2,3회에 걸쳐 C++의 캐스팅 연산자를 정리해 보려 합니다. 사실 캐스팅 연산자는 C언어에서 사용하는 ( ) 연산자가 있습니다. 단순하게 변환하고자 하는 변수가 있다면 " (type)변수 " 이렇게 써주면 되죠. 누구나 아실거라 생각합니다. C언어의 캐스팅은 이렇게 단순하고 캐스팅도 아주 자~알 됩니다. 그럼에도 C++에서는 캐스팅 연산자를 여러개로 준비해 놨습니다. 그럼 왜 캐스팅 연산자를 여러개로 나눠나서 골치아프게해~! 하고 그냥 C에서 쓰던데로 쓰실 수도 있겠습니다. 하지만 C언어에서 사용하던 캐스팅 방법은 안정성이 없습니다. 예를 들어 보죠. C언어 스타일의 캐스팅 연산 int x = 3;int * p = &x;printf("%c\n", (char)x);printf("%d\n", (c..

프로그래밍/cpp 2017.03.24

파이썬 정규 표현식 match, search 함수, group

앞서 파이썬에서 정규표현식을 어떻게 사용하는지 간단하게 살펴보았다. findall 함수를 사용하였는데 이 함수 외에도 검색을 위한 match, search함수가 있다. 또, 검색된 패턴을 다른 문자열로 치환해주는 sub 함수도 있다. 우선 여기서는 match, search만 살펴볼 것이다. 우선 앞서 다루었던 findall 함수의 특색을 살펴보자. 이 함수는 겹치지 않는 매칭을 모두 찾는다는 특징이 있다 겹치지 않는다는 의미는 다음과 같은 것이다. 이렇게 findall 함수는 찾는 문자열 간에 겹치지 않도록 모든 문자열들을 찾는다. 그리고 찾는 문자열들을 리스트로 반환해 주는 특징이 있다. 이제 설명할 match함수와 search함수는 찾는 방식도 findall함수와 차이가 있지만 반환하는 값도 차이가 ..

파이썬 정규표현식 기초

정규표현식, 쉽게 말해서 문자집합의 패턴이 일치하는지 검사하기 위해서 사용하는 표현이다. 패턴이라 하면 구체적인 단어가 아니라 예를들어 "알파벳으로 시작하는 4문자로 이루어진 단어" 또는 "문자로 시작하되 숫자로 끝나는 문자집합" 같은 표현이다. 이런 패턴을 표현한 식이 정규식, 즉 정규 표현식이다. 정규표현식의 쓰임새는 문자를 다루는 프로그램에서는 매우 광범위 하기 때문에(전화번호 찾기, 성이 kim인 사람 찾기, 숫자가 포함된 단어 제외하기) 대부분의 언어에서 정규표현식을 위한 라이브러리가 존재한다. 파이썬 역시 re라는 모듈을 import 하면 쉽게 정규 표현식을 사용하여 패턴을 검사할 수 있다. 왜 사용해야하나?물론 프로그램 마다 검색할 패턴은 정해져 있기 때문에 특정 패턴에대한 검사를 하는 함수..

전위 연산, 후위 연산자 c++

C++을 사용하면서 항상 느끼는 것은 끝이 없다는 것이다. 처음에 C++을 어느정도 배운 후에는 배운 것에서 조금씩 덧붙여 가면 점점 쉬워 지겠지? 하는 생각이었다. 하지만 내 예상과 달리 C++은 사용할수록 많은 생각을 요구하고 반복적인 망각과 되새김 속에서 달팽이 처럼 힘겹게 기이가는 느낌이다.그래도 힘 겨운 만큼 성취감도 크다. 물론 적성에 안맞는 사람들에게는 비추다. 차라리 파이썬과 같은 언어가 문법도 간단해서 일반적으로는 코드를 작성하기는 깔끔하고 훌륭하다. 오늘은 전위 증가, 후위 증가에 대해서 끄적여 보려하는데 사실 이 연산자들은 파이썬, 자바등 다른 언어들도 가지고 있다. 이해하기에도 어렵지 않고 그다지 쓸 내용은 없을 듯 보인다. 그럼에도 오늘 쓸만한 주제를 억지로 끄집어 내 보았다. 연..

프로그래밍/cpp 2017.03.20

연산자 오버로딩 정리 c++

앞서 변환생성자와 명시적 변환에 대한 내용을 살펴보았다. 이번에는 연산자 오버로딩의 종류에 대한 내용을 정리할 것인데 앞서 주제와 연관된 내용이 있으므로 주목해서 보도록 하자. 그 전에 Scalar type과 non-Scalar type이 무엇인지 생각해 보면 도움이 된다. vector는 자주 들어봤을 것이다. 보통 스칼라(scalar)는 하나의 속성만 가진 값, 벡터(vector)는 여러 속성을 가진 값으로 이해할 수있다. type의 관점에서 스칼라(Scalar)라고 하면 하나의 값에 대한 정보만 가지고 있는 type을 말한다. C언어에서는 int, char, long, float, double 등 하나의 수로 표시될 수 있는 기본타입을 말한다. 참고 : https://msdn.microsoft.com..

프로그래밍/cpp 2017.03.19

파이썬 여러 버전을 설치했을 때 팁

현 시점에서 파이썬으로 개발을 할 때 고려해야할 사항 중에 어떤 버전을 사용할 것인가 결정해야 한다. 2.x버전과 3.x버전을 엄연히 다르다. 일반적으로 버전의 젤 첫 번째 숫자는 호환성에 대한 것이므로 2와 3은 호환성이 없다고 봐야한다. 2.x버전의 경우 향 후 5년간만 지원하고 그 뒤에는 3.x버전만 지원되기 때문에 사실상 2.7버전을 사용해야할 이유는 없다. 그럼에도 2.x 버전이 필요한 이유는 지금까지 사용해왔기 때문에 지금까지 구축되온 구조를 한번에 3.x버전으로 바꾸는 것은 힘들기 때문이다. 파이썬을 사용하다 보면 느끼겠지만 아직까지는 쓸모있는 많은 도구들이 2.7에서 제대로 작동하고 3.x에서는 불완전 또는 작동하지 않는 경우를 많이 봐왔다. 그래서 가끔 2.7에서 개발을 해야할 필요도 생..

쉘정렬 알고리즘(shell sort)

쉘정렬은 지금까지 배운 정렬과 좀 다른 방식으로 생각해 봐야 한다. 쉘 정렬은 다양한 해석이 있는데, 그 이유는 내부에 사용되는 알고리즘으로 삽입정렬을 많이 사용하는데, 버블정렬이나 선택정렬 등도 사용 해도 되기 때문이다. 보통 삽입정렬로 설명하는데, 그 이유는 효율이 좋기 때문에 그렇다. 어떻게 내부에서 선택되는 알고리즘이 다양해 질 수 있는지 알기 위해서 쉘정렬의 구조를 파악해야 하는데 개념 자체는 어렵지 않다. 개인적인 의견으로는 이런 구조로 인해서 쉘정렬이라고 하면 어떤 형식의 알고리즘이 사용되었는지 기술해 주는 정도는 필요하다고 생각한다. 쉘 정렬 위 배열은 14개의 요소를 지닌 배열이다. 쉘정렬은 주어진 자료를 다음과 같은 형식으로 나누어 생각한다.(나누는 방식은 다양할 수 있다. 여기서 나누..

반응형