Yagom님의 테크 세미나 - iOS 개발 어떻게 해야 하나요?

 

부제: 뭣이 중헌디 ?

 

Step1. Swift 공부하고 싶은데 뭐부터 하면 좋을까요 ?

질문 자체부터 어렵다.

여기에 대해 책을 사서 문법 공부를 하면 됩니다라고 얘기할 수 밖에 없어서.

근데 이렇게 물어보는 사람들의 진짜 의도는 앱을 어떻게 잘 만드냐 이다.

 

앱을 잘 만들기 위해서는 크게 두 가지가 필요하다.

언어를 알아야 하고 프레임워크를 알아야 한다.

그것을 구분하지 못하는 사람들은 미리 구분하고 시작해야 한다.

쉽게 비유를 통해 설명하자면

한국에서 살아가면서 우체국, 경찰서 같은 시스템은 프레임워크이고,

그 시스템을 이용하기 위해 사용하는 한국어 는 언어다.

iOS 앱을 만들기 위해서는 코코아터치 라는 프레임워크를 알고 있어야 한다.

이를 위해 쓰이는 언어는 swift 또는 Objective-C 이다.

 

생각해보자.

당장 다음주부터 영국에 가야한다면 뭐부터 할 것 같나?

입국절차에 대해 알아본다? 간단한 회화를 공부한다? 등등의 생각을 할 것이다.

가장 쉬운 건 간단한 인사부터 배우면 된다.

hi, nice to meet you 등. 이것을 언어로 따지면 함수나 클래스 정도 될 것이다.

그런데 이 정도만 배우고 그 나라에서 살아보면 생각치 못한 문제들이 발생한다.

hi 밖에 안 배웠는데 hello 라는 단어를 쓴다는 것 같은 변칙들.

이런 변칙들 같은 경우는 부딪히면서 배워야 한다. 특히 swift 같은 언어 공부할 때 .

또한 법원에 간다든지 경찰서에 갈 일이 발생한다면?

이런 드문 케이스들을 대비하려면 상황극을 해보면 된다.

이것이 프로그래밍에서는 토이 프로젝트이고, 그 안에서 배울 수 있는 것들이 프레임워크 내 여러 기술이다.

 

Step 2. 차근차근 시작해보기

들어가기에 앞서 자신이 프로그래밍이 아닌 창업을 해보고 싶다거나 하면 웹앱을 배우는 게 더 나을 수 있다는 것을 말해두고 싶다. 좀더 빨리, 많은 것을 소화해야 하는 경우에는 그쪽이 더 낫기 때문이다.

 

만약에 여러분들이 기계를 샀다고 하자.

여러분이 만약 에어컨을 샀다 라고 한다면 그 작동법을 익히기 위해 설명서를 봐야 할 것이다.

앱을 만들 때에도 이것처럼 설명서를 먼저 봐야 한다.

방금 한 말이 당연한 소리지만, 대부분의 입문자들은 마음이 급하기 때문에 무조건 빨리 결과를 내보고 싶어하기 때문에 하는 말이다.

단계가 필요하다는 것을 인정하고 기다릴 줄 알아야 한다. 열정과 조급함 만으로는 안 되는 게 있다.

오히려 있어보이는 것을 빨리 만들어내고 라이브러리 대충 갖다 쓰는 것의 반복은 배움이 더 늦어지는 결과로 나타난다.

그렇기 때문에 치트시트 같은 것에 의존하지 말고, 설명서를 차근차근 읽어보면서 이해하고 사용해야 한다. 그래서 내가 직접 치트시트를 만드는 사람이 되어야 한다.

apple은 계속 얘기하는 '설명서' 같은 개발자 문서를 제공한다.

 

그런데 설명서를 볼 때, 한글 번역본은 안 봤으면 좋겠다. 한글 번역본은 오역이 많기 때문이다.

만든 사람들 만큼 정확한 용어로 표현할 수 있는 사람은 없기 때문이기도 하다.

그리고 설명서부터 접근하기가 꺼려진다면 간단한 튜토리얼 영상을 보고 문서를 읽어도 좋다.

Edwith 부스트코스에 내(yagom)가 올려놓은 iOS 기초수업이 있으니 그것을 봐도 좋다.

 

<<공식 문서 - www.edwith.org/downloadFile/fileDownload?attachmentId=36707&autoClose=true >>

 

Step 3. 채워나가기

당장 내 앱을 만드는 게 급하지 않으면 잘 만들어진 앱을 따라 만들어 보는 걸 추천한다.

애플이 만들어낸 캘린더, 지도, 사진 등 기본 앱들을 추천한다.

이 앱들 같은 경우 외부 라이브러리를 많이 사용하지도 않았고 기본 앱이기 때문에 필요한 컴포넌트들을 잘 활용하여 만든 앱이기 때문이다.

 

 

여기 있는 앱만 만들 줄 알아도 혼자 앱 만들 수 있는 사람이 된다고 생각한다.

혹시나 선택지가 너무 많다면 쉬운 것부터 하자.

쉬운 순서대로 나열하자면

