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

Development

프로그래밍 언어 및 환경

[스터디] 후위식을 사용하지 않는 공학용 계산기 로직

공학용 계산기 엔진 만들기 예전에 미진하게 만들다가 말았던 계산기 만들기와 관련해서. 지난 번 글은 사실 스탠포드의 iOS 앱 개발 강의 내용을 바탕으로 만들었다. 물론 일부 내용을 좀 수정하기는 했는데. 그 강의에서는 스택에 숫자와 연산자를 넣는 형태로 동작했다. 예를 들면 3 + 5 를 계산하기 위해서는 3, enter, 5, enter, plus 의 순서로 값을 먼저 입력하고 연산자를 뒤에 입력하는 형태의 약간 이상한 방식으로 동작했다. 이는 사실 그 계산기 프로젝트를 계속 발전시켜 공학용 계산기로 만들기 위해서이다. 보통의 공학용 계산기는 ‘후위식’을 이용한 계산… 더 보기 »[스터디] 후위식을 사용하지 않는 공학용 계산기 로직

iOS에서 SQLite 사용방법

관련하여 새롭게 작성된 글이 있으니, 이 글을 읽어주세요: [새로 작성된] iOS에서 SQLite3 사용방법

자주 쓰이지는 않지만, 현재로서는 미리 만들어 놓은 데이터를 검색하여 사용하는 가장 단순한(?) 방법이다. (코어데이터는 데이터 셋을 미리 만들어 사용하기가 까다롭다) 대신, 애플은 영구저장소를 활용하는 방법으로 코어데이터를 밀고 있기 때문에 SQL과 관련한 내용을 애플 개발자 문서에서 친절하게 소개하고 있는 자료는 좀 드물다. 대신 SQL의 C인터페이스를 설명하는 글은 인터넷에서 많이 있으므로 적절하게 찾아보면 된다.
더 보기 »iOS에서 SQLite 사용방법

[iOS/OSX] 특정 작업을 병렬로 처리하기

