콘텐츠로 건너뛰기
Home » Development » 페이지 44

Development

프로그래밍 언어 및 환경

C에서의 문자열 배열과 문자열 배열을 동적으로 할당하기

문자열의 배열을 2차원배열을 쓸 때의 문제점

C언어는 문자열을 다루는 자료형이 없다. 대신에  C에서 문자열은 널 문자로 끝나는 문자(char) 타입의 배열을 사용하여 저장한다.  만약 일련의 문자열 집합을 다루려면 문자열의 배열을 써야 할테다.  여러 개의 문자열을 배열에 담고 싶다면 이차원 배열을 쓰는 방법을 생각할 수 있는데,  이 경우 크기가 일정하게 고정된 영역을 여러 개 생성해야 하고, 만약 각 문자열의 길이가 제각각 다르다면 불필요하게 낭비되는 메모리가 제법 될 수 있다.

2차원 배열의 문자열 배열
2차원 배열을 사용하여 구성한 문자열 배열

메모리를 비롯하여, 부족한 하드웨어 자원을 알뜰 살뜰 아껴서 최대의 성능을 내기 위해 개발된 초기 C언어 관점에서 이러한 2차원 배열의 사용은 그리 추천하지 않는다.더 보기 »C에서의 문자열 배열과 문자열 배열을 동적으로 할당하기

[Python] 네이버 블로그 xml-rpc 클라이언트 만들기 – 1

xml-rpc 클라이언트 만들기

여러 개의 블로그 (최근 들어 마이크로블로깅 도구들도 쓰고 있으니)를 운영하다보면 가장 큰 문제 중 하나가 글이 여기 저기로 분산되다보니 한 곳에서 보아 볼 수 있는 방법이 없을까 하는 생각이 들었다. (또한 아내가 네이버 블로그를 시작한 것도 있고 해서) 네이버라는 플랫폼 자체는 그닥 마음에 들지는 않지만 아내는 사실 오픈된 블로깅보다는 이웃공개 등의 커뮤니티성 서비스를 원하는 것도 있고 또 네이버 블로그 자체가 유입량은 상당히 많다보니 다른 곳에 써 온 글을 네이버로 옮기는 작업을 해야 한다.더 보기 »[Python] 네이버 블로그 xml-rpc 클라이언트 만들기 – 1

[C] conio.h에 대해

conio.h 는 MS-DOS용 C컴파일러에 포함되어 있는 헤더파일로, 표준 C 라이브러리에는 포함되지 않고 있다. (따라서 여기서 정의한 함수를 표준 함수처럼 쓰면 다른 플랫폼에서는 심벌이 없다고 컴파일 되지 않는다.) 이 헤더에는 콘솔 입출력과 관련된 함수들이 정의되어 있다. 멤버 함수들 kbhit – 키보드가 눌려졌는지 확인 getch – 콘솔에서 버퍼나 에코(타이핑한 키가 화면에 표시)없이 한 개의 키 값을 입력 받음 getche – 콘솔에서 키보드 입력으로 한 개의 키 입력을 받음. 에코됨. ungetch – 키보드 버퍼로 문자 1개를 넣음 cgets – 콘솔로부터 문자열을 직접 입력… 더 보기 »[C] conio.h에 대해

[파이썬] 특정 웹주소의 소스를 긁어와 출력해주는 코드

파이썬의 가장 큰 장점 중의 하나는 웬만한 리눅스 서버에는 그냥 설치가 되어 있다는 점. 터미널 상으로는 웹브라우저를 돌려볼 수 없으니, 서버에서 다른 서버로의 웹 접근을 확인하기 위한 용도로 활용할 수 있는 코드를 소개한다…라지만 사실은 내가 나중에 또 쓸일이 있을까봐 기록해 둔 것.

with 구문과 컨텍스트 매니저

