seong_hye, the developer

Swift) 구조적 특징에 대해 알아보기 본문

IOS

Swift) 구조적 특징에 대해 알아보기

seong_hye 2022. 12. 16.

 

📘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 등 구조적 상태 시스템


 

Comments