반응형
1. 클로저(Closures)
클로저란?
- 코드에서 독립적으로 전달 및 사용할 수 있는 기능을 가진 코드 블록입니다.
- 변수나 상수에 저장 가능하며, 함수의 인자로 전달할 수 있습니다.
클로저 문법
- 클로저는 다음과 같은 형태로 작성됩니다.
{ (매개변수) -> 반환타입 in
실행 코드
}
캡처(Capture)
- 클로저는 외부 변수나 상수의 값을 캡처하여 저장합니다.
var number = 10
let closure = { number += 5 }
closure()
print(number) // 15
🛠 클로저 기본 예제
// 기본 클로저
let greet = { (name: String) -> String in
return "Hello, \\(name)!"
}
print(greet("Alice")) // "Hello, Alice!"
// 함수의 인자로 클로저 전달
func performAction(action: () -> Void) {
action()
}
performAction {
print("Action performed!")
}
2. 객체지향 프로그래밍(OOP)
객체지향 프로그래밍(OOP)
- 객체(Object)를 기반으로 프로그램을 설계하는 방식.
- 주요 원칙:
- 캡슐화(Encapsulation): 데이터를 숨기고 외부에는 필요한 인터페이스만 제공.
- 상속(Inheritance): 기존 클래스를 확장하여 새로운 클래스를 생성.
- 다형성(Polymorphism): 같은 메서드를 다양한 방식으로 동작하게 함.
- 추상화(Abstraction): 불필요한 세부 사항을 숨기고 중요한 부분만 표현
클래스와 객체
- 클래스(Class): 객체를 정의하기 위한 청사진.
- 객체(Object): 클래스에서 생성된 실제 인스턴스.
🛠 OOP 기본 예제
class Animal {
var name: String
init(name: String) {
self.name = name
}
func makeSound() {
print("Some generic sound")
}
}
class Dog: Animal {
override func makeSound() {
print("Bark!")
}
}
let dog = Dog(name: "Buddy")
dog.makeSound() // "Bark!"
궁금한점 🔎
override는 언제 써야하는 것인가?
[ Swift ] Override
Swift에서 override란? 언제 사용하고, 언제 안 써야 할까? 🚀 Swift에서 override 키워드는 부모 클래스의 메서드, 프로퍼티, 또는 서브스크립트를 **자식 클래스에서 재정의(Override)**할 때 사용됩니다.
sheep1sik.tistory.com
💡 직접 구현해보기
Step 1: 클로저 구현하기
- 간단한 클로저 구현
- 숫자 배열 [1, 2, 3, 4, 5]를 생성하고, 클로저를 사용해 배열의 모든 값을 2배로 만든 결과를 출력하세요.
- 클로저 캡처 이해
- 아래 코드를 완성하여 클로저가 외부 변수 값을 캡처하는 동작을 확인하세요.
import UIKit
// 1번
let numbers = [1, 2, 3, 4, 5]
let dubled = numbers.map { $0 * 2 }
print(dubled)
// 2번
var counter = 0
let incrementCounter = {
counter += 1
}
incrementCounter()
incrementCounter()
print(counter)
Step 2: 객체지향 프로그래밍 구현하기
- 동물 클래스 설계
- 다음 요구 사항에 맞는 클래스를 구현하세요:
- Animal 클래스: name 속성과 makeSound() 메서드를 포함.
- Dog 클래스: Animal을 상속받고 makeSound() 메서드를 오버라이드하여 "Bark!" 출력.
- Cat 클래스: Animal을 상속받고 makeSound() 메서드를 오버라이드하여 "Meow!" 출력.
- 다음 요구 사항에 맞는 클래스를 구현하세요:
- 다형성 확인
- Animal 타입 배열에 Dog와 Cat 객체를 저장하고, 배열의 각 객체에서 makeSound() 메서드를 호출하세요.
class Animal {
var name: String
init(name: String) {
self.name = name
}
func makeSound() {
print("sound")
}
}
class Dog: Animal {
override func makeSound() {
print("Bark!")
}
}
class Cat: Animal {
override func makeSound() {
print("Meow!")
}
}
let dog = Dog(name: "Buddy")
let cat = Cat(name: "Tom")
dog.makeSound()
cat.makeSound()
반응형
'내배캠 iOS 마스터 6기' 카테고리의 다른 글
[ 사전캠프 6일차 ] 비동기 프로그래밍/ 제네릭 (0) | 2025.02.10 |
---|---|
[ 사전캠프 2일차 ] 자료구조/ 메모리 구조 및 ARC (0) | 2025.02.04 |
[ 사전캠프 1일차 ] Struct와 Class / 프로토콜 (0) | 2025.02.04 |