[SweepSwift] 1주차 Study Backup

1주차

stored property 대신에 computed property를 사용하는 상황과 그 반대의 경우에 대해 설명하시오.

저장 프로퍼티(stored property) 대신 연산 프로퍼티(computed property)를 사용하는 경우는 다음과 같습니다.
해당 변수에 실제 값을 저장하는 경우가 아니라 다른 저장 프로퍼티의 값을 연산하여 사용할 때
간접적으로 다른 프로퍼티의 값을 설정해 주고자 할 때
반면, 저장 프로퍼티가 이용되는 경우는 변수를 저장하여 사용할 때... 그러니까, 일반적인 경우에 자주 사용한다고 볼 수 있습니당.
저장 프로퍼티가 성능 측면에서 더 뛰어나다고 할 수 있는 건 아마 지연 저장 프로퍼티에서 나온 게 아닐까요?! 지연 저장 프로퍼티는 해당 변수를 사용하기 전까지 메모리에서 올리지 않고, 사용할 때부터 저장하기 때문에 필요한 성능 저하나 공간 낭비를 줄일 수 있으니까요

 

https://github.com/SweepSwift/iOS_InterviewStudy/issues/2

 

stored property 대신에 computed property를 사용하는 상황과 그 반대의 경우에 대해 설명하시오. · Issue #

Q: stored property 대신에 computed property를 사용하는 상황과 그 반대의 경우에 대해 설명하시오. A: Computed Property를 사용하는 상황은 매번 property를 사용할 때 마다 값을 계산해야 될 때 사용됩니다. 주

github.com

 

 

 

REST API의 장점과 단점을 설명하세요

먼저, API란 서로 다른 프로그램이 상호 데이터를 교환하는 방식을 말한다. REST API란 REST(Representational State Transfer)를 기반으로 만들어진 API를 말한다.
즉, HTTP 요청을 보낼 때 어떤 URI에 어떤 method를 사용할지 개발자들 사이에 지켜지는 약속을 의미한다. 여기서, REST는 여러 원칙이 있는데, 자세히 살펴보자면 다음과 같다.


Uniform Interface(인터페이스 일관성)
포스트당 고유한 주소가 있어 각자 식별이 가능해야 한다. 그래야 요청했을 때 원하는 데이터를 가져올 수 있으니까!
또, HTTP method를 통해 해당 자원을 가져올 수 있어야 한다.

Stateless(무상태성): REST는 HTTP 기반에서 구현되기 때문에 HTTP의 특성을 REST 또한 물려받은 것이다. Stateless, 즉 무상태성이란 클라이언트가 서버에 데이터를 요청할 때, 그 정보가 서버에 저장되지 않고 각 응답에 대한 요청을 받는 것을 말한다.
Cacheable(캐시 처리 가능)
데이터를 캐싱하여 이전에 가지고 왔던 데이터는 빠르게 가져올 수 있도록 한다.
Layered System(계층화)
서버가 계층형 구조를 만들듯이, REST API 또한 계층형 구조를 만들어 데이터를 전달한다.
Self-Description
이해할 수 있는 자체 표현 구조를 만들어 주어야 한다.
동사보드난 명사를, 대문자보다는 소문자를, 링크를 보고도 대략적인 정보와 구조가 나타나도록 해야 한다.

 

장점

사용하기 쉽다. 해당 주소를 보면 어떤 데이터를 전달하는지 알 수 있다.

웹의 장점을 최대한 활용한 아키텍쳐로, 하나의 언어에만 종속되지 않는다.

 

 

단점

  • Overfetching
    • 내가 필요한 정보보다 더 많은 정보가 로딩될 수 있다.
  • Underfetching
    • 다양한 정보들들을 잘게 분산시켜 놓았기 때문에, 원하는 정보가 많다면 추가로 많은 요청이 필요할 수 있다.
  • Endpoint
    • 서비스 규모가 커질수록 엔드포인트가 늘어나 관리하기가 어려워질 수 있다.

 

다시 ,, 정리가 필요할듯 ㄱ-

 

https://github.com/SweepSwift/iOS_InterviewStudy/issues/3

 

REST API의 장점과 단점을 설명하세요 · Issue #3 · SweepSwift/iOS_InterviewStudy

REST API의 장점 HTTP 프로토콜을 기반으로 하여 HTTP 프로토콜 메서드를 사용하여 CRUD가 가능하며 리소스를 다루기에 직관적인 디자인을 가지고 있습니다. 엔드포인트를 추가하여 시스템을 확장할

github.com

 

 

 

 

 

Generic이 무엇이고 어떻게 동작하는지 설명해주세요.

swift는 타입에 엄격한데, 엄격한 타입 내에서 자유롭게 사용할 수 있도록 해주기 땜에 좋음
Generic이란 type에 상관없이 동작하는 타입을 의미하며, 기존에 사용자가 정의할 수 있던 클래스와 구조체뿐만 아니라 기존의 타입들까지 혼용하여 사용할 수 있도록 해 줍니다.
장점으로는 코드의 중복이 감소하며, 재사용성이 증가합니다. 만약 여러 곳에서 다양하게 사용되는 코드라면 제네릭으로 작성하여 중복을 피할 수 있습니다.