파일이나 소켓과 같은 특정한 리소스에 액세스하는 경우에 일반적으로 해당 리소스를 열면서 제어를 위한 핸들을 얻고, 리소스의 회수를 위해서 모든 작업이 완료된 경우에는 반드시 해당 핸들을 닫는 식의 흐름이 필요하다. 하지만 리소스의 열기와 닫기 사이에는 예측하지 못한 변수가 발생할 수 있다. 특정한 조건에 의해서나 예외가 발생하는 등의 이유로 리소스의 정리를 못한채로 루틴이 끝나거나 프로그램이 종료되는 경우가 발생할 수 있다. 따라서 이런 경우에는  try/except/finally 구문을 통해서 흐름의 끝에서 리소스를 정리하고 루틴을 떠나는 형태로 코드를 작성하는 방법도 있지만, 이러한 방법 역시 예외가 발생하는… 더 보기 »with 구문과 컨텍스트 매니저

[python] 문자열로 그 이름을 가진 속성에 접근하기

Key-Value coding in Python

파이썬에서 키-밸류코딩(문자열을 통해 특정 멤버변수 혹은 로컬변수에 접근)하는 방법에 대해 알아보자.

전역변수 혹은 지역 변수에 대해 문자열로 접근하기

globals() , locals() 함수는 각각 전역변수와 지역변수의 키-값 쌍을 사전으로 반환한다. 따라서 locals()['someVar']라고 쓰면 지역변수 someVar의 값을 구할 수 있다. 이 방법은 파이썬2, 파이썬3에서 공통적으로 사용 가능하다.

객체의 속성값(멤버)에 대해 문자열로 접근하기

getattr(), setattr()을 사용하면 특정한 객체 내부의 값에 대해 문자열로 접근할 수 있다.

호출 가능한 속성인지 확인하기

파이썬에서는 객체의 속성에 대해 객체인지, 값인지 (파이썬은 상수도 객체로 인식한다.) 혹은 함수인지 (파이썬은 함수도 객체로 인식한다.) 아리송할 때가 있다. 이 때는 callable()함수를 사용해서 해당 객체를 넣어주면 호출 가능한지 아닌지 알 수 있게 된다. (호출 가능한 속성은 내부적으로 다시 call 함수가 정의되어 있다. 클래스를 정의할 때도 해당 클래스의 call 함수를 정의해두면 클래스 이름을 함수처럼 사용할 수 있다.

def viewAttrs(obj):
    for ar in dir(obj):
        if callable(getattr(obj,ar)):
            print "Callable >> %s : %s\n\n" % (ar, getattr(obj,ar).__doc__)
        else:
            print "Property >> %s : %s\n\n" % (ar, getattr(obj,ar).__doc__)

위 코드는 특정 객체를 받아, 해당 객체의 모든 속성을 조사하여 실행 가능한지 여부와 함께, 해당 속성의 문서화된 정보를 표시해준다. 참고로 hasattr()도 있고, 이는 당연히 객체가 주어진 이름을 갖는 속성을 가지고 있는지 알아내는 함수이다.더 보기 »[python] 문자열로 그 이름을 가진 속성에 접근하기

Flask 설치하기

Flask Flask는 아마도 Pyramid보다도 더 작은 미니멀한 웹 프레임워크로 보인다. 역시나 자세한 설명은 생략한다 홈페이지에서. 설치 eazy_install로 한 방에 할 수도 있는데, 아무래도 가상 환경(virtualenv)을 사용하면 좀 더 깔끔하다. 홈페이지에 소개되어 있는 설치 방법 가상환경은 virtualenv 패키지로 간단히 생성할 수 있다. virtualenv 패키지는 easy_install로 설치할 수 있음 c:\> python27\scripts\virtualenv fenv c:\> cd fenv c:\fenv> scripts\activate 이 시점에서 프롬프트가 바뀌고 가상환경이 활성화되었음을 알 수 있다. (fenv) c:\fenv> pip install Flask 다음은 홈페이지에서 소개하고 있는 간단한 예제이다. from flask import Flask app… 더 보기 »Flask 설치하기