콘텐츠로 건너뛰기
Home » Development » Page 46

Development

프로그래밍 언어 및 환경

[iOS_OSX] 웹 컨텐츠에 접근하기

URL Loading System 파운데이션 프레임워크 안에는 URL 기반으로 네트워크상에 위치한 리소스에 접근하는 도구들이 정의되어 있다. 네트워크를 통한 리소스 접근은 웹 브라우저를 생각해보면 되는데, 서버에 요청을 보내어 그 요청에 맞는 결과물을 전송받게 되는데, 이러한 일련의 과정을 제어하는 몇 가지 클래스를 묶어서 URL Loading System이라고 한다. 물론 파운데이션에는 이 URL Loading System 외에도 인증, 캐싱, 프로토콜을 제어할 수 있는 추가적인 클래스들이 정의되어 있어서 인터넷 혹은 네트워크와 관련된 기능들이 잘 추상화 되어 있다. 따라서 특별한 경우가 아니면 BSD소켓 프로그래밍까지는 잘 몰라도 네트워크 기능을… 더 보기 »[iOS_OSX] 웹 컨텐츠에 접근하기

[Python101] 로직(2) – 반복문

지난 시간에는 조건을 통해 갈림길 중 한쪽으로 진로를 결정하는 조건문에 대해 살펴 보았다. 이번 시간에는 반복문에 대해 알아보도록 하겠다. 반복문은 쉽게 말해서 같은 (혹은 비슷한) 작업을 여러 차례 반복하도록 지시하는 구문이다. 파이썬의 반복문은 조금 독특한 구석이 있는데, 이는 설명을 하면서 이야기하도록 하겠다. while 문 중고등학교 때로 기억을 거슬러 올라가보면 (요즘은 어떤지 모르지만) 그 때는 컴퓨터 시간에 BASIC을 배웠는데, 이 때도 FOR 문이라는 게 있었다. 그 이후로 반복문의 대명사는 사실 for 인데, 파이썬의 for는 약간 다른 (그리고 좀 멋진) 부분이 있어서… 더 보기 »[Python101] 로직(2) – 반복문

[Python101] 006 로직(1) – 조건과 조건문

사실, “자료의 유형”에 대해 먼저 다루어야 하는 게 아닌가 싶기도 하지만 그보다든 더 ‘일반적인’ 내용을 다루는 게 맞겠다는 생각에 로직을 먼저 설명하기로 결정했다. 자료의 유형은 사실 대부분의 프로그래밍 서적에서 맨 먼저 다루는 형태인데, 파이썬에서는 일부 매우 중요한 자료형을 제외하고는 ‘개념’만 이해하면 될 정도로 기본적인 내용은 단순하기 때문에 이 부분들은 차근차근히 알아 나가면 될 것 같아서 먼저 로직에 대해 설명해보기로 하겠다. 프로그램은 사람이 정의해준 절차에 따라 컴퓨터가 연속적으로 일을 처리해 나가도록 하는 일종의 “작업 지시서”이다. 당연하게도 파이썬은 소스코드에 명시한대로 일을 처리해… 더 보기 »[Python101] 006 로직(1) – 조건과 조건문

[Python101] 005 함수,모듈, 그리고 도움이 되는 도구들

지난 시간까지 기본적인 프로그래밍에 필요한 “입출력”을 다루는 부분을 간단하게 나마 살펴보았다. 실제로 지금까지의 내용은 뭔가 설명이 필요하거나 개념적인 이해를 도모하는 부분과는 조금 거리가 있었고, 마치 조리법처럼 “이렇게 하면 이렇게 이렇게 됩니다.” 정도였기에 경우에 따라서는 조금 재미도 떨어지고 지겨운 부분이 없지 않아 있었을 것으로 생각된다. 이번 시간부터는 프로그램을 구성하는 단위와 이를 어떻게 만드는지, 그리고 프로그램의 흐름은 어떤 식으로 만들어지는지를 살펴보고자 한다. 모듈 모듈(Module)이라는 것은 다른 것으로 대체 가능한 어떤 구성 요소를 뜻하는데, 파이썬에서는 미리 만들어두었다가 필요할 때 꺼내 쓰는 레고 조각같은… 더 보기 »[Python101] 005 함수,모듈, 그리고 도움이 되는 도구들

[Cocoa] NSFetchedResultsController

코어데이터와 UITableView와의 연결

지금까지 몇 개의 예제를 통해 코어데이터를 사용해서 일련의 데이터를 디스크에 읽고 쓰며, 이를 관리하는 방법에 대해 살펴보았는데, 이런 작업을 보다 쉽게 만들어주는 컨트롤러가 있었으니, 바로 NSFetchedResultsController이다.
이 클래스는 코어데이터의 컨텍스트를 기반으로 저장소로부터 조건에 맞는 객체를 읽어들여서, UITableView의 데이터소스 메소드에서 쉽게 사용할 수 있는 형태로 제공한다. 또한 읽어온 객체에 대해 추적 기능을 가지고 있어서 managed object에 어떤 변경이 발생할 때 이를 감지하여 적절하게 테이블 뷰에서의 변경을 만들어낼 수 있다.더 보기 »[Cocoa] NSFetchedResultsController

[Cocoa] 코어데이터 스택을 수동으로 세팅하기

