iOS: 숨참고 Swift Dive(2)

Eden·2024년 10월 29일
2

iOS

목록 보기
9/18
post-thumbnail

06. 조건문

프로그램의 흐름을 제어하는 문법으로, 특정 조건이 참인지 거짓인지에 따라 코드 블록을 실행하거나 건너뛸 수 있다.

if 문

  • 조건이 참이면 코드 블록을 실행하고, 거짓이면 else의 코드 블록을 실행한다.
  • if와 else 중간에 조건을 추가하려면 else if로 조건을 추가할 수 있다.
var age = 15

if age >= 20 {
    print("20살이 넘은 성인입니다")
} else if age >= 17 {
    print("20살 미만이고 17살 이상인 고등학생입니다.")
} else if age >= 14 {
    print("17살 미만이고 14살 이상인 중학생입니다.")
} else {
    print("어린이 입니다!")
}

guard 문

  • 조건이 거짓일 때 코드 블록을 빠져나가는 조건문
  • 조건이 참일 경우 코드를 계속 진행하고, 거짓일 경우 else 코드 블록에서 탈출해야 한다.
  • else 블록은 필수이며, 탈출 키워드(return, break, continue, throw 등)가 필요하다.
func checkAge(age: Int) {
    guard age >= 20 else {
        print("미성년자입니다.")
        return
    }
    print("성인입니다.")
}

💡 Tip: guard 문은 주로 함수나 반복문에서 조건이 맞지 않을 때 빠르게 종료하는 데 사용된다. 이를 "early exit"라고 부른다.

switch 문

  • 하나의 값을 여러 경우와 비교하는 조건문
  • 모든 경우의 조건을 처리해야 하며, case와 default를 사용한다.
let score = 80

switch score {
case 90...100:
    print("A 등급 입니다!")
case 80..<90:
    print("B 등급 입니다.")
case 70..<80:
    print("C 등급 입니다.")
default:
    print("D 등급 입니다.")
}

💡 Tip: switch 문에서 case는 중첩될 수 없으며, 모든 경우를 처리해야 하기 때문에 default 블록을 꼭 포함해야 한다. fallthrough 키워드를 사용해 다음 case로 넘어갈 수 있다.


07. 반복문

반복문은 배열이나 범위의 숫자를 반복적으로 접근할 때 사용

for 반복문

  • 배열(Collection Type)과 범위의 숫자를 반복할 수 있다.
let names = ["Anna", "Alex", "Brian", "Jack"]

for name in names {
    print(name)
}

while 반복문

  • 조건이 참인 동안 코드 블록을 반복 실행
var count = 10

while count > 0 {
    print(count)
    count -= 1
}

💡 Tip: 반복문에서 특정 조건이 맞을 때 반복을 멈추고 싶다면 break 키워드를 사용할 수 있다. 특정 조건에서 현재 반복을 건너뛰고 다음 반복으로 넘어가고 싶다면 continue 키워드를 사용한다.


08. 함수

함수는 재사용이 가능한 코드의 집합으로, 특정 작업을 수행하는 코드 블록

  • 함수의 선언과 사용
func sayHello(name: String) -> String {
    return "\(name)님 안녕하세요!"
}

let greeting = sayHello(name: "Eden")
print(greeting)
  • 파라미터와 반환값이 없는 함수
func printHello() {
    print("안녕하세요!")
}

printHello()

Swift 컨벤션 가이드 No.5: 함수의 코드 스타일

  • 함수의 이름은 소문자로 시작해서 Camel Case로 맞춰주세요.
  • 파라미터의 이름은 소문자로 시작해서 Camel Case로 맞춰주세요.
  • > 연산자 앞뒤로 공백을 넣습니다.
// ✅ 함수의 이름은 messageToBirthday로 message to birthday 의 Camel Case
// ✅ 파라미터의 이름은 isTodayBirthDay로 소문자 Camel Case
func messageToBirthday(isTodayBirthDay: Bool) -> String {
    // 구현부
}

// ❌ 함수의 이름이 소문자로 시작하지만 Camel Case가 아니여서 읽기 힘들어요.
// ❌ 파라미터의 이름이 소문자로 시작하지만 Camel Case가 아니여서 읽기 힘들어요.
func messagetobirthday(istodaybirthday: Bool) -> String {
    // 구현부
}

09. 고급 데이터 타입(Collection Type)

Array (배열)

  • 동일한 데이터 타입의 여러 개 값을 순서대로 저장하는 데이터 타입
var numbers = [1, 2, 3, 4, 5]
numbers.append(6)
print(numbers)  // [1, 2, 3, 4, 5, 6]
  • 배열에 값 추가하기: append(), insert()
    • append(_:): 배열의 마지막에 값을 추가
    • insert(_:at:): 특정 위치에 값을 추가
