@Main, Substcipts, String - Substcipts [Int]

Groot·2022년 11월 18일
0

TIL

목록 보기
102/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 면접스터디

📍 @Main이란 무엇인가?

  • swift에서 코드의 시작점을 표시하는 어노테이션이다
  • 형식은 인수를 받지 않고 Void를 반환하는 기본 형식 함수를 제공해야 함(Static func main())
  • @main 표시를 한 타입은 UIApplicationDelegate을 채택해야 한다. 그 이유는 UIApplicationDelegate 내부에 존재하는 static func main()가 호출되야 하기 때문이다.
  • @UIApplcationMain 키워드는 클래스에서만 사용가능했고 타입 기반의 Swift 코드에서는 미스매칭이 있었고 이를 해결하기 위해 @main 속성을 사용함으로 해결

🔗 Top-Level Code

  • Top-Level Code에서 선언된 변,상수 및 그 외 선언은 동일 모듈의 일부인 모든 소스파일의 코드에서 엑세스 할 수 있는 최상위 코드
  • 선언은 선언만으로 구성되어 모든 Swift 소스 파일에서 허용
  • 실행 가능한 Top-Level Code는 선언뿐만 아니라 명령문 및 표현식이 포함되며 프로그램의 최상위 진입점 말 그대로 Entry Point로만 허용

📍 Substcipts에 대한 설명

  • 일반적으로 컬렉션, 목록 또는 시퀀스의 멤버 요소에 액세스하기 위한 바로 가기로 사용하는 함수와 비슷한 기능
  • Substcipts를 사용하여 설정 및 검색을 위한 별도의 방법 없이 인덱스로 값을 설정, 검색할 수 있는 방법
  • Random Access 방법으로 접근하기 때문에 O(1)의 시간이 걸린다, 존재하지 않는 index에 접근하면 런타임 에러를 뱉는다.
  • collection 타입에서 내부 값에 접근하기 위해 인덱스로 값을 찾을 수 있도록 선언한 구문이다.
  • 매개변수의 숫자에 제한이 없고, 매개변수의 타입과 반환 타입의 제한도 없다.
  • 오버로딩도 허용
  • 함수와의 차이점은 in-out 매개변수를 사용할 수 없다.

📍 String을 Substcipts [Int]로 접근할 수 없는 이유

  • Swift의 String 및 Character 유형은 완전히 유니코드와 호환된다. -> 유니코드로 이루어짐
  • 같은 문자를 표현하는 방법이 다를수도 있고, 저장하는 양의 메모리가 다를수도 있다.
  • 특정 위치에 어떤 문자가 있는지 확인하려면 해당 문자열의 시작 또는 끝에서 각 유니코드 스칼라를 반복해야 한다. 그런 이유로 [Int]형태의 접근이 불가능하다.
  • String은 유니코드의 조합으로 되어있기 때문에 하나의 문자의 정확한 위치를 파악하기가 어렵다, 동일한 문자도 유니코드로 변경 시 길이가 달라질 수 있기도 하다.
  • 이를 해결하기 위해서 Stirng.index를 사용한다.
  • Stirng.index는 맨앞의 index부터 하나씩 접근해서 찾는 방법이다. O(n)의 시간복잡도

https://green1229.tistory.com/265
https://you9010.tistory.com/321
https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#ID626
https://leeari95.tistory.com/41
https://medium.com/@esung/swift%EC%9D%98-%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC-%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C-af37a5d503a4
https://developer.apple.com/documentation/uikit/1622933-uiapplicationmain

profile
I Am Groot

0개의 댓글