Programming 99

[Objective C] Thread 사용하기

안드로이드와 iOS의 스레드 사용법은 완전히 다르다. NSThread *t1 = [[NSThread alloc] initWithTarget:self selector:@selector(threadFunc:) object:nil];[t1 start]; 위와 같이 스레드를 생성해서 이용하면 된다. threadFunc로 스레드의 역할을 정의해주면 된다. 자바의 Thread의 run()이라고 생각하면 이해가 쉽다. 스레드를 종료시킬 때는 스레드를 강재로 죽이는 것보다는 스레드의 실행단위가 완료될 수 있도록 간접적으로 죽이는 방법이 전반적으로 선호된다. 특히 iOS는 시스템의 안전성을 위해서 간접적으로 죽이는 방법만 허용한다. [t1 cancel]; cancel을 사용하여 내부의 flag 값을 바꾸어 종료 시키는 ..

[Android]안드로이드에서 진동 구현

안드로이드에서 알람이나 게임의 재미를 높이기위해서 진동을 활용할 수 있다. 안드로이드에서 진동 구현은 iOS보다 복잡하다. 먼저 메니페스토 파일에서 Vibrate에 관한 권한을 부여한다. Vibrate 권한을 구현한 다음에는 간단한 코드 몇 줄이 필요하다. 먼저 Vibrate에 관한 시스템 서비스에관한 객체를 부여받는다. 그리고 Vibrator 객체를 이용하여 진동을 구현한다. Vibrator tVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); long[] vibratePattern = {100, 100, 300}; tVibrator.vibrate(300); tVibrator.vibrate(vibratePattern, -1); vibra..

Programming/Android 2013.05.19

[Android]핸들러와 루퍼

안드로이드 정책 상으로 UI 조작 등은 UI스레드(메인 스레드:자바)만 할 수 있도록 막아놓았다. 이는 여러 스레드들이 동시에 UI에 접근하여 초래하는 혼란을 방지하기 위함이다. 그래서 개발자가 임의로 만든 스레드로 UI를 조작하는 상황이 발생하게 되면 이를 UI스레드에게 알려주어야 한다. 이 때, 핸들러와 루퍼를 이용하면 된다. 1. 핸들러 핸들러는 스레드로 부터 메시지를 받아서 처리하는 부분이다. 핸들러 내부적으로 메시지 큐를 가지고 있어서 다른 스레드로부터 온 메시지들을 메시지 큐에서 하나씩 꺼내면서 처리하게 된다. tHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated met..

Programming/Android 2013.05.19

[C/C++]함수 포인터

1 함수포인터의 사용 1.1 함수포인터란 요즘 C 하는 개발자를 찾기가 힘들던가요 ? 여기 저기 C언어 개발자를 소개시켜 달라는데, 사람이 없어서 난리입니다. C언어 하면 떠오르는게 포인터죠. 데이터의 위치를 가리키는 데이터 타입라고 생각하면 간단한 개념이긴 한데, 개념이 단순할 뿐 잘 다루기는 쉽지 않습니다. 커널이 관리하는 메모리를 낮은 수준에서 직접 건드리기 때문입니다. 툭하면 다른 프로세스의 메모리 영역을 침범해서 프로그램이 뻗어 버리고, 좀 잘 돌아간다 싶으면 메모리를 해제하지 않아서 모든 메모리를 다 써버리는 문제가 발생합니다. 전혀 추상화 되 있지 않다는 얘기죠. 그러니 사람이 직접 추상화 해줘야 합니다. 예컨데 할당한 메모리를 초과하지 않게 하거나, 메모리 해제를 관리하는 코드를 추가하거나..

Programming/C, C++ 2013.04.18

[VI] VI/VIM 명령어 정리

VIM 명령어 정리 1. 저장 및 종료a커서 위치 다음칸부터 입력A커서 행의 맨 마지막부터 입력i커서의 위치에 입력I커서 행의 맨 앞에서 부터 입력o커서의 다음행에 입력O커서의 이전 행에 입력s커서 위치의 한글자를 지우고 입력cc커서위치의 한 행을 지우고 입력 3. 이동x 또는 dl커서 위치의 글자 삭제X 또는 dh커서 바로 앞의 글자 삭제dw현재 위치부터 스페이스 까지 삭제diw현재 위치에 있는 단어 삭제dd커서가 있는 행을 삭제[n]dd현재 커서 부터 아래 n번째 줄까지 삭제dj현재 커서와 아래 줄 삭제[n]dj현재 커서 부터 아래 n+1번째 줄까지 삭제dk현재 커서와 윗로 n+1번째 줄까지 삭제[n]dk현재 커서와 윗 줄 삭제D 또는 d$현재 커서가 있는 위치부터 행 끝까지 삭제d0 또는 d^현재 ..

Programming/Tool 2013.04.18

[C/C++]전처리기 Pre-Processor

컴파일을 시도할 경우 컴파일이 실행되기 전에 전처리기 명령부터 처리된다.전처리기는 # 로 시작하고 ; 를 붙이지 않으며 보이지 않게 소스 코드를 변경하며컴파일러에게 지시를 내릴 수도 있다. 각각은 여기서는 명령어라는 용어를 사용했지만 정확하게는 directive(지시자) 라고 하는 것이 나을 지 모르겠다. #include 가장 흔히 볼 수 있는 전처리기이다. 해당 파일을 찾아서 컴파일러가 그 파일이 마치 현재 컴파일하는 소스 코드에 포함되어 있는 것같이 해준다. 는 표준 헤더 파일일 경우에 설정되어 있는 폴더에서 헤더 파일을 찾으며 “” 는 그 외 폴더에서 찾을 수 있는데 최우선으로 현재 프로젝트 폴더에서 찾게 된다. #define define 문은 여러 경우에 사용될 수 있는데 일반적으로 문자열 대치에..

Programming/C, C++ 2013.04.18

[Java]Vector, ArrayList, LinkedList의 차이

vector는 내부적으로 배열의 구조를 지니고 있습니다.그래서 인덱스로 요소에 접근할 경우 상수시간으로 접근 할 수 있죠.하지만, item들이 추가되거나 삭제를 할 때는내부적으로 임시 배열을 생성해서 복사한다음item들을 이동시키게 됩니다. 이런 경우, 비용이 많이 들게 되고 성능이 떨어지죠. 반면, list에서는item들과의 연결이 포인터로 되어 있어item의 추가와 삭제가 빠릅니다.하지만, item들을 검색하는 시간은 o(n)의 비용이 발생하게 됩니다. vector의 경우는 item들을 저장한 이후 변동이 별로 없다면 효과적이고list의 경우 item의 추가 삭제가 많을 경우 유용하다고 할 수 있겠습니다. Vector와 LinkedList가 위의 경우와 같다고 생각할 수 있습니다.단 , ArrayLi..

Programming/Java 2013.04.17

[Pattern]MVC Pattern과 MVP Pattern 그리고 차이

모델-뷰-컨트롤러(Model–View–Controller, MVC)는 소프트웨어 공학에서 사용되는 아키텍처 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC모델(Model)은 애플리케이션의 정보(데이터)를 나타낸다.뷰(View)는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타낸다. 컨트롤러(Controller)는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.=밑의 그림은 스탠포드에서 iOS 프로그래밍을 강연할 때, MVC를 가르치는 그림이다. MVC 참고 : http://en.wikipedia.org/w..