[TIL] Today I Learned 2020.02.26

Lena·2020년 2월 26일
1

TIL (Today I Learned)

목록 보기
11/19

지난 며칠동안 한 일

  1. 클로저 를 인자로 넘기는 방법을 사용해 클래스의 private 프로퍼티에 접근하는 방법을 사용해봤다. 클래스의 프로퍼티를 외부에서 변경하거나 직접 부르는 일이 없도록 했다.
  2. 클래스를 통해 만든 기능을 ViewController와 연결해서 써봤다.
  3. shake gesture를 써봤다
  4. StackView를 사용하고 화면을 구성해봤다. (stackView 안에 stackView 안에 stackView를 넣어봤다)
  5. enum의 rawValue를 외부에서 직접적으로 부르거나 변경하지 않고 구현해봤다(클로저 사용)
  6. Card 클래스의 description에 맞는 이미지 이름을 갖고 있는 UIImage를 매칭해 view로 생성했다.
  7. segmented Control을 사용했다. 선택에 따라 동작한다.
  8. 동료들과 진행 상황과 오늘 할 일에 대해서 스크럼을 했다.
  9. ARC(Auto Reference Counting), 순환참조 문제, 강한참조 strong reference, 약한참조 weak reference, 미소유참조unowned reference에 대한 강의를 들었다.
  10. KVO(Key Value Object), Observer, Observer Pattern에 대한 강의를 들었다.
  11. 클래스, 객체, 인스턴스에 대해서 다시 한번 생각해보고 학습했다. (메모리적인 부분에 대해서 더 학습하긴 했지만 간단하게 결론을 아직 확실하게 내지는 못했다.)
    Understanding Swift Performance - WWDC 2016 - Videos - Apple Developer
  12. Codable, Archiving에 대한 수업을 들었다. 수업을 듣고 마인드맵과 그림으로 내 방식대로 정리해봤다.
  13. 마스터(jk)와 면담을 했다.

새롭게 알게 된 것

!
아랫쪽 빨간 박스에서 실행되는 메소드들의 stack을 확인할 수 있다.
왼쪽 빨간 박스에서 view들의 계층을 확인할 수 있다.
콘솔에 "PO"를 활용해서 디버깅할 수 있다.
--> po: print object, 객체의 description 메서드 호출 결과 출력
https://ohgyun.com/635 참고

클래스에 private 프로퍼티(A)를 외부에서 사용하고 싶을 때 그 프로퍼티(A)가 있는 곳에 클로저를 인자로 받아오는 메소드를 만드는 방법이 있다. 이 메소드를 통해서 private 프로퍼티(A)를 외부에서 사용할 수 있다. (단, 호출은 할 수 있지만 변형은 제한된다고 알고있다.)

    class Players {
    private players = [Player]()
    func showEachPlayer(behavior: (Player) -> ()) {
        players.forEach {
            behavior($0)
        }
    }
    }

기억할 것

  1. 모르는 건 그 순간에 이해하려고 노력하고 말해보자
  2. 질문하자. 질문을 할 때는 횡설수설하지 말고 질문을 정리하고 명확하게 하자.
  3. 개념적인 걸 알았으면 practical 하게 코드로 녹여보자
  4. 집중이 잘 될 때 하는 일과 아닐 때 하는 일을 나눠야 한다. 긴 호흡의 집중과 짧은 호흡의 집중을 구분할 수 있어야 한다. 학습의 덩어리가 큰지 작은지 아는 게 중요하다.
  5. 너무 디테일하게 하지 말고 핵심만 요약해 보자. 다른 사람의 자료나 지식, 생각이나 접근을 내 방식대로 소화하거나 표현/정리해보고 내 식대로 다시 변형하거나 구현해보자
  6. 지식을 잇는걸 잘해야 학습도 잘한다. 내가 알고 있는 것 위에 쌓아 올리자.

오늘의 시도와 결론

[ 실패 하나 😊 ]

  • 시계방향으로 90도 돌리면 약간 에스컬레이터 같은 느낌이 난다. 조금 웃프지만 이거 덕분에 그 날 하루가 되게 웃겼던 것 같다. 이거 저거 실패해보면서 재밌었다.

의도한 것과 다르게 나타났던 부분
1. UIImageview가 StackView에 5개만 쌓여야 하는데 10개가 쌓였다.
2. 모든 UIImageview는 StackView에 들어갔지만 몇몇 UIImage는 출력되지 않았다.
3. 객체마다 다 다른 값이 들어가야 할 부분에 모두 같은 값이 들어갔다.

문제의 원인
1. 코드 상단에 초기화 해놓은 클래스 설정과 이 클래스와 관련있는 다른 변수들의 설정이 달랐다. 아래에 짜놓은 코드는 이 두 개를 혼합해서 쓰고 있었기 때문에 의도대로 되지 않았다.
2. UIImage(name: A.description)에서 A.description이 이미지의 이름과 매칭되도록 해줘야 하는데, 예외의 경우를 처리하지 않아서 몇 몇 UIImage만 출력이 되지 않았다.
3. 같은 값을 가져와서 모든 객체에게 같은 값을 넘겨주고 있었다.

[ 결론 👩‍💻 ]
나는 이 문제를 3일 넘게 붙잡고 있었고, 이거 때문에 봐도 봐도 모르겠고 옆사람들에게 물어봐도 모르겠고 해서 결국 마스터에게 찾아가서 물어봤다. 차근 차근 어디가 문제인지 혹시 이게 문제는 아닌지 저게 문제가 아닌지 되짚어가는 걸 보기만 해도 배운 느낌이다.

일단, 문제가 있는 부분부터 차근차근 코드를 추적해서 보자.
그리고 view에 문제가 있다면 코드만 보지말고 view 계층도 추적하면서 봐보자.

내일 할 일

  1. closure, reference type, ARC, closure capture에 대해서 학습
  2. 피드백 반영 후 수정하기
  3. viewController와 view 나누기 -> MVC 패턴 고민해보기
  4. responder Chain 수업듣기

느낀점

집중이 안될 때는 급한 일?이나 짧게 끝나는 일 부터 시작하자. '아 이것만 하자' 하고 한 번 시작하면 집중과 흐름이 잡히는 것 같다.
오전 시간을 그냥 보내지 말자.
질문도 하면 할수록 나아지고 실패도 하면 할 수록 나아진다.
실패하면서 배우는 건 당시에는 스트레스를 받기는 하지만 생각보다 더 재밌다.
나중에 내가 어떤 걸 할 수 있게 될지 조금 기대된다.
seize the day - 죽은 시인의 사회

profile
Swift, iOS 앱 개발 공부하고 있어요!

0개의 댓글