일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- debounce
- CS
- Hash-table
- async
- Swift
- promise.all
- hydration mismatch
- motion.div
- Promise
- no-permission-handler-detected
- Throttle
- RN새로운아키텍쳐
- animation
- react native
- rn
- react animation
- ios
- javascript
- react-native
- react-native-image-picker
- react-native-permissions
- RN아키텍쳐
- named type
- axios
- 비동기
- RN업데이트
- await
- private-access-to-photos
- react
- React-Native업데이트
- Today
- Total
하루살이 개발일지
Swift란? Swift에서의 변수, 상수, 정적 변수 본문

Swift란?
Swift는 애플이 개발한 프로그래밍 언어로, iOS, macOS, watchOS, tvOS 및 Linux에서 사용되는 소프트웨어를 작성하는 데 사용된다. Swift는 안전하고 빠르며 현대적인 언어 사상을 반영하고 있다.
Swift의 특징
Swift는 안전하고, 빠르며, 현대적인 문법을 가진 언어이다.
1. Swift는 안전한 프로그래밍을 지향하며, 프로그래밍 도중 개발자가 저지를 수 있는 실수를 엄격한 문법을 적용해 미연에 방지한다.
- 변수는 사용 전에 항상 초기화된다.
- 배열 인덱스는 범위를 벗어나지 않도록 검사된다.
- 정수는 오버플로우가 있는지 검사된다.
- 옵셔널은 nil 값을 명시적으로 처리하도록 한다.
- 에러 핸들링을 통해 예상치 못한 오류의 제어된 복구를 가능하게 한다.
- 메모리는 자동으로 관리되어 개발자가 메모리 관리에 신경쓸 필요가 없다.
2. C언어를 기반으로 한 C, C++, Object-C와 같은 프로그래밍 언어를 대체하기 위해 만들어진 언어로, 실행 속도 최적화 및 더 빠른 컴파일 성능을 구현하게 해준다.
3. 수많은 프로그래밍 언어 문법을 참고해 좀 더 사용하기 편하고 보기 좋은 문법을 사용한다. 현대적이고 세련된 문법을 구사할 수 있다.
- Swift는 다중 패러다임 프로그래밍 언어이다.
- C : 명령형 프로그램이 패러다임
- C++, Java : 다중 프로그래밍 패러다임 (명령형 + 객체지향)
- Swift : 다중 프로그래밍 패러다임 (명령형 + 객체지향 + 함수형 + 프로토콜 지향)
변수(var), 상수(let), 옵셔널 변수
변수(var)
- var 사용
- 변수의 값을 나중에 바꿀 수 있음
- 변수 스코프는 선언된 위치에 따라 다름. 함수 내부에 선언된 변수는 외부에서 접근 불가.
var message = "Hello, World!"
message = "Hello, Swift!" // 값 변경 가능
print(message) // 출력: Hello, Swift!
상수(let)
- let 사용
- 한 번 값이 설정되면 바꿀 수 없음
- 선언과 할당을 동시에 해야 함
let pi = 3.14159
// pi = 3.14 // 오류 발생: 상수는 재할당할 수 없음
print(pi) // 출력: 3.14159
옵셔널 변수
- 옵셔널 변수는 값이 있을 수도 있고 없을 수도 있는 변수
- `?` 를 사용하여 선언
- 옵셔널 변수는 값이 없을 때 `nil`을 가질 수 있음
var optionalString: String?
이는 String 타입의 값을 가질 수도 있고 아무런 값을 가지지 않을 수도 있음
즉, 값이 string이거나 nil일 수도 있다는 뜻
[옵셔널 변수의 활용]
옵셔널 변수는 값이 없을 수 있기 때문에, 이를 확인한 후 안전하게 사용하는 것이 좋다.
(옵셔널 언래핑 : 옵셔널로 감싸진 값을 풀어 옵셔널이 아닌 값을 추출하는 작업)
1. 강제 언래핑
값이 있다고 확신할 때 `!` 를 사용해 강제 언래핑할 수 있다. but 값이 없는 경우 런타임 에러가 날 수 있으니 조심.
var optionalName: String? = "Alice"
print(optionalName!) // 출력: Alice
2. 옵셔널 바인딩
`if let` 또는 `guard let` 을 통해 안전하게 값을 언래핑할 수 있다.
if let name = optionalName {
print(name) // 값이 있을 때만 실행됨
} else {
print("값이 없습니다.")
}
3. nil 병합 연산자 (Nil-Coalescing Operator)
옵셔널 변수가 `nil`인 경우 기본값을 제공할 수 있다.
let defaultName = optionalName ?? "Unknown"
print(defaultName) // optionalName이 nil일 경우 "Unknown" 출력
등등이 있다.
정적 변수 (static)
- static 키워드 사용
- 정적 변수란, 구조체의 인스턴스나 클래스가 아닌 클래스 자체에 속하는 변수
- 즉, 클래스의 모든 인스턴스가 공유하는 변수
class Person {
static var age = 12 // 정적 변수
var lastName = "IM" // 인스턴스 변수
}
// class Person의 새로운 인스턴스 생성
var haru = Person()
var maru = Person()
var daru = Person()
// 각 인스턴스는 자신의 lastName을 가짐
haru.lastName = "Kim"
maru.lastName = "Lee"
daru.lastName = "Park"
// 정적 변수는 모든 인스턴스가 공유, 인스턴스 생성하지 않고도 출력 가능
print(Person.age) // 출력: 12
// 정적 변수 변경
Person.age = 15
print(Person.age) // 출력: 15
// 모든 인스턴스가 같은 정적 변수를 공유
print("Haru's age: \(haru.age)") // 출력: Haru's age: 15
print("Maru's age: \(maru.age)") // 출력: Maru's age: 15
print("Daru's age: \(daru.age)") // 출력: Daru's age: 15
// 모든 인스턴스의 lastName은 인스턴스마다 다름
print(haru.lastName) // 출력: Kim
print(maru.lastName) // 출력: Lee
print(daru.lastName) // 출력: Park
위 예시에서 Person 클래스의 정적 변수는 age이다. 이는 클래스 자체에 속하며, 모든 인스턴스가 이 변수를 공유한다.
반면 lastName은 인스턴스 변수로, 각 인스턴스마다 별도로 존재한다.
문자열 보간 (string interpolation)
문자열 보건은 문자열 내에 변수나 표현식을 삽입할 수 있게 해준다.
`\(변수나 표현식)` 형태로 사용한다.
즉, 정적 변수는 모든 인스턴스가 하나의 값을 공유해야 할 때 유용하다.
또 다른 예시로, 전체 사용자 수를 카운트해야 할 때를 들 수 있다.
class User {
static var userCount = 0 // 정적 변수
var name: String // 인스턴스 변수
init(name: String) {
self.name = name
User.userCount += 1
}
}
let user1 = User(name: "Alice")
let user2 = User(name: "Bob")
// 전체 사용자 수 출력
print(User.userCount) // 출력: 2
userCount는 정적 변수로 모든 User 인스턴스가 공유하며, name은 인스턴스 변수로 각 User 인스턴스마다 별도의 값을 가진다.
각 인스턴스가 생성될 때마다 init 메서드가 호출되며, 내부에서 userCount를 증가시킨다.
기능 | Swift | JavaScript |
클래스 선언 | class User { ... } | class User { ... } |
정적 변수 | static var userCount = 0 | static userCount = 0 |
인스턴스 변수 | var name: String | constructor(name) { this.name = name } |
초기화 메서드 | init(name: String) { ... } | constructor(name) { ... } |
인스턴스 참조 | self.name | this.name |
정적 변수 접근 | User.userCount | User.userCount |
Reference
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/guidedtour
https://velog.io/@dbqls200/Swift-Swift-%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8%EB%9E%80
https://www.youtube.com/watch?v=xKf6iNilRYI&list=PL5PR3UyfTWvfacnfUsvNcxIiKIgidNRoW&index=2
'앱개발 > Swift' 카테고리의 다른 글
[Swift] 함수 (1) | 2024.06.08 |
---|---|
Swift에서의 기본 데이터 타입 (0) | 2024.05.30 |