예를 들면, 아래와 같습니다.

                  struct IntStack {
                      var items: [Int] = []

                      mutating func push(_ item: Int) {
                          items.append(item)
                      }

                      mutating func pop() -> Int {
                          return items.removeLast()
                      }
                  }

 

기존에 존재하는 Stack을 String으로도 사용하고 싶다면, 일일이 Int를 String으로 바꾸어 새로운 구조체를 만들어 주어야 할 것입니다.

 

                  struct Stack<Element> {
                      var items: [Element] = []

                      mutating func push(_ item: Element) {
                          items.append(item)
                      }

                      mutating func pop() -> Element {
                          return items.removeLast()
                      }
                  }

제네릭을 사용하여 중복 코드를 줄여 사용할 수 있습니다.
또, 사용자가 정의한 타입을 Collection에 넣어 사용하려고 할 때, generic을 사용한다면 메모리 낭비를 줄일 수 있습니다. 특정 함수를 기존의 타입 하나로 선언한다면 컴퓨터 내부에서는 각 타입마다의 Stack이 고정되어 추후 다른 타입을 넣으려고 한다면 오류가 날 것입니다.

따라서, 다른 유형의 타입을 넣게 되면 컴퓨터는 내부에서 새로운 스택을 하나 만들게 됩니다. 하지만, 제네릭을 이용한다면 모든 유형의 스택 값을 한 스택에 저장할 수 있어 메모리 관리 측면에서 우수하다고 할 수 있습니다.

 

https://github.com/SweepSwift/iOS_InterviewStudy/issues/4

 

Generic이 무엇이고 어떻게 동작하는지 설명해주세요. · Issue #4 · SweepSwift/iOS_InterviewStudy

Generic 이란 Generic 은 코드의 재사용성을 높이고 타입 안정성을 강화하는 도구입니다. 함수, 메서드, 클래스, 구조체, 열거형 등에서 다양한 타입의 데이터를 처리할 수 있도록 해줍니다. 예를 들

github.com

 

 

 

 

 

 

 

Singleton 패턴이 무엇인지와 언제 활용할 수 있는지 설명하세요

 

특정 용도로 객체를 하나만 생성하여 프로그램이 종료될 때까지 1개만 사용하는 디자인 패턴을 말합니다.
클래스가 여러 차례 호출되더라도, 인스턴스는 내부에서 딱 한 번만 생성되며 해당 클래스는 전역 변수처럼 어느 곳에서 접근하든간에 같은 메모리에 접근할 수 있습니다. 동일한 데이터를 처리하는 객체가 다중 생성되는 경우를 막아주어 메모리 낭비를 막을 수 있습니다.
활용의 예시로 UIKit에서 사용되는 싱글톤 패턴을 살펴 보면 다음과 같습니다.

 

                  let screen = UIScreen.main    // 화면
                  let userDefaults = UserDefaults.standard    // UserDefault
                  let application = UIApplication.shared   // 앱
                  let fileManager = FileManager.default    // 파일
                  let notification = NotificationCenter.default   // 노티피케이션(특정 상황, 시점을 알려줌)

 

+) 멀티스레드 환경에서는 본래 싱글톤 패턴의 조건인 단 하나의 객체만 생성될 수 있다는 것이 위배될 수 있어 thread-safe하지 않을 수 있기 때문입니당.

이때, Thread-safe하지 않다는 것은 여러 스레드가 동시에 인스턴스를 호출하여 인스턴스가 동시에 만들어지는 것을 말합니다!


Swift에서는 static keyword를 통해 타입 프로퍼티로 변수를 생성하기 때문에 GCD의 dispatch_once가 적용되어 thread-safe합니다.

 

https://github.com/SweepSwift/iOS_InterviewStudy/issues/5

 

Singleton 패턴이 무엇인지와 언제 활용할 수 있는지 설명하세요 · Issue #5 · SweepSwift/iOS_InterviewStudy

Singleton 패턴이란 메모리에 객체에 대한 인스턴스가 단 1개만 올라가는 패턴을 의미합니다. 해당 패턴을 사용하면 동일한 역할을 수행하는 인스턴스를 여러 개 생성할 필요가 없어 메모리의 공

github.com

 

Swift에서의 싱글톤 동작 방법
https://ios-development.tistory.com/1211
https://trumanfromkorea.tistory.com/36

 

[iOS - Swift] 스위프트에서의 singleton 싱글톤 동작 이해하기 (lazy, thread safe)

싱글톤 패턴 인스턴스는 오직 한개를 사용하고, 라이프사이클 동안 절대 해제되지 않는 하나의 인스턴스 유지 swift에서는 static와 함께 전역변수로 선언하면 lazy하게 동작하는 장점이 존재 swift

ios-development.tistory.com

 

[Swift] 싱글톤 패턴 (Singleton Pattern)

[Swift] 싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴이란, 특정 용도로 객체를 하나만 생성하여 공용으로 사용하고 싶을 때 사용하는 디자인 패턴입니다. 클래스가 여러차례 호출되더라도, 인스턴스

trumanfromkorea.tistory.com