본문 바로가기

Activities

[부트캠프] iOS 현대 자동차 소프티어 2기 부트캠프 1주차!!! 느낀점 | 여담

728x90

 

원래 8주차를 완료한 후에 느낀점을 남기려고 했는데 첫 주에 경험한 것이 많았고 까먹지 않기 위해 이렇게 1주차 만에 느낀점을 작성합니다.

이번 주는 주제와 함께 키워드가 매일 새롭게 주어집니다. 이전 요일에 구현했던 기능에 추가 추가... 그리고 주제, 요구사항을 해결해나가야 합니다. 그룹원과 함께요.
그룹원들과 아침에는 오늘 할 목표를 각자 말합니다. 중간에 오늘의 주제를 해결하기 위해 개발하면서 어떻게 구현해야 효율적으로 구현할 수 있을지 의견을 듣고 공유합니다. 하루가 끝날 때 쯔음.. 그룹원과 회고를 합니다!!

 

iOS를 공부하면서 궁금한게 정말 많았는데 쌓여만 갔습니다. 개발, 면접 경험, 회사에서는 어떻게 실무 프로젝트를 진행해가는지 등등등.... 첫 주에 만난 그룹원들은 정말 다양한 경험을 했더라구요.. (틈틈히 기회를 봐서 궁금했던 질문을 하며 해소할 수 있었습니다. ㅎㅎ)

 

1주차의 마지막 이틀에는 [iOS Master | JK(김정)]님이 피드백과 질의 응답 시간을 해주셨는데 이때 또 평소에 개발하면서 그리고 부트캠프 활동하며 개발했던 궁금했던 것들을 것을 알 수 있었습니다. 무엇보다... 부트캠프 2기 iOS 팀원들 전부 일일이 PR에 대한 코드 리뷰 해주셨는데 정말 좋았습니다. 제꺼도 그렇고 다른 분들의 코드 리뷰를 봤는데 몇몇 리뷰는 이해가 안갔는데 피드백과 질의 응답 시간에 알려주셨습니다. 


요일 중간 중간에  JK님이 오늘 해결해야 할 주제에 적힌 키워드에 대한 내용을 알려주셨는데,, 내용이 많이 깊어서 물에 빠질 뻔 했습니다. 부족한 부분들을 알게됬고.. 공부해야 할 목표가 더 생겨나버렸습니다.

 

제가 생각했던 것보다 분위기는 엄숙하지 않고 자유롭다는 생각이 들었습니다(첫주라 그런가..) Daily 해결해야할 주제에 대한 요구사항도 별로 없었습니다. 물론 그것을 하기 위해 부가적인 개념들을 자연스레 공부하게된다는 이상한 사실..
그룹원들과 함께 대화하고 상의하며 하나 하나찾아 나가는데, 요구사항에 관련된 개념도 자연스레 학습하고, 그룹원들과 대화하고, "아하" 이해하고 의 반복이었던 것 같습니다. 이게 제일 좋은 것 같습니다. 다른 그룹원들도 보면 공통적인게,, 다들 몰입, 집중 되게 잘한다는 것을 느겼습니다. 근데 막 분위기가 딱딱하지는 않았습니다.

매일 오늘의 주제, 미션? 에서 구현 파트가 있긴 한데.. 이번에 좀 많이 배우고 싶어서 기능보다 개념을 먼저 공부를 했더니 기능 구현이 많이 밀렸네요.. 아마 iOS 부트캠프원들 중 제일 많이 밀렸을 것 같다는 생각이 듭니다. 기능도 그냥 구현하면 할수있지만 뭔가 개발하면서 사용하지 않앗던? 낯선 개념을 다뤄 익숙해져보고 싶었습니다.

OOP를 적용한다고 가정하고, 제가 해보고 싶었던 것은... parent에서 정의한 객체는 자식이 상속 받았을때, parent에서 정의한 공통 변수 타입이 딱 정해진 Int, String등의 타입이 아니라 서로 다른 자식 객체가 받았을 때 객체에 요구되는 해당 객체만의 타입을 지정해 사용하고 싶게 하도록 구현하고 싶었습니다. ("그럼 자식 객체에서 변수 만들면 되지않나?" 서로 다른 자식 A class:T, B class:T .. A, B 객체들이 공통적으로 갖어야 하는 변수가 있을 떄 T에 두자! 근데 A객체일떈 T의 특정 변수가 A객체에 맞는 타입으로 지정되고, B는 B에맞게 지정되고 를 구현해보고 싶었습니다.) 그렇게 모델링한 객체가 원래는 정말 간단하게 구현할 수 있었긴한데..(복습겸 이것저것 다 넣고 에러나고 복습 완료+_+).

