Swift와 [[Objective-C]]를 거쳐 최종적으로는 iOS 앱 만들기를 해보는 스터디. == Preface == * 읽는 법: 스위프터캘리프래질리스틱엑스피알리도셔스 ([http://www.youtube.com/watch?v=tRFHXMQP-QU 어원]) * 모집처: Slack #objective-c 채널 * 준비물: OS X Mavericks 이상을 돌리는 Mac. * 참여 예정 인원: [황현], [이원준], [최다인] === 스터디 목표 === * 우리 학부에서 운영 중인 iOS Developer University Program을 이용하여 무료로 실제 기기에서 디버깅을 해봅니다. ~~더 이상의 시뮬레이터는 naver.~~ 요건 옵션. * 결과적으로 Apple 기기를 위한 개발 언어는 Objective-C에서 Swift로 넘어갈 것입니다. 이에 대비하여 순수하게 Swift로 앱 만들기를 해 봅니다. == 활동 내역 == === 11월 14일 === ~~첫 모임이 예정되어 있습니다. 앞으로 무슨 요일에 모일 것인가, 어떤 방식으로 진행할 것인가에 대해 논의할 예정입니다.~~ 모임은 실패했지만, 시간은 정했습니다: '''금요일 오후 6시'''. === 11월 21일 === [[최다인]] 학우의 사정으로 펑. 대신 가내수공업으로 만든 교재의 일부를 배포했습니다. === 11월 28일 === Objective-C를 먼저 간단하게 배웠습니다. * Objective-C의 파일 포맷 : .m * 이유 : a부터 나열해봤더니 .m이 비어있길래 ~~야이~~ * Objective-C++의 파일 포맷 : .mm 사람은 객체죠 안에 저장하고 있는 값이 있어요 동작을 할 수 있죠 이렇게 해서 사람은 객체에요 여러분 세상에 존재하는 모든 것을 객체로 만들 수 있겠구나 이건 멍청한짓이에요 객체지향에서 그 컴포넌트를 객체로 만드는 것은 괜찮지만 그렇다고 모든 것을 객체로 만들어야 되느냐 그건 아니다 이 말이다 시뮬레이션 게임을 만들고 싶어요 비행기 비행기 날아다니는 게임 털ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 비행기를 만든다 비행기 객체를 만들어야 돼요 비행기 엔진 다 만들고 있고 비행기 꼬리 다 만들고 있고 여러분이 물론 이 게임이 목표하는 거에 따라가지고 얼마만큼의 객체화를 진행시켜야하느냐는 모두 다를 수 있어요 폭발해서 부품이 와아아아악 하고 날아가는 걸 만들고 싶어요 아 그럼 해도 돼 해도 돼 초보자들이 자주 하는 실수가 뭐냐면 모든 걸 객체화하려고해서 막 50개 넘어가고 막 하나같이 다 뜯어보면 마우스.자바 캣.자바 이런거 다 만들고 있다고 이러면 안돼 내가 C++에서 가장 까고 싶은건 friend가 왜 있냐는 거야 그런게 있을거면 public private는 왜 있어 Class Asdf { } 요걸 옵씨로 하는 법 자바는 요걸 한 군데 다 합쳐놨기 때문에 캡슐화가 어느 정도 안 되는 편이라고 블랙박스화가 안되잖아 숨겨지지가 않아 ~~앙대자나~~ 정의하고 구현이 떨어져있는거 구현은 떨어져있고 정의는 오픈이 돼있어서 개발자들이 아 이걸 써야겠구나 하고 아는게 명세라고 @interface Asdf 옵씨만의 특성이 또 뭐냐면은 내가 C에다가 씌웠댔지 new에다가 뭘 하는걸 instance화라고 한단 말이야 그 객체를 만드려면 new를 쓰잖아 그러면 설계도에서 tv가 뿅 하고 튀어나온단 말이야 옵씨에서는 그 과정을 해주는 애가 말이야 놀랍게도 root 클래스에 들어있단 말이야 여깄다 털 @in'''ter'''face Asdf 루트 클래스가 이 처음에 옵씨를 만들 때 +alloc을 만들어왔어요 얘는 malloc을 불러와서 클래스 크기만큼을 할당해주고 초기화해주고 얘가 없잖아 그러면 컴파일러에서 불평을 한다고 님 얼록 어디갔음 ~~아옳옳옳~~ 얘는 독특해 instance화를 하려면 자기 자신을 또 불러와야 돼 공중으로 날아간다고 컴퓨터를 켜는 걸 boot라고 하잖아 부팅 이게 뭐의 줄임말이냐 하면 bootstrapping 이게 뭔 뜻이냐면 부츠끈을 잡아당긴다는 거야 근데 웃기는 게 뭐냐며는 운영체제도 CPU 위에서 돌아가야 하는 프로그램이라고 이걸 읽어올라면 소프트웨어가 필요한데 이것도 똑같은 거라고 날아가는 거라고 이것도 불가능해보이지만 가능하잖아 그래서 공중으로 날아가는 것도 가능해 ~~공중으로 날아간다고 부터는 많이 잘라먹고 붙여서 날조된 부분이 있습니다~~ 써큘러한 그런 개념이 들어가 있기 때문에 사람들이 많이 착각을 할 수가 있어 NeXT라는 회사를 차리고 NeXT STEP이라는 운영체제를 만들어서 팔았는데 이 때 애플이 막 뭐라고 해서 스티브 잡스가 아 괜찮아 우리부터는 애초부터 싼 컴퓨터 만들어서 팔 생각 없어 차보다 비싼가? 암튼 이 넥스트스텝에서 아주 유능한 사람들을 모아서 만들었는데 이 회사가 아주 대단했어 얼마나 대단했냐 하면 유럽의 입자 가속기 있잖아 여기서 많이 사갔어 값을 알고 많이 사갔어 애플이 매킨토시가 완전히 망해가지고 아 이걸 어떻게 해야되나 하다가 OS를 밖에서 사오기로 했지 이 때 후보가 BeOS하고 NeXT STEP이 거론이 됐는데 당시에 CEO였던 사람이 BeOS를 찾아갔더니 가격을 너무 비싸게 불렀어 비싸가지고 아 좀 고려를 해봅시다 하고서는 넥스트로 갔어 ㅋㅋ스티브 잡스 말빨 알잖아 어썸한걸 보여주겠습니다 우워어 이걸 애플 CEO가 겪었어 이게 엔하위키에 보며는 누가 써놓은 일화가 있어 일화가 있는데 그런 거처럼 말빨에 넘어가가지고 이걸 사기로 했습니다 덤으로 잡스도 따라왔어요 ~~이걸 사시면 잡스가~~ iCEO라는 이름으로 돌아왔습니다 i는 임시 임시 CEO 그 때 딱 시작한 게 뭐냐며는 야 맥OS를 만들자 그래서 나온 게 Mac OS X 텐! 텐이라고 읽어야 돼 엑스 아님 ~~HeadFirst 부들부들...~~ 이 때부터 옵씨를 썼는데 옵씨가 좋은게 버튼 이런거 창 이런거 팔레트 있으면 캠버스 안에다가 딱 던져놓으면은 그게 딱 됐다고 GUI식 앱 만들기가 가능했어요 오늘은 하다보니까 역사 강의가 주가 되네 음 NSObject NSString NSArray 항상 NS가 붙는게 NS가 NeXT STEP의 줄임말이고 각 프레임워크에 접두어를 붙여서 충돌을 막았어 alloc을 쓰려면 최상위 클래스가 필요하다고 했지 상속 문법이 @interface Name:NSObject 이런 식으로 시작함 그리고 이제 어 오늘은 그냥 간단하게 짚고 갈거니까 나중에 혹시 문법에서 궁금한 게 더 있으면 내가 제로위키에서 옵씨 항목에 정리해 놓은 거 읽어보면 되고 생각해보니까 내가 되게 무책임하다 "왜 웹처럼 일방적으로 듣는 수업이 됐지" 어 그거 내가 문제라고 생각해 내가 뭘 좀 읽어보고 오자고 했어야 됐는데 오우 시간 다 되가네 그래서 암튼 이제 생각을 해볼 게 옵씨만의 메소드 이름 옵씨는 처음에 만들 때 스몰토크라는 언어의 문법을 그게 굉장히 아름다운데 그걸 C에서 써보자고 해서 만든 거거든 obj methodname 이런 식으로 함 괄호같은 거 없어 이때 인자를 넘겨야 할 거 아냐 이때 쓰는 방법이 obj arg1:3.2 arg2: 띄어쓰기가 되게 중요한거야 이게 옵씨의 특징중 하난데 이러다보니까 메소드 이름이 되게 길어질 수밖에 없어 예를 들어서 음 아니다 메소드 이름 자체가 굉장히 자기 설명적일 수밖에 없다고 이거를 까는 사람도 있고 뭐 이렇게 거지같은 문법도 다있냐 길다고 쓰기 힘들다고 거지같다고 까는 사람이 있는 방면에 ~~타이젠을 열었더니 스팀잌ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ~~ 문서 안봐도 좋다! 도 있고 오 좋다 마이너해! 좋다! 하는 나같은 사람도 있는 거야 예를 들어서 NS에서 Substring을 하는거 음 어떤 메소드가 좋을까 getSubstring 실제론 없지만 내가 그냥 있다고 쳐볼게 여기다가 버퍼를 집어넣을거야 NSString getSubstring:char* inRange: 얘 이름은 getSubstring:inRange: 이게 얘 메소드 이름이 돼 띄어쓰기 없이 굉장히 독특하지 그래서 얘를 어떻게 쓰느냐 간단하게 쓸 때는 [str getSubstring:buf :... NSString.getSubstring(_:buf,inRange:~~) 뭔가 되게 미묘하게 한 시간을 보냈네요 준비가 안 돼서 아 이런 말 하면 안되는데 김민O씨처럼 아이고 우리가 일단 읽어와야 돼요 책을 iBooks라고 있을거야 그걸 들어가서 The Swift Programming Language 장난으로 다 적었는데 ㅋㅋㅋㅋㅋㅋ나중에 정리하겠습니다 - [최다인]