[swift] swift 기본 문법 스터디 2주차

이미지
[swift] swift 기본 문법 스터디 2주차 변수와 상수 메모리에 값을 저장하려면 저장하고 싶은 메모리의 주소값이 필요합니다. 그리고 우리가 저장한 값을 가져올 때도 메모리의 주소값이 필요하겠죠? var x: Int = 10 print(x) withUnsafeMutablePointer(to: &x) { print("x address: \($0)") } x = 20 print(x) withUnsafeMutablePointer(to: &x) { print("x address: \($0)") } let y: Int = 30 print(y) withUnsafePointer(to: &y) { // error! print("y address: \($0)") } 위와 같은 방법으로 메모리 주소값을 찍어보았습니다. 생각보다 간단하지 않아 당황했네요. 그런데 아직 의문인것은 같은 변수이지만, let 변수는 mutable 하지 않기 때문에 withUnsafeMutablePointer로 주소를 찍을 수 없었습니다. 이 부분에 대해서는 어떤 의미가 있는지 더 찾아보고 수정하도록 하겠습니다. 또한 변수에는 한글, 알파벳, 아라비아숫자, 특수기호까지 지원하는데 영어와숫자를 사용하는 것 이외에 다른 방법으로 변수를 할당하는 예가 있다면 알려주세요! 자료형 우리가 저장한 변수에는 타입이 있습니다. 기본적으로는 같은 타임의 변수들끼리 연산이 가능하죠. 실제 자료형들은 구조체로 구현되어 있으며, 연산이 가능한 연사자들이 내부에 정의 되어 있습니다. Int - 정수를 저장할 때 씁니다. signed Int8 => 127 ~ -128 : 2^8(256) Int16 => 32767 ~ -32768 : 2^16(65,536) Int32 ^^;; Int64 ^^;; unsigned Int8 => 0 ~

[swift] 옵셔널 체이닝 vs 옵셔널 바인딩

이미지
[swift]옵셔널 체이닝 vs 옵셔널 바인딩 옵셔널 체이닝과 옵셔널 바인딩이 헷갈려 정리해 놓았습니다. 언제 필요할까요? 옵셔널은 프로퍼티에 값이 있을 수도있고, 없을 수도 없음을 나타내는데 사용되었습니다. 옵셔널은 값이 없을 때 nil을 할당 해줍니다. 문제는 우리가 필요한 값이 nil인지 아닌지 확인을 해야하는 번거로움이 있다는 것 입니다. 코드로 예를 들어보겠습니다. class Person { var name: String var job: String? var home: Apartment? init(name: String, home: Apartment?) { self.name = name self.home = home } } class Apartment { var buildingNumber: String var roomNumber: String var security: Person? var owner: Person? init(dong: String, ho: String, security: Person?) { self.buildingNumber = dong self.roomNumber = ho self.security = security } } let chulsoo: Person? = Person(name: "chulsoo", home: apart) let apart: Apartment = Apartment(dong: "101", ho: "202", security: chulsoo) let hyunho: Person? = Person(name: "leeo", home: apart) leeo 라는 사람의 apart 에 있는 security의 이름이 알고 싶습니다.

[iOS] Prefetching으로 프레임드랍 막기

이미지
[iOS] Prefetching으로 프레임드랍 막기 필요한 이유 컬렉션 뷰에서 cellForRowAt 메소드로 데이터를 가져와서 컬렉션 뷰를 그릴 경우, 셀을 구성하는 작업은 메인 쓰레드에서 진행 될 것입니다. 많은 셀을 메인 쓰레드에서 진행한다면, 프레임 드랍이 일어날 수 있고 결과적으로 매끄러운 스크롤링이 불가능합니다. 이런 작업을 돕기 위해 Prefetching이 추가되었습니다. 사용 필요 요건은 다음과 같습니다. iOS 10.0+ Xcode 11.3+ 비교 그럼 그냥 컬렉션 뷰만 쓸 때와는 어떤점이 다를까요? 사실 이미지나, 서버에 요청해서 데이터를 받아오지 않아서인지 큰 차이를 느끼지 못했습니다. 하지만 구현 해놓고 브레이킹 포인트를 걸고, 출력을 해 보면서 차이를 느낄 수 있었습니다. 가장 먼저 제가 다름을 느낀 곳은 같은 화면을 구성하는데 프리패칭 프로토콜을 채택해서 구현 했느냐, 아니냐에 따라 데이터의 fetching 갯수가 다른 것 이었습니다. 왜냐하면 cellForRowAt에서는 셀을 그리기 위한 작업만을 해서 그런지 그리기 위한 데이터만 가져오는 것 처럼 보였습니다. 하지만 프리패칭 프로토콜을 채택하면, 디스플레이 영역이 아닌, 프리패칭의 영역의 데이터를 미리 가져옵니다. 그렇기 때문에 가져오는 데이터의 갯수가 다릅니다. 화면에 6개가 그려져야 할 때, Prefetching 없이 컬렉션 뷰로 그리게 되면 일단 화면에 그려지는 6개의 셀의 데이터만 가져오고 아래로 스크롤 할 때 새로운 데이터를 로드 합니다. 하지만 이 갯수가 중요한게 아닙니다. 이 그림을 그리는 작업이 어디서 이루어지고 있는지가 핵심입니다. 셀을 그리고 있는 cellForRowAt작업은 메인 스레드에서 이루어지는데 해야 할 일들이 많아지면 다 처리하지 못하고 프레임 드랍이 일어날 수 있다. 이 작업 중 일부가 백그라운드에서 일어나게 되면 메인 쓰레드에 걸리는 부하가 줄어들고 프레임 드랍

IOS Developer Roadmap

IOS Developer Roadmap IOS개발로드맵 을 보고 공부 순서대로 진행하면서 느끼는 회고를 정리하려 합니다. 최근 업데이트일 : 2020-11-13 개발자의 기본역량 자료구조와 알고리즘 기본적인 터미널 사용법 깃과 버젼관리 [2020-04-14] git을 사용하는데 필요한 기본 개념과 기본 용어 정리 [2020-09-09] git의 upstream과 origin 헷갈리는 사람 손! [2020-09-09] git의 마지막 커밋 메시지 수정하기 SSH HTTP / HTTPs 그리고 API 정보 검색 [2020-04-11] 구글링 할 때의 팁 문자열과 인코딩 오픈소스 [2020-04-01] 오픈소스 라이선스 정리 [2020-04-11] Github 이슈 라벨(issue labels) [2020-04-21] Opensource에 처음 기여해보고 싶어서 찾은 내용 [2020-05-06] 오픈소스 기행문 - 문서번역 (만화로보는 https 동작원리) [2020-09-29] Kingfisher 둘러보기 [2020-10-27] Hacktober Fest 참가하세요 두 번 하세요! 기초체력 Swift 기본문법 Collections ControlFlow(while, for, iterating collection, nested loop) [2020-09-17] if 문에서 콤마와 && 연산자의 차이점 Optional [2020-03-27] Optional값 다루기 [2020-10-21] Optional 뜯어보기 Optional binding [2020-03-25] guard let, if let 차이 Guard [2020-10-06] guard문으로 함수 입구 틀어막기! Object Oriented Programing [2020-03-27] 함수(fuction)의 기본 개념정리 [2020-03-28] 구조체(struct

[swift] guard let, if let 차이

이미지
[swift] guard let, if let 차이 Optional 변수를 안전사게 사용하기 위해 방법을 찾던 중 if let과 guard let에 대해 정리하겠습니다. 변수에 값이 올지 않올지 확신할 수 없을 때 Optional을 씁니다. 그러면 Optional 타입의 변수에 값은 어떻게 꺼내어 사용할 수 있을까요? 간단합니다 옵셔널 바인딩을 해서 사용합니다. 값이 올지 안올지 정확히 알 수 없을 때 Optional 타입의 변수 를 사용하는데요 잘 모르는 분들이 이 전 글을 참고 해주세요! 안전하게 Optional 타입의 변수를 Unwrap하기 위해서는 옵셔널 바인딩을 해야하는데요 크게 두 두가지 방법이 있습니다. 바로 if let과 gurad let 입니다. 코드로 보는 예제 다음 예제 코드를 통해 둘의 차이점을 살펴 보겠습니다. func fullName(name:String, rawPrefix:String?){ // if let을 사용했을 경우 if let prefix = rawPrefix { print(prefix+name) } else { print("need prefix") } // guard let을 사용했을 경우 guard let prefix = rawPrefix else { print("need prefix") return } print(prefix+name) } fullName(name: "hyunho", rawPrefix: "Lee") 풀네임을 작성할 때 이름은 필수이지만 성은 언제나 들어오지는 않는 옵션널 한 값 입니다. guard let을 사용하는 경우에 이름만 들어오고 성이 들어오지 않았다면, 이런 케이스는 예외 케이스, 혹은 원하지 않는 상황 이라고 판단합니

[iOS] ViewController의 화면전환 방법 정리

이미지
[iOS] 화면전환 방법 어떤 버튼을 눌러 다른 페이지로 이동 시키는 일은 항상 헷갈립니다. 이번 기회에 정리해 두고 가려고 합니다. 일단 버튼을 하나 만들고 눌러서 내가 원하는 페에지와 실제 페이지가 잘 나타나는지 정리하겠습니다. 이런 버튼이 하나 있고 화면을 전환 해 보도록 하겠습니다. 스토리 보드 가장 쉬운 방법이라고 생각합니다. 내가 액션을 줄 컴포넌트를 클릭하고 컨트롤 + 드래그로 원하는 페이지에 드롭합니다. 선이 생기면서 어떻게 보여줄 것인지 segue action을 선택하면 됩니다. 일단은 present modally를 선택합니다. 버튼을 누르면 모달 창이 새로 생기죠? 아주 쉽고 간편하답니다! viewController present @IBAction func buttonClick(_ sender: Any) { let viewControllerName = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewID") if let view = viewControllerName { self.present(view, animated: true, completion: nil) } } 다음과 같은 코드를 작성해줍니다. 스토리 보드에 만들어 준, 뷰컨트롤러의 스토리보드 아이디를 설정 해줍니다. 저는 SecondViewID 로 설정 해주었습니다. 버튼에 IBAction을 설정 해 준다음에 스토리 보드에서 스토리 보드에서 설정했던 ID를 가지고 옵니다. 그리고 가져온 뷰컨트롤러를 self에서 present 해줍니다. viewControllerName?.modalTransitionStyle를 설정하여 모달의 전환을 설정할 수 있습니다. @IBAction func buttonClick(_ sender: Any) { let viewController

[dev] Hacktober Fest 2020 참가하세요 두 번 하세요!

이미지
[dev] Hacktober Fest 참가하세요 두 번 하세요! 올 해 초부터 오픈소스에 관심을 가지고, 저도 모두를 위한 오픈소스에 컨트리뷰터가 되고자 이런 저런 노력을 했었습니다. 결과는 대 참패… 물론 어떻게 오픈소스를 시작하는지도 공부했고, 첫 커밋을 어떻게 하면 좋을지에 대해서도 공부했었습니다. 하지만 결국 기여하고자 하는 오픈소스를 열어보았을 때 으악! 하고 덮어 버린 것… 이번에는 올 해 엿보고 있던 핵토버 페스트에 참가 해 보았습니다. 무엇을 해야하는지 몰라서 웹페이지 에 들어가서 소개글과 이벤트 들을 읽어 보았습니다. 그 중에 PR을 4번 날리면 티셔츠를 주는 이벤트에 참가 하기로 했습니다. 규칙은 간단했습니다. hacktoberfest2020에 참가하는 레파지토리에 PR을 4번 이상 날린다. 유예기간인 14일 이 지날 때 까지 내가 날린 PR에 Reject 이 없거나 Accept 이 있으면 됩니다. 총 4개의 최종 카운팅이 완료되면 보상을 받을 수 있습니다. 시작 그 와중에도 어떻게 하면 좋을지 찾아보다가 이런 필터 를 사용해서 기여할 만한 프로젝트를 찾았습니다. 저는 초보자 이기 때문에 good first issue 와 swift 로 제한을 두고 찾았습니다. 매너? 기여 했던 프로젝트 중 참고할 만한 내용이 있어서 공유 합니다. 이슈 창에 들어가보면 현재 문제라고 제기 된 이슈들이 있고, 담당자가 없는 곳에가서 참가 의사를 밝혀달라고 합니다. 만약 다른사람이 이미 진행하고 있는 이슈라면 해당 레파지토리에 가서 기여해달라는 내용이 있습니다. 이렇듯 오픈소스에서도 지켜야 하는 예의가 있었습니다. 몰랐었는데 다른 것도 있는지 찾아봐야겠네요. 일합니다 할 수 있는 이슈에 가서 자신에게 할당해달라고 합니다. 그러면 프로젝트 메인테이너?인지 어떤 분이 오셔서 흔쾌히 할당을 해줍니다. 당연히 저는 처음이라 잘 모르니 어떻게 하는지 고민할 시간에 다시 물어봅니다.