8월 23일 네이버 그린팩토리에서 진행된 iOS Tech Meetup 정리입니다.
참가자분들의 경험과 현업 개발자의 생각을 들을 수 있어서 좋은 기회였다고 생각합니다.
iOS개발자의 입장에서 iOS를 주제로 한 세미나가 많지 않아서 아쉬웠는데
이번 Tech Meetup에서 그동안 궁금했던 의문들을 해소할 수 있었습니다.
ZeroPage 안재형 님
elevn이라는 앱을 개발하며 경험한 ViewController 관리법에 대한 발표였습니다.
11초 길이의 video를 기반으로 한 SNS.
영상과 gif를 핵심적으로 다루는 경험.
- 메모리관리
- 영상,gif 리스트 메모리 많이 먹는다.
- Alloc과 Free해야 하는 시점이 중요하다.
- 메모리 누수 막기 위해 할당된 메모리 재사용해야 한다.
- 코드의 재사용(객체지향 프로그래밍)
- 한 번 만든 클래스의 재사용성을 높인다.
Allocate once, Use forever.
UI에서 같은 코드가 반복되기 떄문에 싱글톤 패턴으로 해결함.
shared
이라는 키워드로 싱글톤 구현
ViewController가 Disappear되어도 메모리에 남아있다.
- 메모리 사용량 줄인다.
- 메모리 로드 시간 절약.
- shared된 뷰컨은 Lifecycle에서 unload되지 않기 때문에 로드 시간 빨라짐.
-
싱글톤 뷰컨이 많아지면 오히려 메모리 낭비.
- 안쓰는 뷰컨도 메모리에 올라가기 때문.
-
매번 뷰컨을 세팅해야함.
- viewDidLoad가 실행되지 않기 때문에 직접 초기화해야함. 번거로운 작업.
-
FP로 메모리를 관리할 수 있음.
-
클로저 쓸 때 ARC 주의해야함!
-
weak self 는 self의 rc를 증가하지 않고 사용할 수 있다.
- Optional으로 접근해야함.
Protocal Oriented Programming 관점으로 개발.
Protocol : Java의 interface 개념
한 화면에 맞춘 뷰컨을 만들면
- 코드 복잡도 높아지고
- 재사용성 저하.
이 문제를 해결하기 위해
필요한 기능에 대한 프로토콜만 사용해서 코드 재사용성 높인다.
- 프로토콜 만들때 변수,메소드 네이밍 중요!
- 메모리 관련부분은 변하지 않음
Comment Documentation에 대한 짧은 소개.
참고자료 : Xcode Markup Formatting Reference
SOPT 박성준 님
맥북, 컴퓨터 전공 => iOS 개발자
SOPT에서 iOS개발을 시작함!
기술적인 성장뿐만 아니라 같이 성장할 수 있는 사람들을 알게 되었다.
혼자하는 개인프로젝트는 한계도 있고 동기부여가 부족했는데
같은 팀과 공모전도 함께 참가하면서 각자의 분야에서 성장할 수 있었고
서로 피드백을 주고받을 수 있어서 좋았다.
실제 디자이너에게 받은 요청.
화면 바꿀 때 슉- 하고 샤샥- 하는 애니메이션을 만들어주세요!
모든 포지션과 유기적으로 소통하는 클라이언트 개발자가 다른 포지션 사람과 간격을 조율할 수 있지 않을까? 하는 의문을 가지게 됨.
코디네이터
: 다른 분야 사이에서 의견을 조율하고 아이디어를 극대화하는 역할.
권태기가 오게된 두가지 이유.
- iOS 개발만 해왔다.
- 비슷한 프로젝트 개발 반복. 발전이 없는 것 같다는 생각.
새로운 분야와 접목시키면 재미있을 것 같다.
블록체인을 이용한 iOS 프로젝트를 진행해보자!
새로운 시도, 새로운 지식을 통해 계속 공부하게 만드는 자극제 역할.
NAVDR MTS 김창기님
슬라이드내용이 많습니다! 발표자료 참고해주세요
어떤 일을 하고 어떤 공부를 해야하는지
모바일 개발자가 하는 일 : 사용자의 손끝에서 동작하는 코드를 작성.
UI동작으로 성취감을 느낀다.
사용자 인터렉션 다루면서 보람을 느낀다.
회사에서 iOS개발자들은 크게 다음과 같은 세가지 일을 한다.
- App 개발
- Framework 개발
- 일정 규모 이상 회사에서 가능.
- Prototyping
- 개발과 검증 반복
각각 장단점이 있다.
세부적으로는
- 인터넷 서비스
- 단일 유틸리티 앱
- 하드웨어 연동
- 기타
-
제한된 리소스
- 모바일에서 메모리 사용제한
-
제한된 화면 크기
-
사용자의 환경에서 동작
- 문제가 발생했을 때 디버깅하기 어려움
-
Apple이 주도하는 시장과 환경
-
Instruments
- 프로파일링, 디버깅 툴, 성능 측정
-
Cocoapods, Carthage
-
Git, SVN
-
Swiftlint, Jenkins
-
Swift, Objective-C, C, C++
- iOS 개발자에겐 java보다 C/C++이 더 유용하다.
-
Object Orinted Programming
- SOLID
-
Protocol Orinted Programming
-
Functional Programming
-
Reactive Programming (Optional)
- OOP, FP를 제대로 이해한 다음에 공부하는것 추천.
- RP 코딩을 배우는게 아니라 의미를 이해하고 사용해야 한다.
iOS개발자는 기초 CS공부하는게 우선!
CS 기초과목 깊이있게 공부하는게 중요하다고 생각한다.
개인적으로 디자인패턴만 공부하는것 말리고싶다.
경험 없이 하는 공부는 패턴암기일뿐
OOP를 잘 이해했다면 따로 공부할 필요는 없다고 생각함.
- MVP, MVVM, MVC, VIPER
OOP에 대한 이해가 있으면 굳이 특정 Architecture에 집착할 필요가 없다.
Architecture 경험하면서 장단점과 특징을 파악하는게 중요함.
OOP 이해가 없으면 공부를 해도 얻는게 없음.
- HTTP
- Live Streaming
- Socket Programming
- 기본적인 내용들
iOS에서는 URLSession과 NSStream가 있는데
URLSession을 모르고 Alamofire만 쓰는건 아쉽다고 생각합니다.
조금 더 관심이 많다면
-
CFNetwork, POSIX Socket
-
AFNetworking, Alamofire
- 학생 입장에서 안쓰는 것 권장? 결과물을 내는데에는 적합하지만 학생입장에서는 배우는 경험이 줄어듦.
- 편의성을 위한 오픈소스 사용은 줄이는게 실력 향상에 도움됨.
- Concurrent Programming - 신입 개발자들 취약한 부분
Thread, Lock, Semaphore, Spin Lock 이 무엇인지
적어도 한 번씩은 경험해봤으면 좋겠습니다!
- GCD, Operation queue, POSIX Thread
-
CoreData
- 단순히 써본 경험을 넘어서 이해하고 설명할 수 있는 수준까지
-
Realm
- 다른 DB와 비교했을 때 어떤 점이 다르고 어떻게 써야 하는지
-
기타 persistency 지원 library
- GUI
- 전반적인 gui의 이해. 터치, 음성 등등...
- HCI
- CoreAnimation
- Lottie
- OpenGL
- Metal
- Unit Test
- UI Test
- extensions
- watchOS
- tvOS
- macOS - 개인적으로 권장!
- 데스크탑 앱 개발을 해보면 생각의 범위가 넓어지는 경험을 할 수 있다.
Swift가 몰고 온 바람인 FP, RP
-
FP은 가능성 높다고 생각합니다.
-
RP은 iOS에서 아직은 물음표입니다.
재미있고, 쉽고, 편하게 개발할 수 있다.
하지만 항상 옳지는 않다!
RxSwift: 네이버 전체 프로젝트의 25%가 사용한다.
- 최신기술에 대한 호기심
- async처리 편의성
- Declarative Programming
제대로
공부하기위해 많은 시간 필요- 노력에 비해 얻는 것이 많지는 않음, 러닝커브가 크다.
- 유지보수에 대한 우려
-
개발자 최신기술 습득은 숙명
-
습득 가장 좋은 방법은 직접 사용해라
- 남이 좋다고 하는 얘기 듣고 무조건 믿는것은 지양
-
트렌드 민감하게 적용한다 == 실패의 위험에 노출
- 중요한 프로젝트는 트렌드 민감하게 하면 위험하다.
- 개인프로젝트에서 적용
-
중용의 자세
많은 오픈소스가 사용되면서 전략적 판단이 필요하다.
- 사용만? 컨트리뷰션도?
- 어떤걸 쓰고 쓰지 않을지 판단
쓰지 않는다면 직접 구현하는 방법도 고려.
- 작업 속도, 편의성
- 중복구현 불필요
- 핵심기능이 아닐 때
- 신뢰하기 힘든 오픈소스
- 제공하는 기능 부족
- 새로 구현? 커스터마이징? 컨트리뷰션?
- 해당 기능은 내재화시킬 필요가 있음
- 핵심기술은 가져와서 습득!
- 협업 어떻게 하나요?
팀내 토론을 통해 결정해서 팀별로 다르지만 대부분 깃헙으로 한다.
- 실무에서 어려운 점은?
내가 작성하는 코드를 다른사람에게 설득하는 것.
정답이 없는 문제이다보니 사람들의 생각, 차이를 좁히기 위해 설득을 많이 하는 편이다.
- 현업에서 개발자로서 중요한 점
내 코드에 대한 이해가 중요하다.
- 네이버의 특징
글로벌한 경험에 도움이 될거라고 생각한다.
- 실무 개발 팁
코드에 대한 의문을 가져보는 것.
개인의 코딩량을 늘리는 것.
- 실력있는 개발자가 되기 위한 자세
애플 문서를 찾아서 공부하는 습관.
몰랐던 새로운 기능들 공부하게 됨!
스택 오버 플로우 코드 복붙은 실력이 늘지 않습니다.
- 학생때 미리 했더라면 하는 경험?
- 앱 5개 런칭
- git 사용법
- Xcode에 있는 Instrument 사용
- 안드 공부보다는 서버, 머신러닝, 블록체인 공부하는거 추천!
같은 시간을 쓴다면 비슷한 분야보다는 새로운 분야 공부하는게 도움된다고 생각.
- iOS 개발자 전망
한 회사에 종속된 플랫폼. 장래에 대한 불안 매우 인정.
어차피 미래는 아무도 모르기 때문에 얽매일 필요 없다.
중요한 건 가라앉는 배에서 빠르게 탈출하는 것.
기본기 되어 있으면 안드로이드로 갈아타는것 어렵지 않을 것이다.
같은 노력을 들이면 iOS 개발이 더 좋은 퍼포먼스를 낼 수 있다.
- 개발자에게 어떤 가치를 높게 보나요?
바로 개발할 수 있는 사람 보다는 입사해서 얼마나 빠른 속도로 성장할 수 있는지.
가장 중요한 것은 공부하는 방법을 공부. 어떻게 빠르게 공부하는지 고민.
기초 CS 과목 학점 어느정도 보는편
RxSwift을 얼마나 사용하냐는 질문에 대답하기 위해서
김창기님께서 네이버 전체 iOS개발자에게 조사해서 알려주신 부분이 인상깊었다.
패널토크 진행을 매끄럽게 해주셔서 좋았고 다양한 의견 들을 수 있었다.
특히 패널분들에게서 학생 개발자들에게 친절하게 진로상담해주는 선배같은 느낌을 받았다.
공부해야할 내용을 정리하면서 이렇게 많이 공부해야돼?라는 생각이 들었지만
구체적인 분야와 키워드를 알게되어서 다음에 어떤 걸 공부해야 할지 확실하게 알게 되었다.
iOS개발자가 가지고 있는 비슷한 생각들(애플이 망하면 어쩌지?)에 대해서 시니어 개발자분들의 대답을 듣고 막연한 고민이 사라졌다.
고민할 시간에 다른 공부를 더 하자!
오픈소스를 가져다 쓰는 것 줄이고 직접 구현해서 개발하는 경험을 시도해봐야겠음.(Alamofire -> URLSession)
프로젝트 안정성의 관점에서 본 RxSwift에 대한 생각을 들을 수 있어서 기초에 더 집중해야겠다는 생각을 하게됨.
사전질문에 엄청 자세하게 답변해주셨는데 나는 사전질문에 참가하지 않아서 아쉬웠음.
-
네이버에서 iOS 개발을 하려면 진짜 잘해야 하겠구나.
-
Xcode에서 Instrument 라는게 있다는것 처음 알게 되었음.
-
역시 애플공식문서와 가이드라인을 보고 공부하는게 정석이다.