Swift TIL(49) - 2023 Let's Swift 컨퍼런스 참여

웰디(Well-D)·2023년 10월 13일
0

Sweet & Soft, SWIFT

목록 보기
47/76
post-thumbnail

레츠스위프트 컨퍼런스

2023 레츠스위프트 let's Swift 컨퍼런스에 참여했습니다.
같은 수강생분들, 러너분들, 단톡방에 계신분들을 만나서 너무 좋았고 행복했어요. 조만간 제대로 후기도 작성해보려고 합니다.
그전에 데일리로 기록을 남깁니다 :)

세션은 2~3개정도 오전에 듣고, 오후는 네트워킹시간으로 대부분을 보냈는데 세션도, 네트워킹도 즐겁고 알찬 하루였습니다.
동기부여도 많이 되고, 공부도(물론 오늘공부는 많이 못했지만) 더 열심히 하겠다는 다짐도 하게되었습니다.

너무 ios 초보라 갈까말까 고민했는데, 너무 가길 잘했다고 생각했습니다. 뉴비인데도 반겨주신 많은 분들 너무 감사드립니다. 내년의 레츠스위프트에서는 더 성장해서 저 역시 공유드리고 도움될 수 있는게 많아진다면 좋겠습니다 :)

컨퍼런스 목차

자세한 내용은 유튜브에 올라온다고 하니, 저는 가볍게 정리해서 공유해봅니다(기록 겸)
(자세한 내용은 추후올라오는 유튜브를 참조해주세요)

들었던 세션

오픈소스 Swift - 이승준님

애플디벨로퍼아카데미 2기이신줄 몰랐으나, 나중에 알고 인사드릴수있어서 정말 주위분들에게도, 승준님께도 감사한 마음이었다. 일단 중간부터 들어서, 풀로 듣지못해 아쉽긴했지만 중간부터 들은 내용도 너무 좋았고, 개인적으로도 조금이라도 찍먹할 수 있도록 영어공부도 하고, 또 proposal에 지속적인 관심을 가져야겠다고 생각했던 세션, 또 아쉽게 못본 만큼 유튜브에 올라온 영상을 더 챙겨봐야겠다고 생각한 세션, 2기로 활동중이신데 이만큼 아웃풋을 벌써 내시는게 대단하다고 생각했다.

https://www.swift.org/swift-evolution/

path of Swift - 라이노님

문법을 공부하는 요즘 듣기 정말 적절했던 세션이었다.
Swift 라는 언어가 어떻게 기계어(바이너리)가 되는지의 과정을 자세히 설명해주신 세션이었는데, 이러한 내용들을 잘 알고 있으면 나중에 문제해결을 할때 깊이가 달라지겠구나, 문법도 소홀히하지말고 실전도 소홀히 하지말아야겠다는 교훈도 얻었다.

전체과정 : PARSE => SEMA => SILGEN => SilOptimaize => IR => LLVM 

<PARSE>

Swift 사용시 => AST 추상부문트리를 만들어줘야함
AST를 올바르게 만들 수 있는가? Syntax analysis 구문분석
(기계어가 평서어를 이해하기 어려운 이유가 이때문 
=> swift 가 이해하기 쉽게 잘 정리해주는 역할을 함)
* Swift Language Reference공식문서에서 확인가능

매크로 - Swift Syntax 이 AST를 Swift 로 구현한 것 임 (최근나옴)

<SEMA>
AST => 올바르게 구성되어있는지 검사 : 타입검사, 구조적 검사 등등

아이텐티파이(식별자) 키워드로 구성 
- 키워드 : 컴파일러가 아는 단어
- 식별자 : 개발자들이 추가하고 만든것 
=> 컴파일러가 알지못함 
=> 선언, 정의를 통해 컴파일러가 이해해야함 (이 과정을 Name Lookup이라고 함) 
=> 선언, 정의는 다른 모듈에 있을 수 도 있음

