TIL
-
210622 - TILTIL/2021 2021. 6. 22. 23:34
Clean Code - System 지금까지 읽은 챕터 중에서 제일 이해가 안 되고 뭔 말인지 모르겠던 챕터였다... 오늘 한 번 쭉 다 읽긴 했는데 내일 한번 더 찬찬히 읽어보고 뭔 말인지 이해해보려 노력해야겠다. String String이 struct라는것을 잊고 있었는데 다시 공부하며 알게 됐다. NSString이 class!! 지금은 주로 Formatter를 사용하지만 아주아주 많은 String 생성자 중에 format을 인자로 받는 생성자도 공부를 다시 했다. StringInterpolation을 extension 하여 기능을 추가하는 방법에 대해서 공부했는데 많이 쓸까는 모르겠다. View view를 코드로 추가하는 방법 매번 스토리보드만 사용하다 보니 코드로 추가하는 방법은 까먹었다;; 아주..
-
210621 - TILTIL/2021 2021. 6. 21. 23:56
Clean Code - class 어제 공부했지만 중요한 거 같아서 다시 또 읽었다. 클래스는 인스턴스변수의 개수가 적어야 한다. 메서드는 변수를 하나 이상 사용해야 한다. 그래야 응집도가 높다. 만약 몇몇 메서드만 사용하는 변수가 있다면 이는 새로운 클래스를 만들어야 한다는 신호다!! 큰 함수를 작은함수로 쪼개다 보면 종종 작은 클래스로 쪼갤 기회가 생긴다. 클래스는 확장에 개방적이고 수정에 폐쇄적이어야 한다. 즉 새 기능을 추가한다면 기존 코드를 수정하는 거 아니라 확장만 하도록 만들어야 한다. SQL 단어는 자주 듣지만 정확한 의미가 무엇인지 헷갈려서 오늘 단어가 나온 김에 의미에 대해서 공부를 했다. Structured Query Language, DB를 다루기 위해 사용하는 언어이다. 단어와 같..
-
210620 - TILTIL/2021 2021. 6. 20. 20:47
Clean Code - Class Class를 작성할 때는 static public 변수 private 변수 public 메서드 private 메서드 순으로 작성하면 추상화 단계가 자연스럽게 순차적으로 내려간다. 속성과 메서드를 반드심 숨겨야 한다는 법칙은 없다. 테스트 코드가 메서드를 호출하거나 변수를 사용해야 한다면 공개해야 한다. 그전에 비공개 상태를 유지할 방법은 강구해본 다음에 최후의 수단으로 공개하도록 하자. Class는 한가지 책임만을 가지자! 클래스 이름에 Manager Processor, Super이름이 들어가면 책임을 여러 개 가지고 있을 수 있다. (근데 이미 애플에서 manager를 가지고 있는 클래스가 있는데...???) CustomImagePicker 디자인도 이상하고 앨범별로 ..
-
210619 - TILTIL/2021 2021. 6. 19. 23:53
CleanCode - UnitTest Test를 작성하며 코드를 작성해야 하는데 진도가 느려지게 되니 자꾸 미루게 된다 ㅠㅠ 테스트 슈트가 없으면 자신이 수정한 코드가 제대로 도는지 확인할 방법이 없다. (인정.....) 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트다. 테스트 케이스가 있으면 변경이 두렵지 않으니까!! TDD법칙 세가지 실패하는 단위 테스트를 작성하기 전까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 가독성!! 가독성!! 가독성!! 실제 환경에서는 절대로 안되지만 테스트 환경에서는 전혀 문제없는 방식이 있다. 대게 메모리나 CPU 효..
-
210616 - TILTIL/2021 2021. 6. 17. 00:17
Multi Image Picker Multi selection을 위한 phokit의 개념들은 이제 대부분 이해를 한 거 같다. PHAsset, assetCollection, collectionList, fetchResult, fetchOptions, imageManager, CachingImageManager 등등 대부분 공부를 했다. CollectionView도 내가 원하는 대로 구현을 할 수 있게 됐다. 그런데 막힌 부분이 생겼다... 바로 이미지를 선택하면 선택한 asset을 배열에 넣고 사용자가 이미지 선택을 취소할 수도 있으니 취소하면 배열에서 빼야 하는데... 꼭 사용자가 넣은 순서대로 빼는 게 아니니까 이 부분을 어떻게 구현해야 하는지가 문제다... 생각해본 건 image의 tag를 바꾼 뒤..
-
210615 - TILTIL/2021 2021. 6. 16. 00:02
Clean code 오류처리 부분이 이해가 잘 안 돼서 다시 한번 읽었다. do catch문을 이용해 범위를 지정하자 먼저 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하자. 일단 예외를 보내게 만들고 그 다음 예외를 좁혀서 코드를 만들면 된다 외부 API를 이용할때는 wapper class를 만드는 게 좋다. PhotoKit 공부하기 ㅠㅠ 제일 많은 시간을 쓰는 부분인데 진도가 빠르게 나가지 않는다... 마음속에서 그냥 오픈소스로 가져다가 프로젝트 만들까?? 하는 마음이 들지만 기본 기능으로 만들지 못하는 걸 오픈소스를 가져다 쓰는 게 의미가 있나 싶어 일단은 계속 도전 중!! Callback 함수?? 글을 읽다보면 자주 나오는 말인데 뭔지 정확하게 몰라서 공부했다. 참고한 ..
-
210614 - TILTIL/2021 2021. 6. 14. 17:35
Clean Code - 오류 처리 오류코드를 만드는 거보다 예외를 이용하여 구현을 분리하자. Exception에 의미를 담아 제공하자 그냥 툭 예외만 던지면 실패했을 때 이해하기 힘들어진다. IndexSet reloadSection(_:) 메서드에서 파라미터로 IndexSet을 받길래 뭐지 하고 공부했다. 다른 컬렉션에서 elemetns의 인덱스를 나타내는 Intger 값의 컬렉션 즉 reloadSection(_:)메서드에서 나타내는 것은 section의 인덱스를 모아서 파라미터로 전달한다는 것이다. collectionView.reloadSection(IndexSet(integer: 0)) 하면 0의 값을 가진 section의 인덱스를 보낸다는 의미가 되는 것 CollectionView 오늘 공부한 부분..
-
210613 - TILTIL/2021 2021. 6. 14. 00:08
Clean Code - 객체와 자료구조(Object and DataStructure) 변수를 private으로 선언하더라도 각 값마다 get set 메서드를 제공한다면 구현을 외부로 노출하는 셈이다. 추상 인터페이스(프로토콜??)을 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 한다. 객체지향에서 어려운 변경은 절차적인 코드에서 쉽고 반대도 성립한다. 즉, 때로는 단순한 자료구조와 절차적인 코드가 적합한 상황도 있다.(근데 난 모르겠다.) 이번 장은 결과적으로 어떻게 하라는건지 아직 이해하기 힘들었다. (특히 자바로 쓰여있어서 그런 거 같다.) 여기서 말하는 DataStructure가 struct를 말하는 건지 class지만 단순히 구조를 나타내기 위한 객체를 말하는 건지부터 정확하게 ..