사용자 도구

사이트 도구


project:embeddedpythonusingcapi

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

project:embeddedpythonusingcapi [2014/03/03 18:02] – [튜플/리스트 등의 자료형] changwooproject:embeddedpythonusingcapi [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 463: 줄 463:
 이외의 자료형들은 레퍼런스를 참고하라는 마법의 단어로 생략하도록 하겠습니다. 여기까지 읽고 이해했다면 아마 레퍼런스를 보고 어떻게 값을 가져올지 감이 잡히셨으리라 생각합니다. 레퍼런스의 '[[http://docs.python.org/2/c-api/abstract.html|Abstract Objects Layer]]'와 '[[http://docs.python.org/2/c-api/concrete.html|Concrete Objects Layer]]' 부분을 읽어 보면 각각의 자료형에서 데이터를 어떻게 꺼내올지, 또 반대로 어떻게 집어넣을지에 대해 자세하게 설명되어 있습니다. 이외의 자료형들은 레퍼런스를 참고하라는 마법의 단어로 생략하도록 하겠습니다. 여기까지 읽고 이해했다면 아마 레퍼런스를 보고 어떻게 값을 가져올지 감이 잡히셨으리라 생각합니다. 레퍼런스의 '[[http://docs.python.org/2/c-api/abstract.html|Abstract Objects Layer]]'와 '[[http://docs.python.org/2/c-api/concrete.html|Concrete Objects Layer]]' 부분을 읽어 보면 각각의 자료형에서 데이터를 어떻게 꺼내올지, 또 반대로 어떻게 집어넣을지에 대해 자세하게 설명되어 있습니다.
  
 +파이썬 확장에 대해서는 그나마 몇몇 문서들을 만나긴 했지만, 파이썬 삽입에 대해서는 그다지 문서가 많지 않더군요. 처음에는 갈팡질팡했습니다. 그렇지만 문서를 작성하는 과정을 통해 C API를 레퍼런스를 보다 정독해보고 나니 그렇게까지 어려운 일은 아니라는 결론을 내렸습니다. 결국 파이썬 객체를 다루는 것이니, 파이썬이 동작하는 방식을 유추해보면 거의 흐름이 그려지게 되더군요.
  
 ===== 예제: URL의 콘텐츠 가져오기 ===== ===== 예제: URL의 콘텐츠 가져오기 =====
줄 596: 줄 597:
 } }
 </code> </code>
 +
 +파이썬 스크립트를 C에서 동작시키는 것에 불과하니, 서로 동작 결과는 동일합니다.
 +
 +===== 마치며 =====
 +파이썬에는 여러 라이브러리들이 잘 갖춰져 있고, 또 쓰기 매우 쉽게 되어 있습니다. 기존의 어떤 작업을 C/C++, 혹은 다른 언어 기반으로 하고 있다가 전혀 다른 아이디어를 떠올리게 되었습니다. 사용 중인 언어 환경에서는 외부라이브러리를 가져다가 빌드도 하고 세팅도 해야하고 ... 이것저것 밑작업도 많이 해야 하고 본 코드를 작성하는데도 조금 시간이 걸릴 수 있습니다.
 +
 +이럴 때 이 새로운 부분만을 파이썬 스크립트로 프로토타이핑을 할 수 있습니다. 그런데 양 프로그램간 데이터 전송, 좀 더 거창하게는 프로세스 통신이 이뤄지면 보다 더 좋겠죠. 이럴 때 파이썬 삽입이 적합한 것 같습니다. 
 +
 +저도 이 문서를 제작하게 된 계기가 된 것이, 어떤 프로그램을 제작하는데, 네트워킹 기능과 텍스트 처리가 다소 필요한 부분이었습니다. C++로 이것을 시작하려 하니 한숨만 나오더군요. 그래서 우선 파이썬을 통해 빨리빨리 아이디어 스케치를 했습니다. 기능 구현은 빠르게 되었고, 이렇게 구성을 하면 좋겠다는 확신이 들었습니다. 또한 같은 객체 설계를 하더라도 스크립트로는 후딱후딱 만들고 바꾸기도 쉬우니 편리했습니다. 여기서 단순하게 기능이 동작된다는 것도 확인하였지만, 여기서 빠르게 프로토타이핑을 한 것이 설계적인 측면에서도 나름 이득이 되더군요.
 +
project/embeddedpythonusingcapi.1393869755.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki