파이썬에서는 필요에 따라서 로드 할 수 있도록 만들어진 파일을 모듈(module)이라고 부른다.
*모듈의 사용
새로운 파일을 만든다. 이름은 greeting.py
#greeting.py
def welcome():
return 'Hello world'
#main.py
import greeting
print greeting.welcome()
-->import는 모듈을 로드할 때 사용하는 명령어다.
<네임스페이스>
네임스페이스란 간단하게 디렉토리라고 보면된다.
하나의 애플리케이션에는 다양한 모듈을 사용하게 된다. 그런데 모듈이 서로 다른 개발자에 의해 만들어지기 때문에 같은 이름을 쓰는 경우가 생길 수 있다. 이런 경우먼저 로드된 모듈은 나중에 로드된 모듈에 의해서 덮어쓰기 되기 때문에 네임스페이스가 필요하다.
<from> 만약 welcome앞에 네임스페이스(greeting)를 명시하고 싶지 않다면 어떻게 해야 할까? 모듈을 로드하는 방식을 달리하면 된다. from뒤에 모듈의 이름을 붙이고 import뒤에 함수의 이름을 붙이면 welcome함수는 greetng_ko모듈의 함수로 동작한다.
예) from greeting_ko import welcome
print welcome();
import * 는 모든 함수를 사용한다.
<패키지>
모듈의 수가 많아지면 모듈을 사용하기 좋은 형태로 잘 조직화하는 어려움이 생긴다. 이런경우 도입 할 수 있는 기능이 패키지이다.패키지를 사용하면 모듈을 디레고토리 별로 분류할수 있다.
*import sys
->sys모듈은 파이썬에서 기본적으로 제공하는 모듈이다.
print sys.path
->>sys.path는 특정 모듈을 로드(import)할 때 경로를 검색해보는 리스트다.
사용자 모듈 디렉토리 추가
위에서 sys.path를 통해서 나열한 디렉토리는 파이썬이 기본적으로 사용하는 경로들이다. 여기에 자기만의 경로를 추가하고 싶다면 PYTHONPATH라는 환경변수를 추가하면 된다. 이것은 운영체제의 PATH나 자바의 CLASSPATH와 비슷한 역할을 한다. 아래와 같은 방법으로 사용자 디렉토리를 추가하면 실행파일과 같은 디렉토리의 모듈보다는 우선순위가 낮지만, 모듈 기본 디렉토리 보다는 우선순위가 높다.
리눅스 & OSX & UNIX
유닉스 계열의 운영체제에서는 아래와 같은 방법으로 환경변수 PYTHONPATH를 설정할 수 있다. 파이썬 인터프리터는 이 변수를 참고해서 사용자의 기본 디렉토리를 찾아낸다. 아래 예제는 /home/egoing/python/lib을 파이썬의 모듈 디렉토리로 추가하는 예다. 아래의 내용을 콘솔에 입력한다.
위와 같이 환경변수를 설정하면 터미널을 닫았을 때 환경변수가 사라진다. 아래와 같이 .bash_profile에 위의 내용을 추가하면 사용자가 로그인 할 때마다 위의 구문이 실행되면서 환경변수가 자동으로 셋팅된다. 파일을 수정하기 위해서 nano를 이용해서 파일을 수정한다면 아래와 같이 입력한다. 그리고 위의 내용을 .bash_profile의 내용에 추가한다.
1
nano ~/.bash_profile
윈도우
윈도우 계열에서는 환경변수를 설졍할 때 set과 setx 명령을 사용한다. set은 현재 명령 프롬프트에서만 사용되는 환경변수를 설정하는 것이고, setx는 영구적으로 환경변수를 설정하는 것이다. 환경변수를 설정하기 위해서는 우선 윈도우키+r을 이용해서 '실행' 창을 구동하고 거기에 cmd라고 입력한다.
C:\Python27\userlib을 모듈 기본 디렉토리로 추가하고 싶다면 명령 프롬프트에 아래의 명령을 차례로 입력한다.
웹 소켓은 단일 소켓을 통해서 풀듀플렉스(full-duplex) 통신을 제공하는 프로토콜이다. 웹 브라우저오 서버간의 비동기 메시징을 활성화한다. 풀 듀플렉스는 서버가 브라우저에 메시지를 전송할 수 있고, 브라우저도 서버에 메시지를 전송할 수 있음을 의미한다. 스프링4.0은 웹 소켓 통신을 지원하며, 다음을 포함한다. 메시지 전송과 수신을 위한 하위 레벨 API 스프링 MVC 컨트롤러에서의 메시지 처리를 이한 상위 레벨 API 메시지 전송을 위한 메시징 템플릿 브라우저, 서버, 프록시에서 웹 소켓 지원 부족을 지원하기 위한 SockJS 1. 스프링의 하위 레벨 웹 소켓 API사용하기 간단한 형태로 웹 소켓은 두 애플리케이션 사이의 통신 채널이다. 풀 듀플렉스이므로 양쪽 종단은 메시지를 전송할 수 있고, 다른 쪽은 그 메시지를 받아서 처리한다. 웹 소켓 통신은 여러 종류의 애플리케이션 사이에서 사용될 수 있다. 그러나 웹 소켓의 대부분은 서버와 브라우저 기반 애플리케이션 사이의 통신을 용이하게 하기 위해서 사용된다. 브라우저에서의 자바스크립트 클라이언트는 서버에 대한 연결을 오픈하고, 서버는 그 연결을 통해 브라우저에 업데이트하라고 보낸다. 이러한 방법은 업데이트를 위해 서버를 폴링(Polling)하는 일반적인 방식보다 더 효율적이며, 좀 더 자연스럽다. 하위 레벨 웹 소켓을 지원하기 위해서 스프링에서 메시지를 처리하고, WebSocketHandler를 구현한 클래스를 작성한다. public interface WebSocketHandler{ void afterConnectionEstablished(WebSocketSession session)throws Exception; void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception; void ...
처음 클래스를 배우면서 객체를 생성할 때 메모리를 동적으로 할당받지 않고(new를 사용하지 않고) 객체를 생성하였다. 클래스이름 객체이름; ex> Student kim; new 연산자를 사용한 동적할당. 클래스이름 *객체이름; 객체이름 = new 클래스이름; 객체이름 = new 클래스이름(매개변수 리스트); ex> Student *kim; kim = new Student(); kim->showData(); // 1) 객체 포인터를 선언한다. 2) new 연산자를 사용해 객체를 위한 메모리를 동적할당한다. 3) new 연산자에 의해 생성자가 자동으로 호출된다. 4) 객체 포인터를 사용해 멤버에 접근한다. ------------------------------------------------------------------------------------------------------------------------------------- 여기서 드는 의문점이 있다. 앞에서 객체를 생성할때 클래스 이름과 객체명만 적어주면 되었다. 그런데 굳이 new를 이용해서 동적할당을 받아 객체를 생성하는 이유는 무엇일까? 딱히 물어볼 곳이 없어 네이버 지식in을 통해 답을 구할 수 있었다. (나랑 비슷한 의문을 가진 사람은 항상있는듯 하다) 두 방법의 차이는 메모리의 어디에 올라가냐의 차이이다. 동적할당을 받지 않고 객체를 생성할 경우 스택영역에 올라가게 된다. 스택영역은 일반적인 변수가 올라가는 영역으로 범위를 벗어날 경우 메모리가 자동으로 해제된다. 하지만 동적할당을 할 경우 힙영역을 할당받고 delete를 이용하여 직접 해제를 해주지 않기 전까지는 메모리에 유지된다. 즉, 함수에서 잠깐 쓰고 자동으로 해제시키기 위해서는 스택 메모리를 이용하여 사용하도록 하고 계속 사용하기 위해서는 힙메모리를 이용해야 한다. 힙 메모리를 이용할 경우 메모리 누수가 발생할 수 있으므로 delete를 이용하여 해제를 해주어야 한다. view s...
* 언리얼 엔진은 세 축에 대한 방향을 x축이 전방, y축이 오른쪽, z축ㅇ 하늘방향으로 설정한다. 3ds max나 Maya, Blender등 3D 제작 툴은 대부분 y축을 전방으로 설정하므로, 외부에서 제작한 오브젝트를 가져온 후에는 오브젝트가 게임 뷰의 x축을 향하도록 회전 시켜야 한다. 2. 액터의 기준점 Pivot Point는 액터의 이동, 회전, 스케일조절을 하기 위한 기준점이다. 언리얼 엔진이 제공하는 스태틱 메시는 대부분 바닥에 닿는 면에 피봇 포인트가 있다. 3. 언리얼 엔진이 단위 언리얼 엔진은 유니(Unit)이라는 가상의 단위를 사용하므로 실제의 거리와 차이가 있지만, 길이는 cm ,각도는 60분법(Degree)이 적용된다. 포인트 라이트나 스포트라이트는 루멘(Lumen)단위로, 1700루멘은 100W전구에 해당한다. 4. 액터의 회전 방향 액터의 회전 각도는 벡터로 표시하지만, 회전 방향은 (x,y,z)축의 회전에 대해 Roll, Pitch, Yaw라는 개념을 사용한다. *액터의 복사는 Ctrl+W키를 누르거나 Alt키를 누른 상태로 액터를 이동하면 복사된 액터가 이동한다. 5. 스냅 설정 스냅(Snap)은 액터를 일정한 거리/각도/비율로 이동/회전/스케일을 조절하기 우한 기능이다. *버텍스 스냅 -->이 기능은 피벗이동(휠버튼 드래그)과 함께 사용한다. 예를들어 큐브의 모서리를 맞출때 사용한다. 이동할 큐브를 선택한 후 V키를 누른 상태에서 기즈모의 중앙을 휠버튼으로 드래긓면 큐브에 버텍스가 표시되므로 그 모서리의 위치에 정확히 맞출 수 있다. 또는 [세팅]메뉴에서 버텍스 스탭 켜시 옵션을 이용한다. *표면 스냅 --> 액터의 바닥을 다른 물체의 표면에 정렬하는 기능이다.
댓글
댓글 쓰기