11월, 2021의 게시물 표시

클로져를 이해할 때 따라 쳐 보면 좋은 예제 코드

이미지
어쩌다 보니 클로져를 공부하면서 정리하는 글이 점점 많아집니다. 그만큼 중요하고, 또 많이 사용하고 있기 때문이겠죠. 오늘은 클로져를 이해하면서 사용했던 샘플 코드를 정리해보았습니다. 함수 vs 클로져 함수를 정의하고, 그 함수를 호출하는 것은 많은 분들이 익숙할 것이라고 생각합니다. 보통 다음과 같은 코드를 보면 이해할 수 있죠. func sayHi () { print ( "Hi" ) } sayHi() // Hi 클로져는 이름 없는 함수라고 하죠? 이름이 없는 함수를 만들고 이름을 붙여서 호출 해 보겠습니다. let sayHiClosure = { print( "Hi" ) } sayHiClosure () // Hi 그러니까 잘 살펴보면 클로져 앞에 이름을 붙이고 func 키워드 까지 붙이면 함수랑 똑같이 생겨지는 군요! 매개변수, 반환타입 여기서 부터 헷갈리기 시작합니다. 위의 예제는 아무값도 입력받지 않고 반환하지 않는 아주 단순한 형태입니다. 그렇다면 숫자를 2개 입력받아서 합을 구하는 함수와 클로져를 만들고 비교해볼까요? func sum(_ a : Int, _ b : Int) -> Int { return a + b } print (sum( 3 , 6 ) ) // 9 let sumClosure: (Int, Int) -> Int = { a , b in return a + b } print (sumClosure( 2 , 5 ) ) // 7 결국 우리가 하고 있는 행위는 이름없는 클로져에 이름을 붙이고 있는 것 입니다. 그러면 이쯤에서 왜 클로져를 쓰는가에 대해서 생각해 보아야 합니다. 언제 함수? 언제 클로져? 위 예제에서 두 숫자를 더해서 합을 반환하는 함수를 위에서 만들어 보았습니다. 그렇다면 뺼샘과, 나눗셈과, 곱셈은 어떨까요? 우리의 함수를 쓸지 안쓸지도 모르는데 구현해 놓는다면 너무나 힘들 것 입니다. 그냥 (Int, In

[인터뷰질문 018] Swift 함수에서 return 키워드가 필요없는 상황은 어느때 인가요?

이미지
return 키워드 return 키워드는 함수의 반환값을 표시할 때 쓰입니다. 이 함수에서 이 값이 반환됩니다 라는 의미지요. 함수가 무엇인지 반환값이 무엇인지 모른다면 먼저 공부하고 읽으시는 것을 추천 드립니다. return값이 없을 때 함수에 반환값이 필요 없는경우 당연히 return 키워드가 필요하지 않습니다. func sayHello () -> Void { print ( "Hello" ) } sayHello() // Hello Error 상황 함수가 실행되다가 정상적인 종료가 아닌 예외처리 하는 부분에서는 return 키워드가 필요 없습니다. func devidedValue (numerator : Double, denominator: Double) -> Double { if denominator == 0 { fatalError ( "can not devided by zero" ) //print("can not devided by zero") } else { return numerator / denominator } } print (devidedValue(numerator: 3 , denominator: 6 )) print (devidedValue(numerator: 3 , denominator: 0 )) 함수에서 반환타입이 있다면 반환값을 지정해주어야 합니다. 하지만 fatalError() 구문이 있으면, return 하지 않아도 됩니다. 왜냐하면 fatalError() 을 만나는 순간 함수가 종료되기 때문입니다. 한줄로 작성된 함수의 반 func devidedValue ( numerator : Double, denominator : Double) - > Double { numerator / denominator } print (devidedValue( n

swift 에서 dictionary와 NScache의 차이와 thread safe 하다는 뜻

