개발을 시작하는 이야기

Foundation 본문

개발 이야기/Swift

Foundation

Teiresias 2022. 4. 4. 18:07

SwiftUI를 UIKit과 비교를 했지만 UIKit에 대해서는 형식적으로만 알고 있고 실제로 이게 어떻게 동작하는지는 알지 못했기 때문에 Foundation 그리고 UIKit에 대해서 알아보려고 한다.

 

iOS 개발을 처음 시작하면 가장 처음 마주하게 되는 프레임워크는 Foundation이다. 일단 공식문서부터 살펴보자면 데이터의 저장, Text처리, 날짜 및 시간 계산, 정렬 및 필터, 네트워킹을 포함한 앱 기능과 Framewoks의 기본이 되는 Framewok라고 한다.

 

사실상 우리가데이터 타입을 지정하거나 네트워킹 같은 App에서 기본적인 기능을 구현하기 위해서는 필수적으로 import 되어야 하는 Framework이고, 그래서 새로운 Swift파일을 만들면 기본적으로 Foundation이 import 되어있게 된다.

 

그럼 Foundation으로 Jump to Definition을 해서 내부로 들어간다면 다음과 같은 수많은 리스트를 마주할 수 있다.

import Combine
import CoreFoundation
import CoreGraphics
import Darwin
import Darwin.uuid
import Dispatch
import Foundation.FoundationErrors
import Foundation.FoundationLegacySwiftCompatibility
import Foundation.NSArray
import Foundation.NSAttributedString
import Foundation.NSAutoreleasePool
import Foundation.NSBundle
import Foundation.NSByteCountFormatter
import Foundation.NSByteOrder
import Foundation.NSCache
import Foundation.NSCalendar
import Foundation.NSCharacterSet
import Foundation.NSCoder
import Foundation.NSComparisonPredicate
import Foundation.NSCompoundPredicate
import Foundation.NSData
import Foundation.NSDate
import Foundation.NSDateComponentsFormatter
import Foundation.NSDateFormatter
import Foundation.NSDateInterval
import Foundation.NSDateIntervalFormatter
import Foundation.NSDecimal
import Foundation.NSDecimalNumber
import Foundation.NSDictionary
import Foundation.NSEnergyFormatter
import Foundation.NSEnumerator
import Foundation.NSError
import Foundation.NSException
import Foundation.NSExpression
import Foundation.NSExtensionContext
import Foundation.NSExtensionItem
import Foundation.NSExtensionRequestHandling
import Foundation.NSFileCoordinator
import Foundation.NSFileHandle
import Foundation.NSFileManager
import Foundation.NSFilePresenter
import Foundation.NSFileVersion
import Foundation.NSFileWrapper
import Foundation.NSFormatter
import Foundation.NSHTTPCookie
import Foundation.NSHTTPCookieStorage
import Foundation.NSHashTable
import Foundation.NSISO8601DateFormatter
import Foundation.NSIndexPath
import Foundation.NSIndexSet
import Foundation.NSInflectionRule
import Foundation.NSInvocation
import Foundation.NSItemProvider
import Foundation.NSJSONSerialization
import Foundation.NSKeyValueCoding
import Foundation.NSKeyValueObserving
import Foundation.NSKeyedArchiver
import Foundation.NSLengthFormatter
import Foundation.NSLinguisticTagger
import Foundation.NSListFormatter
import Foundation.NSLocale
import Foundation.NSLock
import Foundation.NSMapTable
import Foundation.NSMassFormatter
import Foundation.NSMeasurement
import Foundation.NSMeasurementFormatter
import Foundation.NSMetadata
import Foundation.NSMetadataAttributes
import Foundation.NSMethodSignature
import Foundation.NSMorphology
import Foundation.NSNetServices
import Foundation.NSNotification
import Foundation.NSNotificationQueue
import Foundation.NSNull
import Foundation.NSNumberFormatter
import Foundation.NSObjCRuntime
import Foundation.NSObject
import Foundation.NSOperation
import Foundation.NSOrderedCollectionChange
import Foundation.NSOrderedCollectionDifference
import Foundation.NSOrderedSet
import Foundation.NSOrthography
import Foundation.NSPathUtilities
import Foundation.NSPersonNameComponents
import Foundation.NSPersonNameComponentsFormatter
import Foundation.NSPointerArray
import Foundation.NSPointerFunctions
import Foundation.NSPort
import Foundation.NSPredicate
import Foundation.NSProcessInfo
import Foundation.NSProgress
import Foundation.NSPropertyList
import Foundation.NSProxy
import Foundation.NSRange
import Foundation.NSRegularExpression
import Foundation.NSRelativeDateTimeFormatter
import Foundation.NSRunLoop
import Foundation.NSScanner
import Foundation.NSSet
import Foundation.NSSortDescriptor
import Foundation.NSStream
import Foundation.NSString
import Foundation.NSTextCheckingResult
import Foundation.NSThread
import Foundation.NSTimeZone
import Foundation.NSTimer
import Foundation.NSURL
import Foundation.NSURLAuthenticationChallenge
import Foundation.NSURLCache
import Foundation.NSURLConnection
import Foundation.NSURLCredential
import Foundation.NSURLCredentialStorage
import Foundation.NSURLError
import Foundation.NSURLProtectionSpace
import Foundation.NSURLProtocol
import Foundation.NSURLRequest
import Foundation.NSURLResponse
import Foundation.NSURLSession
import Foundation.NSUUID
import Foundation.NSUbiquitousKeyValueStore
import Foundation.NSUndoManager
import Foundation.NSUnit
import Foundation.NSUserActivity
import Foundation.NSUserDefaults
import Foundation.NSValue
import Foundation.NSValueTransformer
import Foundation.NSXMLParser
import Foundation.NSXPCConnection
import Foundation.NSZone
import ObjectiveC
import _Concurrency

