[Swift] 변수, 타입, 컬렉션, 조건문

Daehyeon Yun·2025년 1월 16일

1. 변수

  • var : 변수 (변하는 수)
var place: String

var place: String = "Paris"

var name: String = "라이언"
Text("\(name)님 안녕하세요")

# 결과 : 라이언님 안녕하세요
  • \(name)은 서식문자와 같이 활용

2. 변수의 타입

  • String : 문자열
  • Int(Integer) : 정수
  • Float : 실수
  • Double : 더 긴 실수
  • Bool : 참과 거짓(true, false)

왜 타입이 중요한가?
→ 스위프트는 안전 을 지향한다.
JS 와는 반대.

import SwiftUI

struct VariableType: View {
    
    var name: String = "DaeHyeon"
    var age: Int = 25
    var height: Float = 180.1
    var havePet: Bool = true
    
    var body: some View {
			  // VStack = Vertical Stack (세로)
        VStack{
		        // Text()는 문자열을 props로 받길 원함
            Text("\(name)")
            Text("\(age)")
            Text("\(height)")
            // havePet은 bool이므로 description()을 호출하여 문자열로 변경
            // 원래는 해당 변수에 대한 "설명"을 불러옴.
            Text("\(havePet.description)")
        }
    }
}

3. 컬렉션

  • Array : 배열 (⭐ 같은 변수 만들기)
    • indexesValues 로 구성

    • index(인덱스)로 접근

      let data: [String] = ["eggs", "milk", "flour"]
  • Set : 집합 (⭐ 모임)
    • Array 와 흡사하여 헷갈림 주의

      let musics: Set<String> = ["Rock", "Jazz", "Classical"]
    • 집합이라는 특성 상 부분집합, 교집합, 합집합 등등이 존재

    • 같은 요소들은 제거된다. (중복제거)

    • 순서가 없다.

  • Dictionary : 딕셔너리(사전) (⭐ Key와 Value)
    • KeyValue 로 구성됨 (마치 Json 처럼)

    • Apple : 사과, Desk : 책상 등등..

      var dict = [Key : Value]
      var dict = ["XYZ" : "Toronto Pearson"]
      dict["XYZ"] 결과 -> "Toronto Pearson"
  • 실습 코드
import SwiftUI

struct MyCollections: View {
    
    var foods: [String] = ["eggs", "bananas", "beans"]
    var jazzs: Set<String> = ["재즈1", "재즈2", "재즈3", "재즈4"]
    var hiphop: Set<String> = ["힙합1", "힙합2", "힙합3", "재즈4"]
    var koEngDict: [String: String] = ["사과" : "Apple", "바나나": "Banana"]
    
    var body: some View {
        // Array 예제
        Text(foods[0])
        Text(foods[1])
        Text(foods[2])
        
        // Set 예제 (hiphop과 jazzs의 합집합(intersection) 출력(description))
        Text(hiphop.intersection(jazzs).description)
        
        // Dict 예제
        // "!"는 "옵셔널"의 의미를 가지고 있으며 추후 학습 예정
        Text(koEngDict["사과"]!)
        Text(koEngDict["바나나"]!)
        
        Button {
            var intersectionMusic = hiphop.intersection(jazzs)
        } label: {
            Text("클릭")
        }

    }
}

4. 조건문

if {참 or 거짓} {
	// 실행될 코드
} else {
	// 실행될 코드
}

// else if
let score = 75

if score >= 90 {
    print("A 학점")
} else if score >= 80 {
    print("B 학점")
} else if score >= 70 {
    print("C 학점")
} else {
    print("F 학점")
}

// 예제 (다중조건문)
let age = 20
let isStudent = true

if age >= 18 && isStudent {
    print("성인 학생입니다.")
}

if age < 18 || isStudent {
    print("학생이거나 미성년자입니다.")
}

// 삼항연산자
let score = 90
let result = score >= 80 ? "합격" : "불합격"
print(result) // 합격
  • 전반적으로 다른 언어들과 사용 방법이 같음.
  • 하지만, Swift는 guard 라는 요소가 존재함.
guard 조건 else {
    // 조건이 false일 때 실행 (조기 탈출)
    exit(0) // 함수 종료, 에러 처리 등
}

// guard문은 반드시 else 문이 포함되어있어야 동작한다.

4.1 조건문 Guard

  • guardswift조기 탈출(Early exit) 를 위해 사용되는 조건문.
    • ⭐ 특정 조건이 거짓(false) 일때 코드 블록을 탈출하거나 오류를 처리하는 사용한다. → if문true 가 전재 조건이라면 guard문false 가 전재조건!
  • 사용 예제
    func checkAge(_ age: Int) {
        guard age >= 18 else {
            print("미성년자는 입장할 수 없습니다.")
            return
        }
        print("입장 가능합니다.")
    }
    
    checkAge(20)  // 입장 가능합니다.
    checkAge(16)  // 미성년자는 입장할 수 없습니다.

4.2 if문과 guard문의 차이점

  • if문 사용 예제
    func checkUser(name: String?) {
        if let validName = name {
            print("이름은 \(validName)입니다.")
        } else {
            print("이름이 없습니다.")
        }
    }
    checkUser(name: "John")
    checkUser(name: nil)
  • guard문 사용 예제
    func checkUser(name: String?) {
        guard let validName = name else { // else문 필수
            print("이름이 없습니다.")
            return // 조기 탈출 필수
        }
        print("이름은 \(validName)입니다.")
    }
    checkUser(name: "John")
    checkUser(name: nil)
  • 🤔 왜 guard 문을 사용하는가?
    1. 중첩 방지 : guard는 if문보다 코드의 중첩을 줄이고 가독성을 개선한다.
    2. 조기 탈출 : 조건이 충족되지 않을 경우 코드의 실행을 즉시 중단할 수 있다.
    3. 옵셔널 바인딩 유용 : guard let 을 사용하여 옵셔널을 해제 후 코드에서 안전하게 사용할 수 있다.
profile
열심히 살아야지

0개의 댓글