본문 바로가기

프로그래밍

Piezo 스피커로 도레미파솔라시도 연주 준비물 - piezo 스피커 1개 코드 //piezo 스피커 핀 const int piezoPin = 8; //음 배열 int melody[] = {262, 294, 330, 349, 392, 440, 494, 523}; const int sizeOfMelody = sizeof(melody)/sizeof(int); void setup() { for(int i=0 ; i 더보기
랜덤으로 LED 색 바꾸기 준비물 - 3색 LED 1개 코드 //ouput pin 설정 const int ledRedPin = 11; const int ledGreenPin = 10; const int ledBluePin = 9; void setup() { //random으로 출력되는 숫자의 변경을 위해 seed 설정 randomSeed(analogRead(A0)); } void loop() { // random하게 값 지정(0~225) analogWrite(ledRedPin, random(256)); analogWrite(ledGreenPin, random(256)); analogWrite(ledBluePin, random(256)); delay(1000); } 영상 알게된 점 - analogRead로 읽을 수 있는 값의 범위는.. 더보기
Run Loop Run Loop - 이벤트 처리를 위한 loop로 입력소스와 타이머소스를 주로 처리. 1) 입력소스(input source): 다른 thread나 어플리케이션에서 전달되는 메시지 이벤트(비동기식) 2) 타이머소스(timer source): 예정시간이나 반복수행간격에 따라 발생하는 이벤트(동기식) - 앱을 계속 살려두기 위함 - 할 일이 많을 때는 thread를 바쁘게, 할 일이 없을 때는 쉬게 하는 것을 목적으로 함 - Main thread에서 생성된 Main run loop 이외의 경우 사용자가 직접 추가해야 함 - 지속적 장호작용이 필요한 경우 반드시 사용(ex: 통신, 타이머) - 사용자 이벤트(user interaction)발생 및 처리과정 1) 이벤트 발생(터치, 키보드 등) 2) 시스템에서 p.. 더보기
Process VS Thread Precess - 실행되고 있는 일의 단위를 뜻하며 프로그램 또는 명령어를 통해 생성 - 각 Process마다 자원, 메모리주소 등을 독립적으로 할당 - 다른 Process와 값을 공유하기 위해서는 소켓통신 등의 통신기법일 필요 - Process가 많은 경우 context switching 과정에서 시스템에 부담을 줄 수 있음 1) context switching: CPU가 실행되는 프로세스를 변경하는 작업 stack 또는 heap이 각자 영역을 침범하면 overflow 발생. 접근할 수 없는 메모리에 접근하면 문제 발생. Thread - Process의 단점을 보완한 경량화 Process로 Process 생성 시 Main Thread 기본 생성 - stack만 독립적이고 Text, Data, Heap은.. 더보기
NSHashTable HashTable - 저장할 값 또는 키값을 통해 테이블 내의 주소를 계산하고 그 곳에 값을 저장하는 구조. 1) hashFunction(저장값 또는 키) % 테이블 사이즈 = 저장할 index - 탐색 시에도 같은 방법으로 index를 찾아 데이터 탐색 - hashFunction을 한번만 호출하면 값의 위치를 찾을 수 있어 빠름 - 값에 따라 index가 충돌할 수 있음(collision) - collision 처리(index 충돌) 1) separate chaining : 이미 값이 저장된 index에 linkedList를 통해 node에 값 추가. (JDK 1.8에서는 node가 8개 이상일 경우 트리 구조로 변경) 2) resizing: 테이블 사이즈를 더 크게잡고 재분배 - 충돌되어 chaini.. 더보기
NSAutoreleasePool VS @autorelease block NSAutoreleasePool - MRC에서 사용하는 autorelease 메시지를 받은 객체들을 모아두는 풀 - 풀이 메모리에서 해제(drain, release)될 때 풀에 포함된 모든 객체들은 release 메시지를 받음 - 풀은 release 메시지를 한번만 보내기 때문에, retain count가 2인 객체는 살아있음 - 기존 풀에 새로운 풀 생성 1) 기존 풀에 새로운 풀을 생성 할 경우 기존 풀 스택의 맨 위에 추가 2) 이후 어떤 객체가 autorelease 메시지를 받게 된다면, 그 객체는 최 상단에 포함된 풀에 추가 - drain VS release 1) Gargage Collection을 지원하지 않는 경우(iOS) drain은 release와 같음 2) Gargage Collecti.. 더보기
Big-O 표기법(annotation) Big-O(빅오) 표기법 - 알고리즘의 성능 및 복잡도를 표현하기 위하여 사용하는 지표 - 알고리즘의 실행 시간 또는 사용 메모리 공간을 표현 - 정확한 값이 아닌 어림 값으로, 알고리즘의 대략적인 평가만 가능 - 유사한 다른 표기법으로는 Big-Ω(빅오메가), Big-Θ(빅세타) 표기법이 있음 Big-O(빅오)? Big-Ω(빅오메가)? Big-Θ(빅세타)? - Big-O: 알고리즘의 최악의 상태를 나타냄(가장 느린 경우) - Big-Ω: 알고리즘의 최상의 상태를 나타냄(가장 빠른 경우. - Big-Θ: 알고리즘의 평균의 상태를 나타냄(중간) - 알고리즘 측정 시 최악의 상태보다 빠르다는 것이 확실히 보장므로 Big-O 사용 - 다른 것을 사용했을 경우에는 확실한 보장은 아님 시간복잡도, 공간복잡도 - .. 더보기
iOS 식별자(identifier) iOS 기기 식별자(UDID: Unique Device Identifier) - iOS에서 기존에 사용하던 UDID가 iOS5에서 deprecated 됨. - 따라서 UUID(Universally Unique Identifier) 기반의 다른 식별자로 대체하여 사용 - 대표적으로 identifierForVendor(벤더식별자), advertisingIdentifier(광고식별자)가 있음. - 32개의 문자+숫자로 이루어 짐(ex: E621E1F8-C36C-495A-93FC-0C247A3E6E5F) identifierForVender(벤더식별자) - 공급업체(벤더)가 같은 앱들은 모두 같은 고유 ID를 가짐 - 앱을 삭제할 경우 1) 같은 벤더의 다른 앱이 설치되어 있는 경우 ID가 유지됨. 2) 같은 벤.. 더보기
NSURL의 속성 NSURL의 속성 - URL: http://www.testUrl.com/notice/contents?a=1&b=2&c=3 (설명을 위한 임시 URL) - scheme: http (:// 이전의 텍스트) - host: www.testUrl.com (://과 맨 처음 / 사이의 텍스트) - path: /notice/contents (맨 처음 /와 ? 사이의 텍스트) - query: a=1&b=2&c=3 (? 이후의 텍스트) 예제 코드 NSString *strUrl = @"http://www.testUrl.com/notice/contents?a=1&b=2&c=3"; NSURL *requestURL = [NSURL URLWithString:strUrl]; ///////////////////////////////.. 더보기
Serial 통신하기 준비물 - 아두이노 보드(내 보드는 Arduino Uno) 코드 void setup() { // 시리얼 통신 보드레이트 설정 Serial.begin(9600); } void loop() { // 입력 받은 값이 있는 경우는 0보다 큼 if(Serial.available() > 0) { char inputVal = Serial.read(); // 사용자 입력(char 형을 받음) int i_Val = 10; float f_Val = 1.23456; // 입력받은 char값 표시 Serial.print("inputVal : "); Serial.println(inputVal); switch(inputVal) { // int형 표시 case 'i' : Serial.print("\t intVal : "); Ser.. 더보기