코어데이터 코어데이터 코어데이터. 쉽지도 않은 내용인데 이 블로그에서 최근에 코어데이터를 지긋지긋하게 많이도 다루는 것 같다. ㅠㅡㅠ 하지만 언젠가는 피가되고 살이될 코어데이터에 대한 내용이다.
이미 “간단한” 저장은 아주 손쉽게 Keyed Archiver를 사용하여 인코딩한 객체를 파일로 바로 저장하는 것은 살펴보았다. 하지만 만약, 저장한 주소록에 사람이 수백만명이라면 엄청나게 많은 데이터가 앱이 실행될 때 한번에 메모리로 로드되어 올라갈 것이다. (이것이 아카이빙으로 내용을 저장할 때의 한계이다. 많은 데이터는 결국 한 번에 로딩해서 안고 있어야 하는 부담이 있다.)
하지만 코어데이터는 굉장히 빠르게 영구저장소를 계속해서 액세스하고, 자동으로 차등저장 및 로딩을 지원하기 때문에 데이터세트가 어느 정도까지는 커져도 괜찮다. (적어도 나는 그렇게 알고 있다.)
iOS라면 UIManagedDocument를 사용하면 문서파일 자체를 코어데이터 영구저장소 파일(데이터베이스 파일)로 바로 사용할 수 있다. 이 내용은 이미 살펴본 바가 있는데, 문제는 NSManagedDocument 라는 것은 아직 공식적으로 존재하지 않는 클래스이다. (아 이런…) 결국 코코아 앱을 시작할 때 코어데이터를 적용해주지 않으면… 콸콸콸콸…

update: macOS에서는 NSPersistentDocument 라는 클래스가 있어서 코어데이터와 NSDocument를 긴밀하게 통합하여 사용할 수 있다.

더 보기 »[Cocoa] 코어데이터 스택을 수동으로 세팅하기

UIImage를 카메라롤에 저장하기

UIImage를 아이폰의 카메라롤에 저장하는 과정은 사실 간단하다. 카메라롤은 내부에 사진을 정리/저장할 수 있는 체계를 가지고 있는 시스템이고, 여기에 특정 이미지를 저장하겠다는 함수를 호출하는 것으로 해당 동작을 처리할 수 있다. UIImageWriteToSavedPhotosAlbum()이라는 이름을 잘못쓰기 쉽게끔 지어놓은 UIKit 자유 함수가 여기에 사용된다. 이 함수의 원형은 다음과 같다. void UIImageWriteToSavedPhotosAlbum( UIImage* image, id completeionTarget, SEL completionselector, void* contextInfo ); 이 함수는 넘겨 받은 이미지를 카메라롤에 저장하고, 저장 작업이 완료되면 지정된 타깃에 지정된 메시지를 보낸다. 각 파라미터들은 원형에서도 짐작할 수 있겠지만, 다음과 같다. image :… 더 보기 »UIImage를 카메라롤에 저장하기

[Python101] 004. 파일. 파일을 읽고, 파일에 쓰기

사용자로부터 입력을 받아 데이터를 처리하는 프로그램은 실질적으로 효율에 한계가 있다. 처리해야 하는 데이터를 사용자가 일일이 매번 입력해야 하기 때문이다. 컴퓨터는 귀찮고 반복적으로 처리하는 작업을 수월하게 하라고 있는 것이므로 프로그램은 가능한한 많은 과정을 자동화하는 방향으로 처리하는 것이 좋은 경우가 많다. 보통의 경우에는 다음과 같은 방식의 순서로  작업을 많이 처리하게 된다. 처리해야 할 데이터를 미리 준비 (텍스트 파일이나 엑셀 파일 등) 프로그램을 실행할 때 매개변수로 처리할 파일을 주고 실행한다. 프로그램이 데이터 파일을 읽어 들여서 데이터를 주르르르륵 처리한다. 처리한 결과는 또 다른 파일에… 더 보기 »[Python101] 004. 파일. 파일을 읽고, 파일에 쓰기

[UIKit] UIView를 이미지로 캡쳐하기, UIImage를 파일로 만들기

UIView를 UIImage로 캡쳐하는 방법 NSView를 이미지로 캡쳐하는 방법에는 여러가지가 있는데, 캡쳐한 이미지를 파일로 저장하기 간편하게 쓰는 방법은 NSBitmapImageRep 클래스를 사용해서 현재 포커스된 뷰의 영역을 바로 캡쳐하는 것이다. (그 외에 PDF데이터를 바로 추출하거나, 뷰의 CALayer를 NSImage 상에서 렌더하는 방법등 여러 가지 방법이 있을 수 있다.) 코코아 터치에서는 NSBitmapImageRep 와 같은 클래스가 없다. 대신에 비트맵 이미지를 그래픽 컨텍스트에서 얻을 수 있다는 점을 이용하여 다음과 같은 방법을 쓸 수 있다. -(UIImage*)captureView:(UIView *)theView { UIGraphicsBeginImageContextWithOptions(theView.bounds.size, theView.isOpaque, 1.0); ; UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); return UIImage; }… 더 보기 »[UIKit] UIView를 이미지로 캡쳐하기, UIImage를 파일로 만들기

[Python101] 003. 입력. 사용자로부터 입력받기

지난 시간까지 계산 결과를 적절하게 출력하는 방법에 대해 살펴보았다. 어떤 처리 결과를 출력하는 방법을 보았으니, 이번에는 처리하기 위한 데이터를 입력 받는 방법을 살펴보겠다. 사용자 입력에는 여러 가지가 있다. 키보드로 입력을 받는 경우도 있고, 마우스로 클릭하거나 드래그하여 그림을 입력받는 경우도 있다. 이는 모두 사용자에 의한 직접적인 입력이다. 또 이런 식으로 사용자가 직접 입력을 하는 경우 말고 미리 작성된 파일로 부터 데이터를 읽어와서 처리하거나 인터넷 등 네트워크로부터 데이터를 전송받아 처리하는 경우들도 있다. 이러한 입력 방법 중에서 가장 쉽게 접근할 수 있는 키보드를… 더 보기 »[Python101] 003. 입력. 사용자로부터 입력받기