“동시에 진행되는 작업”을 처리하기 위해서는 iOS 및 OSX 환경에서는 크게 두 가지 방법을 (흔히) 사용한다. GCD (dispatch queue)와 Operation Queue가 그것이다. 오퍼레이션 큐는 GCD의 Objective-C 버전이라 할 만큼 비슷한데 (사실 좀 다르기는 다르다) 어쨌거나 이 두 가지 방법은 스레드의 생성과 관리를 시스템이 알아서 처리해주는 레벨로 가지고 내려가기 때문에 실제로 프로그래머가 신경써야 할 부분을 “동시에 진행되는 작업을 처리”하는 부분에만 집중하면 되도록 해준다. 예를 들면 네트워크를 통해 데이터를 로드해야 하는 경우나 그 반대로 네트워크를 통해 데이터를 저장해야 하는 경우에 응답이 느리다면 (이는… 더 보기 »[iOS/OSX] 특정 작업을 병렬로 처리하기

[iOS] 키보드의 크기 구하기

iOS 앱을 디자인할 때, 텍스트 뷰나 텍스트 필드가 화면의 아래쪽에 위치한다면, 이를 탭했을 때 키보드가 올라오면서 정작 입력된 내용이 들어있는 부분을 가려버리게 된다. 따라서 키보드가 올라올 때 텍스트 뷰의 크기나 위치를 변경할 필요가 있다. 키보드가 올라오는 부분은 텍스트 필드/ 텍스트 뷰의 경우에는 didBeginEditing 등의 메소드를 사용할 수도 있지만, 보다 확실하게는 키보드가 나타날 때 발송되는 notification 메시지를 받는 것이 일반적이다. notification 메시지에는 userinfo 사전이 있고 여기에 여러 정보들이 있는데, 우리가 알고 싶은 키보드의 크기도 이 속에 있다.  키보드의 크기는 userInfo 딕셔너리 내의… 더 보기 »[iOS] 키보드의 크기 구하기

[iOS] UIScrollView 사용법

업데이트 UIScrollView를 Swift에서 사용하는 방법에 대한 (적어도 이 글 보다는 나은) 새 버전을 참고하세요. UIScrollView는 gesture recognizer를 내장하여 실제 뷰 영역보다도 큰 영역을 스크롤하여 내용을 볼 수 있도록 해주는 클래스이다. 사진 앨범 앱의 사진 보기 화면에서 이 스크롤뷰가 사용된다. (카메라롤의 사진 목록 역시 스크롤뷰로 구현되어 있다.) 스크롤뷰는 관성 이동은 물론 내부 컨텐츠를 확대/축소하는 방법을 아주 간단히 처리할 수 있어 주로 이미지와 관련된 화면에서 상당히 유용하게 활용할 수 있다. 스크롤뷰를 사용하는 방법은 UIViewController와 거의 유사하다. 인스턴스를 생성해서 하위뷰를 추가해주면 된다. 스크롤뷰의… 더 보기 »[iOS] UIScrollView 사용법

[iOS] 계산기를 만들어보자

계산기는 어찌보면 제일 간단한(?) 종류의 앱이라 할 수 있고 대체로 대부분의 컴퓨터나 휴대전화에 기본적으로 들어있는 기능이기도 하다. 하지만, 아이패드에는 없다.(!) 꼭 아이패드에서 없어서 그런 것이 아니라 간단한 앱이다 보니 만들기도 간단하고 해서 오늘은 계산기를 한 번 만들어보면서 MVC 패턴에 대해 살펴보기로 한다. MVC MVC는 모델-뷰-컨트롤러의 각각의 머리글자를 따서 만든 용어이다. MVC는 데이터와 사용자 인터페이스를 분리하고 이를 컨트롤러가 중계하는 형태로 프로그래밍의 결과물을 모듈화하는 기본적인 방법론이라 할 수 있다. 모델(데이터)과 뷰(UI)가 분리되어 있어 한 번 만들어 놓은 코드를 나중에 재사용하기 쉽게 한다는… 더 보기 »[iOS] 계산기를 만들어보자

[Objective-C] 프로퍼티의 atomic / nonatomic 속성

Objective-C에서 사용하는 프로퍼티(@property)는 알고보면 엄청나게 중요하더라. 이 프로퍼티를 선언할 때 속성을 지정하는데, 그 중에 nonatomic 이라고 거의 대부분의 객체 타입의 프로퍼티에는 명시해주는데, 이에 대해서 속시원히 설명해주는 글을 찾기가 힘들었다. 물론 멀티스레드 처리에서 해당 값을 안전하게 접근할 수 있도록 해주는 내용이고, 그게 별로 필요가 없으니 보통은 명시적으로 nonatomic으로 쓴다고는 하지만… 암튼 나름대로의 설명은 아래와 같다(…고 본다.)더 보기 »[Objective-C] 프로퍼티의 atomic / nonatomic 속성

Objective-C 한글의 초성을 분리하기

유니코드 한글의 코드 값 구성 원리와 이를 토대로 각 음절의 초/중/종성을 분리하는 방법은 본 블로그의 다른 글들을 참고하면 되겠다. (원래 참조했던 외부글이 있지만, 시간이 오래 지나서 그런지 삭제되었다.) 유니코드 한글에서 초성을 분리하는 일은 그리 어렵지 않은데, 중성 및 종성으로 사용되는 28자, 21자의 간격을 이용해서 한글 자모 테이블의 초성의 인덱스를 구할 수 있다. 여기서 한가지 문제는 위 코드로 구한 초성 값은 한글 자모의 문자라는 것이다. 한글자모의 코드가 연속되는 경우, 플랫폼에 따라서는 자동으로 합자가 생성되기도 하기 때문에, “안녕하세요”를 위 함수로 초성을 추출하면… 더 보기 »Objective-C 한글의 초성을 분리하기

유니코드 한글의 각 음소를 분리하기

유니코드에서 한글은 0xAC00에서 0xD7A3 사이의 코드 값을 갖는다. 각 16진수값은 10진수로 표시하면 44032와 55203으로 총 11,172개이다. 유니코드 내 한글은 초/중/종성의 각 음소의 조합으로 표현된다. 즉 초성 19개, 중성 21개, 종성 28개를 조합하여 하나의 글자가 되는 것이다. 따라서 각 초,중,종성에 해당하는 한글자모의 위치값을 계산하여 최종적으로 만들어지는 글자의 코드를 생성할 수 있다. 이 때 들어가는 값은 위치 값으로 0~해당 음소의 개수-1 만큼의 인덱스를 의미한다. 따라서 각 자모의 인덱스를 사용하여 조합된 문자의 코드값은 다음 식으로 계산할 수 있다. ((초성 * 21) + 중성)… 더 보기 »유니코드 한글의 각 음소를 분리하기

맥 주소록에서 이름의 초성을 별명으로 자동저장하기

애플 스크립트와 자체제작한 명령줄 도구를 사용해서 OSX 주소록의 이름 중 한글의 초성을 따내 이를 자동으로 별명으로 저장해주는 도구입니다. 사용방법 글 맨 하단의 다운로드 링크를 통해 파일을 내려받는다. 압축을 해제하고 속에 들어있는 “별명추가” 스크립트를 실행한다. 이후 아이폰과 동기화하면 아이폰에서도 초성으로 주소록 검색이 가능해진다. 주의사항 스크립트와 명령줄 도구는 공개하지만, 이를 사용한 결과는 순전히 자신의 책임입니다. “이름(first name)” 항목만 변환합니다. “성(last name)” 필드는 검색하지 않아요. 초성변환은 Chosung 앱이 합니다. 터미널에서 Chosung <한글문자열> 을 입력하면 해당 문자열의 초성만 반환하니 따로 쓰셔도 됩니다. 다운로드링크 :… 더 보기 »맥 주소록에서 이름의 초성을 별명으로 자동저장하기