모델링 후반쯤 느낀게 "타겟을 잘못 잡았다" 근데 이미 엎질러져버려서 되돌리지 못했습니다. 그 객체와 관련된 타입의 관계가 형성되어서ㅠㅠ. 복잡해진 코드였는데 추후 PR했을 때 피드백을 주셨고 코드 리뷰를 생각하면서 적지 않은 시간 리펙터링을 한 것 같습니다. 코드리뷰와 제가 짠 코드를 되돌아보면서 리펙터링을 했고, 근데 또 PR올리기 전에 pull받았는데 또 .pbxproj충돌이 나버려서 충돌 해결을 하는데 시간이 좀 걸렸네요.. 매번 PR할떄마다 나만 이런거 같은데.. PR의 코드 리뷰 읽다보니 PR된 것을 제 로컬에 git pull안했나,,, 기억이 잘 안나네요 OTL(예전에 처음 .pbxproj 충돌이 났을때 진짜 한 6시간정도인가.. pbxproj 잘못 지웠어서 다시 풀 받고 5개 파일 복사해놓고 될 때까지 고친기억이..읗)

 

원래 깃 충돌이 나면 "아 내가 뭐 잘못했구나, 큰일났다"라는 생각을 항상 품고 있었습니다. 협업시 풀리퀘할떄도 순서대로 하자! A가하면 B는 머지 후 풀리퀘하자 이런 규칙을 세웠고,, "그럼 현업에서는 어캐하지" 그리고 그 의문증은 계속 품고 있었는데 "JK님의 설명으로 해결됬습니다" 회사에서는 내가PR올린 후에도 누군가 브랜치를 파서 작업하고 코드는 변경되는 중이라는 것을,,, 그래서 충돌이 나쁜게 아니라 어찌보면 당연하다는 것을 알게 되었습니다. (읏 Tuist공부해야겠다..공부해야할 리스트 += 1)

 

OOP 관련해서 단순 호기심 때문에 이런 도전을 한 이유도 있는데, 다른 이유로는. 이미 구현 했던 "UIComponent를 정말 잘 만들었어!!" 이것을 재사용, 재활용할 해서 다른 뷰에 적용할 수있을까? 좀만 수정하며 될 것 같은데???에 대한 궁금증이 있었고 아직 해결되지는 않았습니다. OOP 객체 구현할 때 객체 재사용(parent)의 넓은 확장성을 어떻게 구현할 수있을까?로 적용하게 됬네요. UIComponent의 경우 디바이스 별 컴포넌트의 size를 유연하게 지정하기 위해서 auto layout과 spacing을 통한 제약조건이 있어야하는데 이부분에 대해서 잘모르겠네요. 이미 지정해버리면 이걸 상속받은 자식 객체에서는 .. 또 spacing을 전부 지정 해야할텐데,, 어렵네요.(이게 그래도 재사용인건가. 모르겠네요.)

 

 

오늘의 주제 속 키워드에서 "이걸 왜 굳이?" 라는 생각이 있었고, 그래도 적용 안하면 안될 것 같아서 부분 적용을 했더니 결국 iOS 원들 전부 예를들어,, "언제 safeAreaLayoutGuide"의 isnet을 가져올 수 있는가?"의 고민이 모든 그룹원의 공통 관심사가 된 것 같다는 느낌을 받았습니다. 누가 "이거 고민해라" 한것도 아닌데 말입니다. 이런 과정을 통해 부족했던 개념들을 파악할 수 있었고 부트캠프 끝나면 오히려 공부해야할 것이 산더미처럼 쌓일 것 같은 생각이 듭니다.

 

 

위 사진은 1주차 때 구현한 기능 과 살짝? 많이 달라서 미션의 초안도 아니긴한데, 이번주 안에 주어진 미션에 대한 기능을 다 끝낼 수 있을 지 모르겠네요. 화면 하나 만드는데 코드가 왜 이렇게 많이 만들어졌는지 모르겠습니다. 약간 소름돋은게 있는데 뭐 [앵두 자두 복숭아 ]컴포넌트 높이가 44인데 음 나머지는 자유? 그리고 마지막날 밀린 기능 구현할 때 어 왜 안되지를 5시간정도 고민한 끝에,, 아 맞다 상위뷰가 터치되야하지,, 잠깐 잊었던 기억을 꺼내고.. 그럼에도안되네? 음... ? 계속 생각하던 끝에 해결하게 됬는데....... 44라니 ㄷㄷ..

 

문제 초반에.. 사실 화면이 다른 화면으로 이동할 가능성을 생각해서 네비게이션컨트롤러를 루트 컨테이너 뷰로 등록해뒀답니다. 그리고 초기 화면구현시.. status bar 아래부터 영역을 정의할 수 있도록? 코드를 설계했는데.. 제가 기능 요구사항을 봤을 때, 딱 status bar 높이 바 바로 아래에 spacing없이 44높이의 영역을 추가하면 되겠다 생각하고 그렇게 네비게이션 바 높이만큼의 영역에 추가를 했습니다. ㅖ.. 그래서 나중에 세그먼트바의 앵두를 터치하려고 했을 때 터치가 안먹혔던 것입니다.

문제를 정말 치밀하고 잘 설계한 것 같다는 감탄을 하게 됬네요. (어 아닌가. .나만 이런 경험을..?!) 글의 내용이 추상적인 이유는 혹시 모를 저작권? 때매 구체적으로 작성하지 않았는데.. 생각보다 iOS 개발 UI기능구현, 애니메이션 적용 등등... 하는 것도 중요하지만 기본적으로 알아야할 놓친 개념이 많다? 는 것을 알게되는 한 주 였습니다. 


2일 치 밀린 기능 주말에 구현해야겠네요 ,,, 

728x90