문제점 발생 : 병렬로 돌리는 이유가 없어짐 선형적으로 돌아가는 구조 가 되버림 (어려워짐)
=> 컴파일러는 빠르게 뼈대로 파싱하고, 선언,정의는 Delayed Parsing 으로 필요할때 찾아가는 방식 (딱 필요한 만큼만 할당을 해주는것이 primary 파일을 할당하는 이유이고 이를 토대로 빠르게 파싱한 후 secondary 파일들은 delayed 파싱을 진행한다)


C컴파일러 특징 : 파일자체 컴파일링
C컴파일러 => 탑다운으로 읽어냄

Swift 컴파일러 => 탑다운 불가, 꼬여있음 => 체계화필요 
=> Swift 4.2에서 정보를 채워나가는 방식으로 Request Evaluator 도입됨 => 성능개선, 기능추가 됨

Swift 컴파일러 특징 : 모듈자체를 컴파일링

Swift 가 읽을 수 있는 모듈 
- 다른 Swift 로 되어있는 모듈(바이너리:읽기편하고 속도빠름 / 컴파일러에 종속적임 
=> 이를 해결을 위해 text형식의 SWift 인터페이스 파일을 사용하기도 함 )
- C C++ (클레이라는 프론트엔드 내장되있음) 모듈 (스위프트 선언으로 바꿔서 가져옴 : 스위프트 컴파일러 내부의 클레이 임포터가 바꿔줌) + 브릿징헤더
- LLVM 타입과 선언을 그대로 사용하는 모듈(표준라이브러리들만 사용가능함) 

<SILGEN>
스위프트 중간언어라는 의미 SIL swift - llvm 중간단계


<SilOptimaize>
최적화 진행  스위프트가 보장해주는 언어의 안정성이 여기서 검사가 됨
=> 최적화 검사완료 : Canonical SIL
+ 추가적인 최적화 옵션이 있다면 성능최적화를 함
=> 역시 Canonical SIL 로 변환

<IR>
IRGEN

<LLVM>
LLVM Backend => 최종적으로 바이너리로 출력됨

객체가 함수를 만났을때 - 권문범님

객체지향과 함수형을 합쳐서 아키텍쳐를 스스로 만들어보신 케이스, 설계능력을 키워볼 수 있고 개발자의 역량강화, 일단 너무 재밌었다는 말씀이 인상깊었다(정말 재밌어보였다)
언젠가 나도 아키텍쳐를 구현(도전)해보고싶다는 생각도 들었고, 여태까지 배웠던 문법내용(구조체, 열거형, 타입alias , 프로토콜, 확장, 함수, switch 문으로 패턴매칭, 타입선언, pirvate키워드, 계산속성,set블럭, lazy var, 메서드, super, override, self, self 로 라이프사이클 벗어나도 동작하도록 참조해주기 등등이 진짜 다 모여 하나의 작품을 만드는 느낌이었다. 제대로 다시 보고 이해하고싶은 세션

<객체지향> 
변경되는 단위를 캡슐화, 내부동작을 몰라도 설계가 쉽도록 
객체지향예시 : 클래스 메시지전달 상속 추상화 캡슐화 다형성 

Swift Concrete Type 
산재된 코드 ⇒ 설계, 재사용성 복잡해짐 ⇒ 추상화, 캡슐화 
내부동작을 몰라도 document 를 통해 재설계하고 만들수있다는 장점을 가짐

예시)
Singleton 패턴 : FileManager, URLSession
Decorator : UIScrollView-Table / UICollectionView
Composite : UIView -addSubView 
그외 등등…

<함수형> 
변경을 최소화해서 선언적으로 구현 / 실행예측이 쉽도록 지원
(사이드 이펙트 최소화, 코드로 바로 직관적 이해 가능하도록 : 
타입변경, 타입일치, 상태변경, 타입상태변경 등등) 

예시)
Pure Function
Functor/Monad (예 : Result) ⇒ Context + Value / map / faltMap / Optional

<객체지향과 함수형> 

PureFunction(인풋+로직 ⇒ 아웃풋) ⇒ 비동기환경에서의 무결성을 보장함 

