TIL
-
210801 - TILTIL/2021 2021. 8. 2. 00:29
UIAlertAction handler와 present(_:animated:completion:)의 handler 코드를 리팩터링 하는 과정에서 기존에 만들어둔 alert을 수정하려고 했는데 completion이 두 곳에 있길래 무슨 차이일까 궁금해서 알아봤다. UIAlertAction의 핸들러는 유저가 action을 선택하면 실행되는 방식이다. block to execute when the user selects the action. This block has no return value and takes the selected action object as its only parameter. present(_:animated:completion:) 메서드의 핸들러는 view가 나타나고 viewDidA..
-
21년 7월 2주차 회고TIL/2021 2021. 7. 12. 00:42
Swift - Protocol 복습, Property 복습 Protocol을 사용하지 않아서 많은 부분을 까먹었다. 이번에 프로젝트에서 사용하면서 다시 공부했다. Lazy property에 대해서 자세히 공부했다. lazy를 프로젝트에서 사용하지 않아서 특징들을 까먹었다. 기본적으로 알고 있던 건 인스턴스 생성시가 아닌 속성에 접근 시에 초기화된다는 점뿐 디테일을 까먹고 있었다. 구조체일 경우 let으로 인스턴스를 만들고 lazy 속성에 접근하면 에러가 발생한다는 점. lazy를 사용하면 인스턴스 속성을 다른 속성에서 접근이 가능하다. Naming Convention Convention에 관해서 apple에서 제공하는 가이드라인이 있어서 읽어봤다. 이름을 지을때마다 느끼는데 적절한 이름 짓기는 역시 힘들..
-
210630 - TILTIL/2021 2021. 7. 1. 10:16
Clean Code - 점진적인 개선 Clean Code를 다시 읽으면서 처음으로 고비가 왔다ㅠㅠ 엉망인 코드를 어떻게 좋은 코드로 리팩토링 했는지를 설명해주는데 안 좋았던 코드를 왜 이렇게 고쳤나 설명을 하고 있지만 java로 설명하고 이 코드로 뭘 하려는지 잘 이해가 안 돼서 코드를 보는데 한참이 걸렸다... 하지만 이런 코드가 20개 정도는 더 남았다.... 빨리 읽으려 하지 말고 다시 천천히 이해해보도록 노력해야겠다. 오늘 얻어간 건 이 코드를 고칠 때 미리 작성해둔 Test를 기반으로 바꾸고 있다는 점이다. Concurrency Operation에 대해서 복습을 하고 dependency에 대해서 공부를 했다. 그리고 apple document에 Concurrency programming을 읽었다..
-
210629 - TILTIL/2021 2021. 6. 29. 23:28
Clean Code - 점진적인 개선 오늘 읽은 부분은 무언가를 배운다는 것보다 전반적으로 깔끔하게 잘 짜인 프로그램을 보여주고 이 프로그램을 어떻게 만들었는지를 설명해주는 장이였다. 함수의 길이, 아래로 읽어가듯이 쓰인 구조 등을 살펴보았다. 중요한 것은 한번에 이런 코드가 나오는 게 아니라 점차적으로 코드를 수정해 나간다는 부분이다. 장이 길어서 한번에 다 읽지는 못했고 오늘은 초안을 만들기 전까지만 읽었다. TDD Test의 필요성은 프로젝트를 진행하면서 계속 느끼고 있었는데 나중에 나중에 계속하다가 이제 더 이상 미룰 수 없어서 오늘부터 제대로 공부하기로 했다. 지금까지 미룬이유는 testdouble 때문이었다..ㅠㅠ 차근차근 공부해보고 개념을 이해하는것도 중요하지만 직접 만들어보고 테스트해보는 ..
-
210628 - TILTIL/2021 2021. 6. 28. 23:34
CleanCode - Concurrency 무엇과 언제를 분리하면 애플리케이션 구조와 효율이 나아진다. 동시성은 항상 성능을 높여주는 게 아니다. 두 스레드가 같은 변수를 공시에 참조하면 잘못된 결과를 내놓을 수 있다. 동시성 코드가 일으키는 문제를 막을 수 있는 방법들 SRP: Single Responsibility Principle 메서드, 클래스 등을 변경할 이유는 한 가지어야 한다. 자료 범위를 제한하라 : 여기선 synchronized 키워드를 사용하라 하지만 swift에서는 해당 키워드가 없으므로 GCD를 잘 이용해야 할 거 같다. Concurrency RunLoop의 개념 Main - Background Thread Thread classs - 자주 사용하지는 않는다. Operation 과 ..
-
210627 - TILTIL/2021 2021. 6. 27. 23:53
Clean Code - emergent property 다음을 기억하면서 프로그래밍하도록 하자. 테스트를 작성한다. 중복을 최대한 줄인다. 의도를 잘 표현한다. 클래스 메서드의 수를 최소로 줄인다. 이번 장은 이전에 하던 말들을 다시 또 하는 느낌이었다. String CRUD String에서 제공하는 CRUD 메서드에 대해서 복습했다. append, insert, remove, replace, range, contain, compare 등등 프로젝트를 진행할 때 자주 쓰지는 않았지만 알아두면 언젠가 쓸 일이 있을 것이다. MVC Pattern 객체들의 역할과 책임을 Model View Controller로 나누어 놓은 것 Model - 데이터 관리 View - 사용자에게 보이는 화면 Controller ..
-
210624 - TILTIL/2021 2021. 6. 25. 03:00
CleanCode - System 객체를 생성할 때 설정 논리와 실행 논리를 분리해야 모듈성이 높아진다. Abstract factory pattern?? 애플리케이션이 객체를 생성할 시점을 결정할 때 이걸 이용하면 객체 생성 시점은 애플리케이션이 결정하지만 객체를 생성하는 코드는 모른다. 의존성 주입(Dependency Injection) 관심사를 적절히 분리해 관리한다면 소프트웨어 아키텍처는 점진적으로 발전할 수 있다. - 관심사라는 말이 자꾸 나오는데 이게 뭔데..? String 복습 StringIndex String의 다양한 생성자 SubString String에서 index를 이용할 일이 없어서 까먹었는데 다시 복습을 하면서 상기시켰다. Int가 아니라 String.Index타입이다. Collec..
-
210623 - TILTIL/2021 2021. 6. 24. 01:21
Custom Calendar 구현 어제 고민했던 부분을 계속 고민했었는데 오픈소스도 찾아보고 유튜브도 찾아보고 해서 대충 알게 됐다. Calendar에서 제공하는 메서드와 속성을 이용하면 각 달의 첫 날을 알 수 있었고 날짜도 알 수 있었다. open과 public의 차이 예전에 공부한 적이 있었는데 public은 자주 사용했지만 open은 사용하지 않아서 까먹고 있었다. open은 public보다 높은 공개 수준으로 외부 모듈에서 상속과 override가 가능하다. public은 외부모듈에서는 상속과 override 불가! sholdAutorotate 이 속성은 딱 한 ViewController에 대해서만 화면 회전을 설정하고 싶을 때 사용하는 속성이다. 이전에 화면 전환에 대해서 공부할땐 전체적으로 ..