이미지
공부를 하다보니 NScache를 알게 되었습니다. 사실 무엇인지 잘 모르고 사용하고 있었는데, 이 걸 모르는 사람들은 Dictionary를 쓴 경험이 있다고 합니다. 그래서 무엇이 비슷했길래 사용했는지, 그리고 무엇이 다르기에 용도에 맞게 사용해야 하는지 정리를 해보겠습니다. 또한 공부하다 알게 된 thread safe 하다는 것에 대해서도 정리하겠습니다. dictionary와 NScache의 비슷한 점 var dictionaryInstance: Dictionary = Dictionary () var cacheInstance: NSCache = NSCache () 생성을 해보면 정말 비슷해서 아무 생각없이 사용한다면 쓸 수 있겠다라는 생각을 했습니다. 결국 string을 키값으로 데이터를 저장하고 탐색하는데 사용할 수 있기 때문입니다. 그러면 이렇게 비슷한데 그냥 사용하면 무엇이 안 좋은지 한 번 알아보도록 하겠습니다 dictionary와 NScache의 다른 점 크게 두가지 다른점이 있다고 생각합니다. NSCache는 디바이스의 메모리가 부족해지면 캐시된 데이터를 삭제하기도 합니다. 가장 큰 차이점 입니다 NScache는 Thread safe 합니다. 값의 입력과 출력하는 방법이 조금 다릅니다.(키값으로 접근하는 것은 같습니다.) 그렇다면 가장 큰 차이점인 Thread safe 하다 그렇지 못하다는 것은 어떤 의미일까요? Thread safe 하다는 것 해석해보면 thread에 안전하다는 뜻 입니다. 그러면 thread가 무엇인지 우리가 어떤 환경에서 개발하는지 알아야 합니다. thread란 쉽게 말해 작업의 단위라고 보면 쉽습니다. 우리는 multi-threaded 환경에서 개발을 하고 있습니다. 그러면 어려개의 작업은 각각의 thread를 만들고 공유 자원을 이용할 수 있겠죠? 좀 더 쉽게 예를 들어보겠습니다. 냉장고가 하나 있고, A와 B가 물건을 넣기도 빼기도 한다고 해봅시다. 현실에서의 냉장고는 동시에 물건을 넣거

2021 첫 iOS 멘토링을 마치며

이미지
우연히 좋은 기회가 생겨 다른 주니어 개발자들을 멘토링 할 기회가 생겼습니다. 저도 주니어라서 누가 누구에게 멘토링을 하겠냐 라는 생각도 했지만 반대로 내가 맨 처음에 랜딩하면서 걲었던 어려움과 어떻게 극복했는지를 전달 해 주어야 겠다라는 생각으로 시작하게 되었습니다. 멘토링 순서 1주차 : 로드맵 확인 / 개발 성장 과정 조언(HIG, 학습방법 등) 2주차 : TableView(1) - facebookMe / 함수명, nib, MVC,MVVM, Life Cycle이해하기 3주차 : TableView(2) - MVC, MVVM 활용해서 만들어오기 4주차 : 공식문서에 대해서 ( 함수명 짓는 법, 뜯어보는 개발팁 ), swift를 문법의 실질적인 중요성을 github들을 뜯어보면서 확인 ( 접근제어자,enum,옵셔널) / enum 의 중요성 다시 한 번! 5주차 : 코딩쇼! ㅎㅎ (아이폰 알람앱 벤치마킹) / 앱 스토어 살펴보면서 어플 출시까지 맛보기 6주차 : ScrollView / 이 날은 다들 백신으로 아프셔서 쉬어가는 타임! 7주차 : CollectionView / 디버깅 방법 (break활용, 뷰 레이어 구조 보기 활용하면서) 8주차 : 네트워크에 대해 이해하기 / URLSession이해하기 & 클로저 이해하기 9주차 : Api활용 / debugDescription / 모델의 중요성, 목데이터 등 10주차 : 애니메이션(1) 11주차 : 애니메이션(2) 뜯어보면서 현호님의 공부 방법 공유 / 라이브러리 활용해보기 12주차 : 다른 사람들의 소스코드 뜯어보기 / 앞으로 어디로 가야하는가 기본적인 철학 어차피 내가 할 줄 아는 것을 알려줘 봤자 새로운 것이 나오면 또 문제를 해결하지 못할 것 이다. 그러므로 스스로 문제를 푸는 방법을 알려주자 였습니다. 그래서 우리가 마주한 문제가 무엇인지, 이 문제를 스스로 해결하는 방법이 어떤 것인지 멘토링을 진행했습니다. 진행 기본적으로는 과제를 내주고, 그 과제를