일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- segue
- SWIFT
- protocol
- 글또
- uikit
- NotificationCenter
- Refresh
- Git
- IOS
- http
- Switch
- self
- escaping
- SWIFTUI
- array
- PushNotification
- ScrollView
- 화면전환
- apns
- 고차함수
- list
- singleton
- class
- mvvm
- struct
- calendar
- 회고
- error
- viewlifecycle
- Observer
- Today
- Total
seong_hye, the developer
Swift) 구조적 특징에 대해 알아보기 본문
📘Swift 구조적 특징
Swift는 안전성, 성능, 현대적 문법을 모두 고려하여 설계된 언어로
다른 언어들과 구별되는 구조적 특징(structural characteristics)이 아주 뚜렷함
🔹정적 타입(Static Typing) 기반 언어
변수의 타입이 컴파일 시점에 결정됨
타입 추론도 가능하지만 실제로는 정적 타입 시스템
let a: Int = 3 // type: Int
let one = 1 // type: Int
let a = "A" // type: String
let b: Character = "B" // type: Character
➡️ 장점
컴파일 시 오류를 빨리 찾을 수 있음
성능 최적화에 유리
🔹값 타입(Value Type) 중심 구조
struct, enum 등 값 타입(value type)이 기본
class는 참조 타입(reference type)이지만 구조체보다 덜 권장됨
struct Point {
var x: Int
var y: Int
}
➡️ 장점
- 상태 변화 추적이 쉬움
- 쓰레드 간 데이터 안정성 확보
- 구조체 간 복사는 복사본 생성 -> 원본에 영향 없음
🔹옵셔널(Optional)과 안전한 널(Null) 처리
nil이 가능한 변수는 반드시 ?를 붙여야 함
옵셔널 바인딩 ( if let, guard let ) 으로 안전하게 해제
var name: String? = "Tom"
if let unwrapped = name {
print(unwrapped)
}
➡️ 장점
- 널 포인터 예외를 줄여줌
- Swift 코드의 안정성을 높임
🔹함수형 프로그래밍 요소 내장
map, filterm reduce 등 고차함수 지원
클로저(익명 함수) 표현이 매우 간결
let names = ["a","b","c"]
let upper = names.map {$0.uppercased()}
🔹프로토콜 중심 설계 (Protocol-Oriented Programming)
인터페이스 역할을 하는 protocol이 Swift에서 매우 중요한 역할
프로토콜 확장(extension)을 통해 기본 구현 제공 가능
protocol Drawable {
func draw()
}
extension Drawable {
func draw() {
print("기본 도형")
}
}
➡️ 장점
- 유연한 설계
- 다중 상속 대신 다중 프로토콜 채택 가능
🔹확장성: Exntension과 Protocol Extension
기본 타입에 기능을 추가할 수 있음
extension Int {
var squared: Int { return self * self }
}
let x = 4.squared // 16
🔹에러 처리 구문 명확
throw, try, catch, do 블록을 예외 처리
명시적으로 오류를 던지고 받아야 함
enum MyError: Error {
case failed
}
func risky() throws {
throw MyError.failed
}
do {
try risky()
} catch {
print("에러 발생")
}
🔹메모리 안전성과 ARC (Automatic Reference Counting)
클래스 기반 객체는 ARC로 메모리 자동 관리
강한 참조 순환 (strong reference cycle) 방지 필요: [weak self], [unowned self]
completion = { [weak self] in
//self는 optional 타입으로 사용됨.
guard let self = self else {
return
}
print("Name: \(self.name)")
}
🔹현대적인 문법과 간결한 표현
타입 추론
private var person = "홍길동" // String
private var number = 5 // Int
문자열 보간
let name = "홍길동"
let age = 30
let message = "제 이름은 \(name)이고, 나이는 \(age)세입니다."
print(message) // 출력: 제 이름은 홍길동이고, 나이는 30세입니다.
파라미터 라벨
func greet(name person: String) {
print("\(person) Hi")
}
greet(name: "홍길동")
튜플 반환
return (x: 1, y: 2)
🔹 SwiftUI와의 긴밀한 결합 (Declarative UI)
Swift는 SwiftUI와 함께 쓰일 때 구조적으로 매우 잘 어울림
@State, @Binding, @ObservableObject 등 구조적 상태 시스템
'IOS' 카테고리의 다른 글
Design) MVVM으로 넘어가는 이유가 뭘까?( vs MVC) (0) | 2024.01.21 |
---|---|
Swift) 디자인 패턴에 대해 정리하기 (0) | 2023.02.07 |
Swift) 동기 vs 비동기에 대해서 알아보기 (0) | 2022.11.10 |
Swift) StateObject, ObservableObject, EnvironmentObject (0) | 2022.11.02 |
Swift) Error Code (0) | 2022.10.28 |