TIL은 편한 말투로 작성됩니다~
아래는 오늘 공부하며 정리한 내용과 문제 풀이 주소입니다.
- 클로저/객체지향 프로그래밍 공부 정리
- 클로저/객제지향 프로그래밍 퀘스트 제출
✅ 클로저(Closure)
클로저란?
- 변수처럼 저장하거나 다른 곳에 전달할 수 있는 작은 함수
- 변수나 상수에 저장할 수 있고, 함수의 파라미터로도 전달 가능하다.
- 간단히말해, "이름 없는 함수" 혹은 "변수에 저장할 수 있는 코드 덩어리" 라고 생각하면 된다
클로저의 기본 문법
{ (매개변수) -> 반환 타입 in
실행 코드
}
간단한 예제
let greeting = { (name: String) -> String in
return "Hello, \(name)!"
}
클로저 축약 문법
// 1. 전체 문법
let add = { (a: Int, b: Int) -> Int in return a + b }
// 2. 타입 추론
let add = { a, b in return a + b }
// 3. return 생략
let add = { a, b in a + b }
// 4. 축약 인자 이름 ($0, $1, ...)
let add = { $0 + $1 }
캡처(Capture)
- 클로저가 생성될 때 주변 변수나 상수의 값을 기억하고 저장해 뒀다가, 나중에도 사용할 수 있게 해 준다.
- 클로저는 함수와 달리 외부 변수의 값을 복사하는 게 아니라, 해당 변수 자체를 참조해서 계속 사용할 수 있다.
즉, 클로저가 실행될 때 그 변수의 최신 값에 접근할 수 있다.
var number = 10
let closure = { number += 5 } // 외부 변수 number 캡처
closure() // 앞에서 정의한 클로저 실행
print(number) // 15
- 위 코드에서
number
가var
가 아닌let
이었다면, 아래처럼 값을number += 5
로 값이 변경될 수 없어서 오류가 발생한다.
let number = 10
let closure = { number += 5 } // 오류. 변경 불가능한 값
후행 클로저
- 함수의 마지막 인자가 클로저일 때, 그 클로저를 괄호 바깥에 쓸 수 있는 문법
- 코드를 더 간결하고 읽기 쉽게 만들기 위해서 사용함
// 일반 클로저 전달 방식
함수명(파라미터: { 클로저 })
// 후행 클로저 방식
함수명 { 클로저 }
위의 예시처럼, 마지막 인자가 클로저일 때 코드를 더 간결하게 만들기 위해 후행 클로저를 사용한다.
UIKit 후행 클로저 예시
// UIKit예시
UIView.animate(withDuration: 0.3, animations: {
print("애니메이션 시작")
})
// 후행 클로저 방식
UIView.animate(withDuration: 0.3) {
print("애니메이션 시작")
}
SwiftUI 후행 클로저 예시
// SwiftUI 예시
Button(action: {
print("버튼 눌림")
}) {
Text("Click!")
}
// 후행 클로저 방식
Button {
print("버튼 눌림")
} label: {
Text("Click!")
}
⚙️ 객체지향 프로그래밍 (OOP, Object-Oriented Programming)
객체지향 프로그래밍이란?
- 객체(Object)를 중심으로 프로그램을 설계하는 방식이다.
- 현실 세계처럼 객체를 만들고, 그 객체들이 서로 상호작용하며 동작하는 방식의 프로그래밍 패러다임이다.
- 클래스와 객체
- 클래스(Class): 객체를 만들기 위한 설계도 또는 틀 (ex. 붕어빵 틀)
- 객체(Object): 클래스에서 생성된 실제 인스턴스 (ex. 붕어빵)
객체지향 프로그래밍의 주요 원칙 4가지
- 캡슐화(Encapsulation): 데이터와 기능을 하나로 묶고, 외부에선 필요한 부분만 접근 가능하도록 함
- 상속(Inheritance): 기존 클래스를 확장해 새로운 클래스를 만들 수 있음
- 다형성(Polymorphism): 동일한 메서드가 상황에 따라 다른 방식으로 동작함
- 추상화(Abstraction): 내부 구현은 감추고 필요한 기능만 외부에 보여줌
'🖋️ TIL Journal' 카테고리의 다른 글
05.20 (화) GitHub 개발 협업 방식 (0) | 2025.05.20 |
---|---|
05.19 (월) 튜터님의 피드백 (0) | 2025.05.19 |
05.14 (수) iOS 사전 캠프 (0) | 2025.05.14 |
05.13(화) iOS 사전 캠프 (0) | 2025.05.13 |
05.12 (월) iOS 사전캠프 (0) | 2025.05.12 |