var array = [10, 20, 30]
array.append(40)  // [10, 20, 30, 40]
array.insert(25, at: 2)  // [10, 20, 25, 30, 40]
  • 배열의 값 제거하기: remove() 메서드들
    • removeLast(): 마지막 값을 제거
    • removeFirst(): 첫 번째 값을 제거
    • remove(at:): 특정 위치의 값을 제거
    • removeAll(): 모든 값을 제거
var array = [10, 20, 30, 40, 50]
array.removeLast()  // [10, 20, 30, 40]
array.removeFirst()  // [20, 30, 40]
array.remove(at: 1)  // [20, 40]
array.removeAll()  // []
  • 배열의 유용한 속성들
    • count: 배열의 요소 개수를 반환
    • isEmpty: 배열이 비어있는지 여부를 반환
    • first, last: 배열의 첫 번째, 마지막 요소를 반환(옵셔널로 반환됨)
let array = [10, 20, 30, 40, 50]
print(array.count)  // 5
print(array.isEmpty)  // false
print(array.first)  // Optional(10)
print(array.last)  // Optional(50)

Set (집합)

  • 순서와 상관없이 같은 타입의 다른 값을 저장하는 데이터 타입
  • 중복을 허용하지 않는다.
var uniqueNumbers: Set<Int> = [1, 2, 3, 3]
print(uniqueNumbers)  // [1, 2, 3]
  • Set의 값 추가 및 삭제
    • insert(_:): 값을 추가
    • remove(_:): 특정 값을 제거
    • removeAll(): 모든 값을 제거
var defaultSet: Set<String> = ["A", "B", "C"]

defaultSet.insert("D")
print(defaultSet)  // ["A", "D", "C", "B"]

defaultSet.remove("A")
print(defaultSet)  // ["D", "C", "B"]

defaultSet.removeAll()
print(defaultSet)  // []
  • Set의 유용한 속성들
    • count: Set의 요소 개수를 반환
    • isEmpty: Set이 비어있는지 여부를 반환
    • contains(_:): 특정 값이 있는지 여부를 반환
var defaultSet: Set<String> = ["A", "B", "C"]
print(defaultSet.count)  // 3
print(defaultSet.isEmpty)  // false
print(defaultSet.contains("A"))  // true

Dictionary (딕셔너리)

  • 순서와 상관없이 키(key)와 값(value)의 쌍으로 데이터를 저장하는 데이터 타입
var capitals = ["KR": "Seoul", "JP": "Tokyo"]
capitals["US"] = "Washington, D.C."
print(capitals)  // ["KR": "Seoul", "JP": "Tokyo", "US": "Washington, D.C."]
  • Dictionary의 값 추가 및 수정
    • 키를 사용하여 값을 추가하거나 수정할 수 있다.
var defaultDictionary = ["A": "Apple", "B": "Banana"]

defaultDictionary["C"] = "Cherry"
print(defaultDictionary)  // ["A": "Apple", "B": "Banana", "C": "Cherry"]

defaultDictionary["A"] = "Avocado"
print(defaultDictionary)  // ["A": "Avocado", "B": "Banana", "C": "Cherry"]
  • Dictionary의 유용한 속성들
    • count: 딕셔너리에 저장된 값의 개수를 반환
    • isEmpty: 딕셔너리가 비어있는지 여부를 반환
    • keys, values: 딕셔너리의 모든 키, 값들을 반환
var defaultDictionary = ["A": "Apple", "B": "Banana"]
print(defaultDictionary.count)  // 2
print(defaultDictionary.isEmpty)  // false
print(defaultDictionary.keys)  // ["A", "B"]
print(defaultDictionary.values)  // ["Apple", "Banana"]

10. 클로저(Closure)

  • 익명 함수라고 불리며, 특정 작업을 수행하는 코드 블록
  • 함수의 이름이 없는 형태로, 변수를 통해 사용할 수 있다.
let greet: (String) -> String = { name in
    return "Hello, \(name)!"
}

print(greet("Eden"))  // Hello, Eden!

💡 Tip: 클로저는 함수의 파라미터로 전달되거나 함수의 반환값으로 사용할 수 있다. 클로저는 간결하게 작성할 수 있으며, 파라미터 이름을 생략하고 $0, $1 같은 방식으로 사용할 수 있다.


11. 고차 함수 (Higher-Order Functions)

  • 다른 함수를 인자로 받거나 함수를 반환하는 함수
  • map, filter, reduce 등이 고차 함수에 속한다.
let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers)  // [1, 4, 9, 16, 25]

12. 메모리와 자료구조의 맛보기

  • 메모리는 프로그램이 실행될 때 데이터를 저장하는 임시 공간
  • Swift의 변수와 상수, 함수 등은 모두 메모리에 저장된다.
  • 데이터를 효율적으로 저장하고 접근하기 위해 Array, Set, Dictionary와 같은 자료구조를 사용한다.
profile
🌐 Frontend &&  iOS && 대학생

1개의 댓글

comment-user-thumbnail
2024년 10월 30일

숨 쉴때까지 정독하겠습니다

답글 달기