본문 바로가기

Project

DeNA 개발자 주최 아이폰 개발자 스터디? 정말 바쁜 일정인 와중에 같은 건물 다른층에 입주해있는 타회사 엔지니어가 주최하는 아이폰 개발 스터디가 있다고 하길래 잠깐 참가를 해보았다. 먼저 주최자 소개 Mathda Matho? 이전 우리회사에 다니다가 전직하여 DeNA로 가버렸지만 그때 유지하던 스터디를 DeNA로 까지 끌고가서 아직도 운영하고있다. 사실 이번 스터디도 처음은 이전 회사에 친하던 엔지니어가 부추겨서 시작한 스터디였지만 그 친구분은 다른곳으로 이직을 하고 혼자서 이끌어나가고 있는 상황인듯 그분의 홈페이지 http://yuez.net/ 개인적으로 3명의 다른 팀멤버와 elleReader를 개발하였다고 한다. 이외에도 다른 참가자들도 각각 아이폰 개발자 또는 흥미를 가진사람이 많이 있었는데 몇명 소개를 하자면 오오무라상 20대 초반 ,.. 더보기
Coredata Background 처리에 관하여 격주 릴리즈의 바쁜 스케쥴안에서 시간을 쪼개 코어 데이터 처리 로직을 백그라운드에서 처리하려는 작업을 조금씩 진행시켜 이번버젼에야 겨우 적용할수 있었다. 여기에 약 6개월간에 걸쳐 내가 겪은 시행착오에 관한 기록을 남긴다. 1. 기존설계의 문제점 모든 처리를 MainThread에서 하도록 구현되어있었기 때문에 화면이 멈추는 경우가 자주 있었다. Main Thread에서 처리하지 않으면 안되었던 이유는 UI의 변경은 반드시 Main Thread에서 하지 않으면 안되기때문이다. 모든 작업을 main Thread에서 처리하더라도 발생하는 한가지 이슈가 있었는데, 비동기 리퀘스트(Asynchronous Request)와 Block을 이용할때 request시에 취득한 NSManagedObject는 respoons.. 더보기
PHP 단상 PHP: 잘못된 디자인의 프랙탈 PHP를 정말로 증오하는 분이 쓴 글을 국내의 블로거가 번역한글인데 , 최근에 읽은 블로그 중 가장 재미있어서 나도 PHP의 단상을 몇가지 적어본다. 먼저 나또한 위의 글을 전적으로 동의한다. PHP개발을 하며 나타나는 알수없는 버그들등에 고생을 한 경험이 있어서 PHP가 얼마나 거지같은지 깊이 공감을 한다. 하지만 왜 언어 랭킹을 보면 항상 저자가 좋아하는 Python보다 높은 순위에 있으며 , 그 인기가 10년가까이 지속되고 있는지 생각해볼필요는 있을것같다. 1. PHP는 왜 그렇게 많이 쓰이는가? - 먼저 PHP는 환경설정이 정말 간단하다. 윈도우라면 XAMP , 맥이라면 MAMP , 리눅스라면 LAMP 로 검색해서 나오는 패키지를 인스톨하면 끝이다. 다른 환경설정 .. 더보기
JSON data로부터 간단히 모델 클래스를 구현하기 코어데이터는 데이터를 다루기 위한 굉장히 편리한 도구이지만 데이터의 영속성이 필요하지 않은 경우에는일부러 코어데이터를 쓰지 않아도 간단히 데이터 모델을 구현할 방법은 많이 있다. 모델클래스를 작성하고 JSON Data로부터 해당 데이터를 바인딩시키는 간단한 코드를 소개한다.먼저 모델클래스이다.보다시피 프로퍼티와 초기화 메소드를 하나 지정해둔다. @interface User : NSObject @property (nonatomic,strong) NSString *userId; @property (nonatomic,strong) NSString *userName; @property (nonatomic,strong) NSNumber *age; @property (nonatomic,strong) NSString.. 더보기
서버개발자 그리고 아이폰 개발자 서버사이드 개발자에서 전문적인 아이폰 개발자로서 약 7개월정도가 지난것같다. 물론 이전에도 주말에 취미로 또는 회사에서 프로토타입정도로 아이폰 및 OSX에서 개발을 한적은 있지만 이렇게 풀타임으로 개발한적은 이번이 처음이기 때문에 기점을 올해로 잡는다. 그동안 아이폰 개발을 하면서 느낀것을 몇개 정리하면 1. 쉽지 않은 Objective-C개발 자바로 웹페이지를 개발하는데 있어서 소스 코드의 완성도는 뒤로 두고서라도 화면에 원하는 데이터를 표시하는데까지는 그다지 시간이 걸리지 않지만, 아이폰에서 원하는 화면을 만들기 위해서 선택할수 있는 방법은 많지가 않다. 뷰를 구성하는 컴포넌트들의 특성과 구조를 이해한다음에야 각각의 뷰를 화면에 붙일수가 있는데 애플이 제공하지 않는 뷰의 디자인을 수정하기 위해서는 더.. 더보기
소프트웨어에서의 추상화 그리고 상속,다형성,캡슐화 써니님의 추상화에 대한 글에 제글이 인용되어 있기에 다시한번 제 생각을 정리해야할듯 해서 글을 씁니다. 1. 추상화는 무엇? 이전의 글(추상화와 실용주의)에서 언급했듯 추상화란 인간의 본능이자 특성입니다. 우리를 둘러싼 복잡한 환경에서 좀더 현명한 판단을 위해 사물을 단순화 시키는 것을 말합니다. 우리는 추상화를 통해 사물의 특성을 뽑아내고 불필요한 부분을 제거합니다. 하지만 이런 추상화를 하는데 있어 중요한것은 하위 개념을 포함하는 개념을 추출하는데 있습니다. 2. 객체 지향이란? 객체지향이란 아래의 두가지 측면으로 생각해볼수 있습니다. a. 철학적인 측면 플라톤의 이데아론에서 말하듯 우리를 둘러싼 모든 것들은 이상의 것(이데아)에서 파생한것(객체)이라 보는데서 클래스와 인스턴스의 관계를 나타낼수가 있.. 더보기
정말 다형성(서브타입)이 IF를 줄일수 있을까? 얼마전 강규영님의 글 "OOP란 조건문(if)을 줄이는 것"을 보고 정말 서브타입 다형성(subtype polymorphism) 이 if,else를 줄일수 있는가 생각해보았다. 예를들면 아래와 같은 클래스가 있다고 생각을 해보자. 식사 { 밥() { if (아침) { return 빵과우유; } else if (점심) { return 짜장면; } else if (저녁) { return 삼겹살; } } }아침 점심 저녁을 비교하는 세개의 IF문이 존재한다. 이 클래스를 아래와 같이 Interface를 이용해 분리를 해보겠다. // 인터페이스 interface Food { eat(); } // 오전을 나타내는 클래스 class Morning implements Food { eat() { return 빵과우유;.. 더보기
객체 지향과 절차지향 단상. 오늘 갑자기 떠오른 객체지향에 대한 단상을 그림으로 옮겨보았다. (허접한 영어는 이해를..-_-) 쉽게 설명을 하자면, 현실세계를 컴퓨터로 구현하는데 있어서 먼저 현실세계의 요구사항 및 제약사항을 파악하여 정리하는 일 즉 모델링 이란 작업이 필요하다. 그런 뒤에야 정의된 사양에 맞추어 구현하는 작업 즉 구현작업에 들어갈수가 있다. 여기서 프로그래밍에 두가지 틈이 생기게 되는데 1. 실세계를 모델링하는데 있어서 누락되는부분. 2. 모델링을 구현함에 있어서 부족한 부분. 객체지향이 인기를 끄는 이유는 1과 2번의 효과적인 보완에 있다. 이전의 모델링에 비하여 현실세계를 좀더 가깝게 모델링할수가 있고, (OOAD로 통하는 UML , 객체지향 분석,설계 모델) 이전의 구현방법에 비하여 보다 충실하게 구현할수가 .. 더보기
프로그래밍을 하면서 수학과 포인터가 필수인가요? 최근 아는 블로거들 사이에서 이슈가 되고 있는 수학공식과 포인터에 관한 내 의견을 이야기하자면 참 쓸대없는 소모적인 논쟁인것같다. 먼저 프로그래밍을 할때 수학이 필요할까? 이 질문에 대한 답은 예전에 쓴 글(수학과 컴퓨터) 에서 이미 언급한적이 있다. 당신이 수식에 관련된 대상에 대해 프로그래밍을 한다면 필요하겠지만 그렇지 않다면 그다지 필요성은 못느낄것이다. 내가 지금까지 프로그래밍을 하면서 사칙연산 이상의 수학실력이 필요하다고 느낀적은 없다. 그럼 수학과 논리력과의 관계는 어떨까? 많은 사람들이 착각하고 있는 것이 있는데, 논리력과 수학의 관계는 인과관계 즉 필요조건이지 충분조건이 아니다. 말하자면 수학을 잘하는 사람은 논리력을 가지고 있지만 수학을 못한다고해서 논리력이 없다고 판단하는것은 잘못된 것.. 더보기
추상화와 실용주의 얼마전 써니님의 글에서 논란이 된 추상화란 단어에 대해 제 생각을 이야기 해야할것같아서 글을 적습니다. 먼저 많은 사람들이 오해하고 있는 점이 추상화는 뜬구름 잡는 이야기가 아닙니다. 전 오히려 추상화는 실용주의에 가깝다는 생각입니다. 알다시피 컴퓨터의 역사는 좀더 적은 명령어로 많은 일을 하기 위한 역사로 볼수 있습니다. 깊게는 cpu레벨의 수십개의 명령어(instruction)를 하나의 명령어(command)로 표현하거나 (MMX/SSE/SSE2), language레벨의 foreach , [1..10] 등이 있습니다. 추상화는 이처럼 좀더 편하게 , 좀더 효율적으로 원하는 일을 하기위한 실용적인 방법입니다. 그렇다면 어떻게 하면 좀더 편하고 효율적으로 일을 처리할수 있을까요? 이 질문은 소프트웨어 공.. 더보기