클로저
1. 클로저란?
- 코드에서 독립적으로 전달 및 사용할 수 있는 기능을 가진 코드 블록.
- 변수나 상수에 저장 가능하며, 함수의 인자로 전달할 수 있음.
- 함수 = 이름이 있는 클로저
- 클로저 = 코드의 묶음
2. 클로저 문법
- 클로저는 다음과 같은 형태로 작성됨.
{ (매개변수) -> 반환타입 in
실행 코드
}
3. 캡처(Capture)
- 클로저는 외부 변수나 상수의 값을 캡처하여 저장함.
var number = 10
let closure = { number += 5 }
closure()
print(number) // 15
* 일반적인 함수와 비교했을때, 일반 함수는 실행이 끝나면 지역 변수가 사라지지만 클로저는 실행될 때 해당 변수나 상수의 값을 저장하고, 이후에도 그 값을 사용할 수 있도록 유지함.
클로저 기본 예제
let greet = { (name: String) -> String in
return "Hello, \(name)!"
}
print(greet("Alice"))
func performAction(action: () -> Void) {
action()
}
performAction {
print("Action performed!")
}
객체지향 프로그래밍(OOP)
1. 객체지향 프로그래밍 :
- 객체(Object)를 기반으로 프로그램을 설계하는 방식.
- 주요 원칙:
캡슐화(Encapsulation) : 데이터를 숨기고 외부에는 필요한 인터페이스만 제공.
상속(Inheritance) : 기존 클래스를 확장하여 새로운 클래스를 생성.
다형성(Polymorphism) : 같은 메서드를 다양한 방식으로 동작하게 함.
추상화(Abstraction) : 불필요한 세부 사항을 숨기고 중요한 부분만 표현.
2. 클래스와 객체
클래스(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("Woof!")
}
}
let dog = Dog(name: "Max")
dog.makeSound( )
Step 1 : 클로저 구현하기
1. 간단한 클로저 구현 :
숫자 배열 [1, 2, 3, 4, 5] 를 생성하고, 클로저를 사용해 배열의 모든 값을 2배로 만든 결과를 출력하세요.
2. 클로저 캡처 이해 :
클로저가 외부 변수 값을 캡처하는 동작을 확인.
* 변수를 캡처하여 값이 지속적으로 증가하는 모습을 볼 수 있음.
Step 2 : 객체지향 프로그래밍 구현하기
1. 동물 클래스 설계 :
다음 요구 사항에 맞는 클래스를 구현하세요.
- Animal 클래스 : name 속성과 makeSound() 메서드를 포함.
- Dog 클래스 : Animal을 상속받고 makeSound() 메서드를 오버라이드하여 "Bark!" 출력.
- Cat 클래스 : Animal을 상속받고 makeSound() 메서드를 오버라이드하여 "Meow!" 출력.
2. 다형성 확인 :
Animal 타입 배열에 Dog와 Cat 객체를 저장하고, 배열의 각 객체에서 makeSound() 메서드를 호출하세요.
* 경고는 Animal 타입 배열이 선언되었지만 사용되지 않았기 때문에 발생.
for 문 등을 추가하여 배열의 각 객체에서 메서드를 호출하면 경고가 사라짐.
'iOS' 카테고리의 다른 글
[iOS] 2025.02.26 Combine (0) | 2025.02.26 |
---|---|
[iOS] 2025.02.25 비동기 프로그래밍 / 제네릭 (0) | 2025.02.25 |
[iOS] 2025.02.24 자료구조 / 메모리 구조 및 ARC (0) | 2025.02.24 |
[iOS] 2025.02.21 Struct와 Class / 프로토콜 (0) | 2025.02.21 |
[iOS] 2025.02.12 프로젝트 : "간단한 가위바위보 게임 만들기" (0) | 2025.02.12 |