사파리, 사진 - 지도 - 연락처 - 캘린더 정도라고 생각한다.

 

3.1 기능 구현에만 치중하지 않기

기능 구현에만 치중하지마라. 기능 구현에만 치중하면 무너지게 돼 있다. 원리를 이해해야 한다.

기능 구현만 할 줄 아는 사람은 코더 이다. 코더를 조금 나쁜 의미에서 사용했는데, 아무튼 이 코더들은 해야하는 과제가 조금만 변형돼도 기능구현에 애를 먹는다.

이 코더를 비유적으로 표현하자면 백종원의 요리 레시피만 할 줄 아는 사람이라고 표현하고 싶다.

4인분 레시피를 배운 사람은 4인분이 아닌 10인분을 해야 하는 경우나, 특정 재료에 대한 알러지 때문에 요리 재료 중 일부를 빼야 하는 경우 음식을 망치는 것과 마찬가지이다.

 

대신 여러분이 되어야 하는 것은 프로그래머이며, 프로그래머는 원리를 이해하는 사람이다.

이 원리를 이해하기 위해 재료에 대한 책을 먼저 보고, 레시피를 따라하면서(토이 프로젝트를 만들어보면서) 이해하는 게 좋은 태도다.

재료에 대한 좋은 책은 역시 개발자를 위한 공식문서, 레퍼런스 도큐먼트 같은 것들이다.

치트시트는 백종원 레시피 정도로 생각하면 되겠다.

 

프로젝트를 해보고 나서 문서를 찾는 사람도 있는데, 이건 취향이니 뭐라하지 않겠다.

다만 왜?를 생각하지 않은 코드는 철근 없는 콘크리트와 같아서 무너지게 돼 있다는 점을 명심하자.

 

step 4 자랑하기, 칭찬해주기

자신이 성공적으로 끝낸 프로젝트가 있다면 마음껏 자랑하자.

다만 프로그램 모르는 사람들에게 자랑하지 말자.

그들 눈에는 초보자가 만든 프로젝트가 '겨우 이것' 정도로 보일 것이기 때문이다.

또한 동료가 자랑하면 아주많이 칭찬해주자.

 

Step 5 내가 원하는 것 만들기

만들고 싶은 게 없는데 프로그래머를 하겠다? 다른 직업을 알아보자.

프로그래머가 되고 싶은 사람들은 항상 뭔가를 만들어보고 싶은 욕구가 있어야 한다.

 

다만 프로그래머는 기획자도 아니고 사업가도 아니다.

만들고자 하는 것이 멋진 아이디어일 필요도 없고, 돈이 꼭 돼야 하는 것도 아니다.

 

만약 기본앱을 제외하고 스토어에 올라 와 있는, 이미 만들어져 있는 앱을 구현하고 싶다면?

카톡이나 페북 같은 것을 따라 만들면서 모든 기능 구현해야 할까?

말도 안 되는 소리. 핵심기능 하나만 골라서 구현해보도록 노력하자.

 

Step6. App Store에 올려보기.

작게라도 뭔가를 만들어봤다면 앱스토어에 올려본다.

배포전과 배포 후는 뭣을 신경써야 하는지, 과정은 어떻게 되는지를 배울 수 있을 것이다.

 

만약 남의 코드를 많이 썼는데 소송이 들어오지 않을까 걱정된다고?

그 상황까지 가면 그건 정말 성공한 앱인거다. 그러니 큰 걱정은 하지 말자.

 

마지막으로 앱스토어에 올린 앱에 대해 피드백이 오면 감사하는 마음으로 받아들이자.

그것이 악플이라 하더라도 피드백이 오면 감사해야 한다.

 

Step 7. QnA

Q. 좋은 ios 개발자와 나쁜 ios 개발자는 어떤 부분에서 차이가 나요?

(현업에서 꼭 필요한 ios개발자가 되고 싶은데 그건 어떤 개발자인가요 ?)

 

질문을 재해석하자면 좋은 개발자와 나쁜 개발자는 어떤 부분에서 차이가 나나요? 정도로 생각된다.

비교하자면 이렇다.

 

나쁜 개발자 : 자기 얘기만 함. 기획자가 뭔갈 가져오면 일단 안 된다고 하거나 전문적인 용어를 써서 찍어누르려고 한다. 커뮤니케이션을 할 줄 모르는 사람이 나쁜 개발자이다. 컴퓨터 공학자라는 것은 사람을 위해 기술을 사용하는 것이기 때문에 사람들끼리 잘 소통해야 한다. 아무리 잘나도 혼자 프로그래밍 하는 사람은 지친다. 슬기롭게 같이 프로그래밍을 하는 개발자가 좋은 개발자이다.

 

현업에서 꼭 필요한 개발자는 프로그래밍을 모르는 사람들에게 혹은 다른 아이티 분야에서 일하는 사람들에게 잘 풀어서 설명할 줄 아는 사람이다. 그러면 어디서든 환영받는 사람이 될 수 있을 것이다.

 

Q. 같은 기능이라도 최신기술을 통해 빠르고 가볍게 만들 수 있는 개발자가 좋은 개발자인가요?

 