객체지향 사용하면 좋은 예 : UI공유자원 => 캡슐화 사용필요 ( MVC 등) 객체지향에 속하게 됨 / Data, File, Network 

함수형 사용하면 좋은 예 : Result / Optional, Combine, Functions, 

<직접만들어보기>

오픈소스를 사용만 하지말고 ( swift 도 오픈소스다 ) 찾아보고 만들어보자 

아키텍쳐를 설계하기 앞서서 원하는 요소들 정리 (발표자님 기준)
- MVVM 아키텍쳐 : 멀티코어, 멀티쓰레드의 데이터 무결성보장가능(함수형을 잘 채용한다는 조건하에) 
- 결과에 따른 유연한 처리지원 
(한번에 결과를 받고, 처리할때만 성공,실패를 알수있도록,
실패의 원인을 바로 찍어줄 수 있도록)
- Flow의 가시성 
- 비동기 처리지원
- API Apple first party 사용

<원하는 요소를 적용하는 과정>
View / Interactor 
⇒ 어떤 Viewcontroller와 관계를 가지는지 선언 
ViewController view bind 및 lifecycle 
⇒ MVVM 의 핵심 (아래와 어떻게 연결할지)
ViewModel Dataflow 가시화 및 관리 
⇒ MVVM의 핵심(위와 어떻게 연결할지)
Data / network 비동기적 데이터 처리 
+) 프로토콜 지향 프로그래밍
구현단계에서 구현가능 , 관계정의도 편리함 
객체간의 인터페이스 선언 데이터 타입의 추상화 
- 라이프사이클의 앞부분 ⇒ 객체형 사용 + 프로토콜
- 라이프사이클의 뒷부분 => View model 과 데이터처리 사이에 함수형 적용 

+) Result 사용
HIG ⇒ 성공, 실패, 에러처리에 대한 명확성 강조 ⇒ Result 사용 장점 
에러타입 정의 ⇒ Result 의 Failure : 에러타입 으로 전달 


<결과물>
 미리 선언된것들을 한줄의 함수로 정리 ⇒ PURE한 함수가 됨 (외부인풋도 없고 로직은 탑다운으로 문제없이 진행됨) ⇒ 결과에 대한 유연성, flow 가시성, 유연성처리

<직접만든 아키텍쳐 사용해보기>
협업시 에러띄워주는게 가장효과적임
(이렇게 미리 타입선언 등을 다 해놓으면 자동으로 에러띄우고, 
자동완성을 해주니까 매우 효과적임)

당근ios

채용준비 하시는 분들이 제일 관심이 많으셨던것 같은 당근 ios 세션
기술적인 내용은 유튜브에서 더 자세히 설명을 들으실 수 있을것같고(절반정도 들었기 때문..!)

가장 궁금해하실것같은 당근ios에서 고민하고 있는 문제들을 공유합니다.

고민하고 있는 문제들 (채용과 연계)

<모바일팀>

- 계정, 알림, 데이터, 실험, 보안 등 서비스의 기반이 되는 코어기능 재설계
- 자동화, Horizontal Component개발을 통한 엔지니어 생산성 증대
- 도메인개발을 위한 안정적인 설계방향가이드

<채팅>
- 글로벌서비스(국내유저와 글로벌유저의 채팅경험 다름)
- 그룹채팅기능
- 동네생활 동네알바등 다양한 서비스 연동
- 다양한기능 가능한 유연한 구조 설계

제 기준으로 (정말 초보자기준) 정리한 내용들이라 실제 연사님의 의도와는 차이가 있을 수 있으니
유튜브로 진행되는 세션에서 더 정확한 정보를 얻어가는 시간 되시면 좋을것같습니다.
행사 제작하시느라 고생하신 오거나이저 분들, 스폰서분들, 연사분들, 또 참여하신 모든 참가자분들 고생많으셨습니다!

모두 즐거운 swift 되세요 :)

profile
Wellness 잘사는 것에 진심인 웰디입니다. 여러분의 몸과 마음, 통장의 건강을 수호하고싶어요. 느리더라도, 꾸준히

0개의 댓글