TIL(Today I Learned)

11월 24일(화)

학습내용

  • JuiceMaker에서 사용하는 객체에 의존성 주입을 적용해보기 위하여 의존성 주입에 대해서 찾아보았다.
    • 의존성 주입은 객체에서 필요한 다른 객체(프로퍼티)를 init으로 초기화하거나 메서드를 이용하여 변경이 가능하도록 하는 것이다.
    • 의존성 주입은 Creational Design Pattern 이다.
    • 클라이언트(객체)에게 필요한 서비스(의존성)를 주는 것(주입)이므로 의존성 주입이라고 한다.
    • Constructor Injection(init으로 주입), Setter Injection(Method로 주입), Interface Injection(setter 구현을 요구하는 Protocol을 채택해서 주입) (출처: https://en.wikipedia.org/wiki/Dependency_injection)

문제점/고민한점

  • 의존성 주입에서, Class Student { let name: Any init(name: Any) { self.name = name } } 이라는 클래스를 Student(“paul”)로 객체를 만들었다고 가정하면, 이는 String은 struct이니깐 이것도 의존성 주입이라고 할 수 있는 것인가? (즉, init함수를 통해 객체의 프로퍼티를 초기화 할 수 있도록 구현 했으면, 이를 의존성 주입 패턴을 사용했다고 말할 수 있는 것인가?)
  • UIStackView의 Alignment와 Distribution에는 여러 옵션이 있는데 각각 무슨 차이가 있고, 버튼을 나열하거나 과일 목록을 가로로 나열하려고 하는데 어떤 옵션을 사용해야 할까?

해결방법

  • 의존성 주입에서, Class Student { let name: Any init(name: Any) { self.name = name } } 이라는 클래스를 Student(“paul”)로 객체를 만들었다고 가정하면, 이는 String은 struct이니깐 이것도 의존성 주입이라고 할 수 있는 것인가? (즉, init함수를 통해 객체의 프로퍼티를 초기화 할 수 있도록 구현 했으면, 이를 의존성 주입 패턴을 사용했다고 말할 수 있는 것인가?)
    • 예전에 의존성 주입을 몰랐을 때 아무 생각없이 프로퍼티가 교체 가능하도록 구현 했었는데, 그럼 이때 간단하게 구현한게 의존성 주입을 사용했다고 볼 수 있는건가? 라는 생각이 들어서 의존성 주입을 의도해서 사용한게 아니므로 의존성 주입 패턴을 사용한 것이 아니라고 생각했다.
    • 하지만 어쨋든 객체에서 필요한 서비스를 init 이나 setter 함수를 통해 초기화가 가능하므로, 의존성 주입 패턴을 사용했다고 말할 수 있을 것 같다.
  • UIStackView의 Alignment와 Distribution에는 여러 옵션이 있는데 각각 무슨 차이가 있고, 버튼을 나열하거나 과일 목록을 가로로 나열하려고 하는데 어떤 옵션을 사용해야 할까?
    • Alignment는 UIStackView 내부의 뷰를 정렬하는 방법(뷰가 축을 기준으로 어디에 위치할지)을 설정하는 옵션이다.
      • fill : 내부 뷰를 StackView에 꽉 차도록 사이즈를 조절한다. (기본값)
      • top(leading) : Axis가 horizontal 일때는 top, vertical일 때는 leading이며, 각각의 뷰 상단(왼쪽)을 맞춰서 정렬한다.
      • center: 각각의 뷰 정중앙을 맞춰서 정렬한다.
      • bottom(trailing) : Axis가 horizontal 일때는 bottom, vertical일 때는 trailing이며, 각각의 뷰 하단(오른쪽)을 맞춰서 정렬한다.
      • firstBaseline: 텍스트 첫번째 줄의 Baseline에 맞춰서 뷰를 정렬한다. (Baseline은 텍스트의 하단 기준선을 의미하며, 뷰가 텍스트뷰일때만 적용가능한 것 같다.)
      • lastBaseline: 텍스트 마지막 줄의 Baseline에 맞춰서 뷰를 정렬한다.
    • Distribution은 UIStackView 내부의 뷰를 분포하는 방법(뷰의 사이즈와 간격)을 설정하는 옵션이다. (참고: https://www.hackingwithswift.com/example-code/uikit/what-are-the-different-uistackview-distribution-types)
      • fill : 각각 뷰들의 content hugging priority 에 맞게 늘려서 배치한다. (?)
      • fillEqually : 뷰들을 같은 크기로 만들어서 배치한다.
      • fillPropotionally : 뷰의 고유 사이즈를 기준으로 뷰의 상대적 비율에 맞게 배치한다. (?)
      • equalSpacing: 뷰를 동일한 간격으로 배치한다.
      • equalCentering: 각각의 뷰 정중앙을 기준으로 동일한 간격으로 하여 배치한다.