Fundamentals

  • Numbers, Data and Basic Values : Int, Double을 비롯한 기본적 변수 사용 
  • String and Text : String에 관련된 처리들
  • Collections : Array, Dictionary, Set등의 List와 관련된 처리
  • Dates and Times : 날짜와 시간을 계산하거나 비교
  • Units and Measurement : 물리적 차원을 숫자로 표현 및 관련 단위 간 변환
  • Data Formatting : 숫자, 날짜, 측정값 등을 문자열로 변환 또는 반대 작업
  • Filters and Sorting : 배열의 검사 및 정렬에 관련된 처리 

App Support

  • Task Management : 
  • Resources : 어플리케이션의 에센과 번들 데이터에 접근 지원
  • Notifications: Notification Center 등에 관련된 처리
  • App Extension Support : 확장 애플리케이션과의 상호작용 지원
  • Error and Exceptions : API와의 상호작용에서 발생할 수 있는 문제 상황에 대처할 수 있는 기능 지원
  • Scripting Support

Files and Data Persistence

  • File System : 파일 또는 폴더를 생성하고 읽고 쓰는 기능 관리
  • Archives and Serialization : 속성 목록, JSON, 바이너리 파일 등을 객체로 변환 또는 반대 작업 관리
  • Preferences : 어플리케이션 구성을 위한 도메인 범위 정보를 지속적으로 저장
  • Spotlight : 로컬 장치에서 파일 및 기타 항목을 검색하고 앱 콘텐츠를 인덱싱
  • iCloud : 사용자의 iCloud 계정을 이용해 데이터를 동기화하는 작업 관리
  • Optimizing Your App's Date for iCloud Backup

Networking

  • URL Loading System : 표준 인터넷 프로토콜을 통해 URL과 상호작용하고 서버와 통신하는 작업
  • Bonjour : 로컬 네트워크를 위한 작업

Low-Level Utilites

  • XPC : 안전한 프로세스간 통신을 관리
  • Object Runtime : 기본 Objective-C 기능, Cocoa 디자인 패턴 및 Swift 통합에 대한 하위 수준 지원
  • Processes and Threads : 호스트 운영 체제 및 기타 프로세스와 앱의 상호 작용을 관리하고 낮은 수준의 동시성 기능을 구현
  • Steams, Sockets, and Ports : 저수준 Unix 기능을 사용하여 파일, 프로세스 및 네트워크 간의 입력 및 출력을 관리

Foundation만 해도 생각보다 수많은 기능이 포함되어있는 Framework이다.

하지만 새로운 Swift 파일을 만들고 디자인 패턴에 맞추어 작업을 조금을 하다 보면 Foundation의 한계에 부딪히고 UIKit을 import 하게 된다.

 

글이 길어진 관계로 UIKit은 별도의 페이지로 작성

 

참고자료

Developoer.apple

'개발 이야기 > Swift' 카테고리의 다른 글

[SwiftUI] Lecture 1: Getting started with SwiftUI  (0) 2022.04.08
UIKit  (0) 2022.04.05
[SwiftUI] SwiftUI란?  (0) 2022.04.03
Get과 Post의 차이점  (0) 2022.04.01
[Error] Command Ld failed with a nonzero exit code  (0) 2022.03.28