TIL/2021
-
210613 - TILTIL/2021 2021. 6. 14. 00:08
Clean Code - 객체와 자료구조(Object and DataStructure) 변수를 private으로 선언하더라도 각 값마다 get set 메서드를 제공한다면 구현을 외부로 노출하는 셈이다. 추상 인터페이스(프로토콜??)을 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 한다. 객체지향에서 어려운 변경은 절차적인 코드에서 쉽고 반대도 성립한다. 즉, 때로는 단순한 자료구조와 절차적인 코드가 적합한 상황도 있다.(근데 난 모르겠다.) 이번 장은 결과적으로 어떻게 하라는건지 아직 이해하기 힘들었다. (특히 자바로 쓰여있어서 그런 거 같다.) 여기서 말하는 DataStructure가 struct를 말하는 건지 class지만 단순히 구조를 나타내기 위한 객체를 말하는 건지부터 정확하게 ..
-
210612 - TILTIL/2021 2021. 6. 13. 00:08
Clean Code 코드 형식은 의사소통의 일환이니 형식을 깔끔하게 따라야 한다. 개념은 빈행으로 구분. 변수는 사용하는 위치에 최대한 가까이 선언한다. 인스턴스 변수는 클래스 맨 처음에 선언한다. 이 부분은 대부분 지금 지키고 있는 부분이라서 앞으로도 신경 쓰며 코드를 작성하면 될 거 같다! guard let self = self self = self 바인딩이 낯설어서 이게 뭐지...? 고민을 했었는데 잘 생각해보니 weak self로 인해서 self가 옵셔널이 되어서 사용하는 코드였다. https://github.com/apple/swift-evolution/blob/master/proposals/0079-upgrade-self-from-weak-to-strong.md apple/swift-evolu..
-
210611 - TILTIL/2021 2021. 6. 11. 18:46
독서 Clean Code 주석은 오래될수록 코드에서 멀어진다. 주석을 가능한 줄이도록 꾸준히 노력해야 한다. 많은 경우 주석으로 달려는 설명을 함수로 만들어 표현해도 충분하다. 코드를 주석으로 남겨두지 말자! 쓸모없고 git이 어차피 이전 정보를 다 기록해준다. 코드 일부에 주석을 달면서 시스템 전반적인 정보를 기술하지 말자. 기존에도 주석을 잘 다는 편이 아니다. 주석이 필요 없을 만큼 코드가 목적을 잘 나타내서가 아니라 해야 하나...?라는 생각 때문인데 최대한 필요한 주석만 달도록 노력해봐야겠다. collectionView collectionView를 다루는 데 있어서 customCell과 cell의 사이즈 등등을 다루는 데 있어서 이해가 부족한 거 같아서 다시 공부를 하게 됐다. Layout을 결..
-
210610 - TILTIL/2021 2021. 6. 10. 23:36
독서 Clean Code - 함수 Switch - 추상 클래스, 프로토콜을 이용하여 구현 일관성 있게 이름을 짓자. 인수가 필요한 경우는 인수에 질문을 던지는 경우, 인수를 변환해 결과로 반환할 때 플래그를 인자로 받는 함수는 한 번에 한 가지를 하는 함수가 아니므로 피하자. do catch문은 별도의 함수로 뽑아내는 게 좋다. 오류처리도 한 가지만 하는 게 좋다. 즉 함수는 do로 시작해서 catch로 끝나야 한다. 한 번에무리다. 작성해놓고 리팩토링을 하는게 좋다. argument가 2~3개 필요하다면 일부를 독자적인 클래스 변수로 선언할 가능성이 있는지 확인해본다. argument는 적을수록 좋다. 최선은 0개 하지만 현실적으론 어렵다ㅠㅠ 길고 서술적인 이름이 길고 서술적인 주석보다, 짧고 어려운 ..
-
210606-TILTIL/2021 2021. 6. 7. 00:03
Swift 공부 Optional에 대해서 복습을 했다. 워낙 자주 사용하는 문법이라 안 써서 까먹은 부분은 거의 없었지만 IUO는 @IBOutlet에서나 Test에서 사용하는 게 아니라면 직접 사용할 일이 없어서 디테일을 까먹었지만 다시 공부를 하게 됐다. 기본적으로 Optional으로 지정되며 type annotation을 하게 되면 자동으로 forced unwrapping이 된다. PhotoKit 사진 앱에 저장되어 있는 이미지를 여러 개 가져와야 하는 상황이 발생해서 공부를 하게 됐다. 예전에 공부를 한 번 해봤다가 어려워서 포기를 했는데 지금은 찬찬히 하나씩 레퍼런스를 보며 공부를 해보니 이해가 되고 있다.(물론 옳게 이해했는지는 확실하지 않지만) 오늘 공부한 건 기본을 이루는 개념들에 대해서 공..
-
210605 - TILTIL/2021 2021. 6. 3. 16:47
독서 '객체지향의 사실과 오해' 책을 2번째 읽는 것을 끝내고 다시 'CleanCode'로 돌아왔다. 지난번 4장까지 읽다가 그만두었는데 오늘부터 다시 1장부터 시작이다. (수학의 정석 집합 느낌이 나는데..?) InputView, InputAccesoryView 예전에 구현한 적이 있는데 복습 겸해서 처음부터 만들어봤다. 키보드의 크기를 맞추는 방법만 다시 공부하면 될듯하다. 복습하며 잊어버렸다가 알게 된 부분은 inputView와 inputAccessoryView를 헷갈리지 않게 됐고 TextField의 커서가 깜빡이는 것을 없앨 때는 TintColor를 .clear로 변경하면 없앨 수 있다. 수정이 안되게 하려면 Delegate에 textField(_:shouldChangeCharactersIn:r..
-
210522 - TILTIL/2021 2021. 5. 23. 03:44
LLVM Profile Error: Failed to write file “default.profraw”: Permission denied 전에 못 보던 경고 메시지가 나타나서 이건 뭐지?? 했는데 이 메시지만 보고서는 뭔 말인지 알 수가 없어서 검색을 해봤다. https://llvm.org The LLVM Compiler Infrastructure Project LLVM Overview The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines. The name "..
-
210521 - TILTIL/2021 2021. 5. 22. 03:11
지도에 이동한 경로 표시하기 이동경로를 표시하는 방법에 대해서 공부를 했다. 경로를 그리기 위해서는 이동한 location을 모두 저장해 둬야 한다. Line을 그리는 것은 MapView를 이용해야 하고 delegate에서 mapView(_:rendererFor:) 메서드에서 MKPolylineRenderer를 리턴해줘야 한다. 위와 같이 실시간으로 그리는 방법은 locationManager(_:didUpdateLocation:)에서 mapView.addOverlay(_:)를 구현해주면 위치정보가 업데이트되면서 경로를 그리게 된다. 마지막으로 완성된 화면처럼 결과를 나타내고 싶다면 저장해둔 location을 다음 VC에 전달해주고받은 location을 이용하여 mapView에서 구현해주면 된다. 물론 R..