정말 상황에 따라 다르다. 만들고자 하는 프로그램의 성격에 따라 다르다.

빠르게 만들 수 있다면 스타트업 같은 데서 좋아할 수 있다.

그러나 안정성을 요구하는 금융권 같은 곳에서는 느려도 안정적인 기능 구현을 할 줄 아는 사람을 원할 것이다.

 

Q. 객체지향 프로그래밍을 먼저 학습한 후 iOS를 공부해야 하나요?

 

애플의 문서를 보면 객체지향이 뭔지 알고 있다는 전제 하에 설명하는 경향이 있다.

객체지향부터 공부하는 게 맞는 것 같다. 객체지향의 사실과 오해 라는 책을 추천한다. 대신 책은 완전 입문용은 아니고 개발 경력 1~ 3년차에게 좋다고 생각한다.

 

Q. 좋은 코드는 뭔가요?

 

상황에 따라 다르다. 정답이 없다. 프로그래밍에서 모범답안이나 정답을 찾으려 하지 마라.

가독성이 좋은 코드를 구현하려고 노력하다 보면 좋은 코드가 나오지만 무조건 가독성이 좋다고 좋은 코드는 아니다.

좋은 코드라는 건 조직 문화마다 다르기 때문에 쉽사리 말할 수 없다.

다만 하나 추천하고 싶은 책이 있다. 읽기 좋은 코드가 좋은 코드다 이다.

 

Q. objectiv-C 는 필수인가요?

 

언어는 수단일 뿐이다. 좀더 깊게 알아야 하는 것은 프레임워크이다. swift로 충분.

swift로 프레임워크를 익혔다면 나중에 오브젝티브 씨를 배워도 충분하다.

 

Q 안드로이드 개발자와 IOS 개발자의 기본적인 프로그래밍 철학 차이는 무엇일까요?

 

단지 내 생각이지만 참고해달라.

애플 - 폐쇄적. 자신들이 원하는 방향으로 driven하려고 하고 매끄럽게 표현하려고 한다. 버전별로 호환되는 게 많다. 디바이스도 한정적이기 때문에 원하는 방향으로 끌고 나가기가 쉬워진다.

안드로이드 - 오픈해놓은 상태로 너네들이 알아서 비벼먹어라.는 경향이 강하다. 버전별로 코드 분기가 많다.

 

Q.친구들과 함께 프로젝트를 진행하다보면, 각각의 뷰를 구현하고 합쳐야 할 때가 있는데 그 경우에 어떻게 협업이 진행 되어야 하는지 궁금합니다. 혼자서 따라만들어 볼 때에는 하나의 프로젝트 파일로 앱을 제작해봤었는데, 친구들이랑 합치려고 보니까 여러개의 프로젝트 파일이 있고 어떻게 합쳐야 할 지 고민이 생기더라구요 ㅠㅠ

 

하나의 프로젝트를 누군가 만들어서 git에 공유해서 pull request를 보내고 merge 하는 방식으로 하면 된다.

다만 storyboard는 같이 만지면 충돌이 나기 때문에 검색을 통해 storyboard 작성시 유의사항에 대해 알아보자.

 

Q. Flutter에 대해서는 어떤 평가를 내리나요?

 

사업을 빠르게 시작하기에는 좋다고 생각은 한다.

그러나 API 에 대응하는 게 native 보다 느릴 떄가 있고 native 쪽에 이해가 부족한 경우 문제를 해결하지 못하는 경우도 많다. 제약도 많이 생기고. 따라서 디바이스만의 특징을 잘 살리려면 native로 돌아가는 게 좋다.

webapp 도 같은 맥락으로 생각한다.

 

Q. 강의찍으며 힘들었던 점?

다 힘들다.

5분짜리 영상? 5시간은 매달려서 작업했다...

말하고 싶은 내용을 준비하고 검증하는 데 아주 많은 시간이 든다.

영상을 찍다가 NG가 나면 편집하고 리뷰하는 데에 너무 많은 시간이 든다.

 

Q. iOS 개발자로서 iOS앱 중 인상적인 앱 있으신가요?


 

부정적으로 인상적인 앱이 있다. 특정하기는 어렵지만 UI, UX 하나도 신경 안 쓴 앱들.

HIG(Human Interface Guideline) 은 프로그래머, 디자이너, 기획자 모두 봐야 하는데 프로그래머는 디자이너가 보는 문서라고 생각하고 디자이너는 프로그래머가 보는 문서라고 생각하고..

여러분은 HIG 문서를 읽고 UI, UX 를 고려하는 프로그래머가 되길 바란다.

 

<<HIG 문서: developer.apple.com/design/human-interface-guidelines/ios/app-architecture/navigation/ >>

 

Q. UI Kit vs Swift UI

1년 안에 취업이 급하다. 그러면 SWIFT UI만 배우는 것을 추천한다.

다만 API가 덜 안정돼 있고 기타 문제들이 있기 때문에 둘 다 배우는 것을 추천한다. 여유가 된다면.

 

야곰님 좋은 강연 감사합니다 !
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom