티스토리 뷰
변수와 상수
변수 (Variable) |
상수 (Constants) |
||
설명 | 변할 수 있는 데이터(자료)를 담을 수 있는 메모리 공간 | 변하지 않는 데이터(자료)를 담을 수 있는 메모리 공간 | |
선언 | var | let | |
특징 | 차이 | 값 변경이 가능(mutable) | 값 변경이 불가능(immutable) |
공통 | - 이름은 식별자로 한 영역에 유일한 하나의 이름만을 사용. - 이름 중간에 숫자가 들어가는 것은 괜찮지만 숫자가 첫글자로 시작하는 것은 안 됨. - Swift 는 관습적으로 Camel case (ex: swiftVar) 기법을 권장함. |
문자열 보간법(String Interpolation)
let nickName: String = "신규유저"
var year: Int = 2021
print(“안녕하세요, \(nickName)입니다. \(year)년에 입사했습니다.”)
- 문자열 내에 변수나 상수 값을 삽입하는 기술
- 문자열 내에 변수나 상수 값을 동적으로 삽입할 수 있어 코드 가독성과 유지보수성을 향상시킬 수 있음
- 각 언어마다 규칙이 다름. Swift에서는 \(변수명) 형태임.
데이터 타입(Data Type)
- Swift에서는 모든 데이터 타입의 시작에는 대문자를 사용함.
- 한정된 메모리 공간을 효율적으로 사용하기 위한 수단
- 프로그래밍에서 발생하는 오류를 방지
- 코드의 안정성을 올릴 수 있음
타입 | 설명 |
|||
숫자 | 정수 (Integer) |
Int | Int의 가장 큰 값은 9,223,372,036,854,775,807 임.(몰라도 되긴 함) |
|
실수 (Floating-point Number)
|
Float |
- 부동소수(floating-point) 타입
- 소수점 표현 가능 - 정수, 소수 모두 합쳐 6자리까지 정보를 정확하게 저장 - 6자리를 벗어나면 반올림 등의 가능성 있음
예) 3.14195 |
☑︎ CGFloat
Core Graphics 및 관련 프레임워크의 부동 소수점 스칼라 값에 대하 기본 유형 64bit CPU - 64bit 32bit CPU - 32bit ☑︎ 지수와 가수를 나누어 복잡한 알고리즘으로 저장함 |
|
Double | - Float의 두 배 공간을 가짐 - 소수점 표현 가능 - 정수, 소수 모두 합쳐 15자리까지 정보를 정확하게 저장 - 15자리를 벗어나면 반올림 등의 가능성 있음
예) 3.14159265358979 |
|||
문자 | 문자 | Character | 하나의 문자(단 1개의 글자) 유니코드 사용 예) "A", "a", "가", " "(공백문자) 등 |
☑︎ Character 타입은 String 타입에 넣을 수 없음 ☑︎ 문자/문자열은 쌍따옴표("")로 감싸줌 |
문자열 | String | 여러 개의 문자 예) "ABCD", "문자열입니다.", ""(빈 문자열) |
||
논리 자료형 | Bool | 참(true) 또는 거짓(false) | ||
Collection Type (자료형 타입) |
Array |
|
||
Set |
|
|||
Dictionary |
|
|||
열거형 (Enumerations) |
enum |
|
||
기타 |
UInt | 부호가 없는 정수(양수) 예) UInt16, Uint32 등 |
☑︎ Int 타입은 UInt 타입에 넣을 수 없음 | |
Tuple |
- var user = ("신규유저", "개발자", 2021)
- var getData = ( a(), b(), c()) - var userData = ( nick: "신규유저", job: "개발자", since: 2021) - 원하는 연관된 데이터의 조합으로 어떤 형태든 만들 수 있는 타입 - 변수를 선언과 동시 해당 멤버(데이터의 종류 및 갯수)가 결정되므로 추가/삭제 불가 - function 도 담길 수 있음. - tuple 내부에 접근방법 ✔︎ named tuple(각 데이터에 이름이 붙은 튜플)일 경우 변수명.데이터 이름으로 가능. user.nick ✔︎ 이 외에는 변수명.해당 데이터의 순서로 가능. 요소가 첫 번째일 경우 user.0 - 튜플의 각 요소를 상수/변수화 (바인딩) 가능함. var (nick, job, since) = ("신규유저", "개발자", 2021) print(nick) - 함수는 원칙적으로 리턴값이 한개만 존재하기 때문에 여러개의 값을 반환할 수 없지만, 어떤 묶음 값으로 반환하는 것은 가능 - C언어의 Struct(구조체)를 생각하면 이해하기 쉬움. |
변수와 타입
타입 주석 | - 변수나 상수의 타입을 명시적으로 작성 - 의도한 타입과 일치하지 않을 경우에도 오류를 빠르게 파악 가능 |
var nickName: String = "신규유저" |
타입 추론 | - 코드 작성 시 컴파일러가 변수나 상수의 타입을 추론하여 자동으로 할당하는 기능 - 타입을 직접 명시적으로 작성하지 않아도 됨 |
var nickName = "신규유저" |
타입 안정성 | - 변수나 상수의 타입이 컴파일 타임에 결정되어 런타임 오류를 방지 - 변수나 상수의 값이 해당 타입에 맞지 않을 경우 컴파일 시점에서 에러를 발생시켜 수정하게 함. - 데이터 타입을 명확하게 구분하여 코드를 더욱 안전하게 작성할 수 있음. |
var number: Int = 10 number = 3.14 number는 Int인데 3.14는 Double이므로 오류 |
타입 변환
type 변환 시 변환되지 않거나 데이터가 유실될 수 있음.
var str: String = "123"
var num = Int(str)
String "123" ▶︎ Int("123") ▶︎ Int 타입 123
var str: String = "안녕"
var num = Int(str)
String "안녕" ▶︎ Int("안녕") ▶︎ 값이 없으므로 nil
var pi: Double = 3.14
var num = Int(pi)
Double 3.14 ▶︎ Int(3.14) ▶︎ Int 3
타입 별칭(Type Alias)
기존 타입에 별칭을 붙일 수 있음.
typealias Name = String
String을 Name이라는 별칭으로 사용
Built-in Data Type 혹은 Custom Data Type에 별칭을 붙여 가독성을 높이고자 할 때 사용
연산자(Operator)
같은 타입 끼리 연산 및 저장 가능
피연산자 개수 | 단항 연산자 (Unary Operator) |
- 단일 대상의 바로 앞 또는 바로 뒤에 위치하는 연산자 - 공백 없이 붙여서 작성 |
+a, -a, !a, a |
이항 연산자 (Binary Operator) |
- 두개의 대상에서 가운데에 위치하는 연산자 - 양쪽에 공백 1칸씩 두는 것이 일반적임 - 공백이 없어도 되지만 한 쪽만 있거나 없으면 안 됨. |
a + b, a - b, a % b, a>=b | |
삼항 연산자 (Ternary Operator) |
- 모든 연산자 사이에 공백을 한 칸씩 추가함. | a ? b : c |
이항 연산자 (Binary Operator) |
할당 연산자 (Assignment)
|
변수에 값을 대입(할당)할 때 사용 | a = b, a = b + c | |
산술 연산자 (Arithmetic) |
+
|
더하기 연산자
|
a + b | |
-
|
빼기 연산자
|
a - b | ||
*
|
곱하기 연산자
|
a * b | ||
/
|
나누기 연산자 (몫)
|
a / b | ||
%
|
모듈로 연사자 (나머지)
|
a % b | ||
복합 할당 연산자 (Compound Assignment) |
기존 변수의 값을 가져와 다른 연산을 함 | a = b + c, a = b + 3 | ||
비교연산자 (Comparison) |
== | 같다 | a == b | |
!= | 같지 않다 | a != b | ||
> | 크다(초과) | a > b | ||
< | 작다(미만) | a < b | ||
>= | 크거나 같다(이상) | a >= b | ||
<= | 작거나 같다(이하) | a <= b | ||
논리연산자 (Logical) |
! | ~이 아닌 !true : 참이 아닌 !false : 거짓이 아닌 |
!a | |
&& | 그리고 (And) | a && b | ||
|| | 또는 (Or) | a || b |
연산자에는 우선순위가 존재함.
← 높음 낮음 → | |||||
* / % | + - | == != > < >= <= ~= | && || | 삼항연산자 | 할당 |
접근 연산자(access operator)
- 객체의 속성(property)이나 메소드(method)에 접근할 때 사용하는 연산자
- 점 연산자(.)와 슬래시(/) 연산자가 존재
- 점 연산자(.) : 객체의 속성이나 메소드에 접근할 때 사용
- 슬래시(/) 연산자 : 파일 경로를 나타낼 때 사용
- 예) a.count, Int.random(in: ... 10)
삼항 연산자(Ternary Conditional Operator)
- 삼항 연산자 == 조건 연산자 == 인라인 조건문 == 삼항 조건문
- a = b ? c : d
- ?(물음표) 기준 앞은 앞에 조건의 참/거짓 여부를 묻는 직관적인 표현
- 물음표 기준 뒤는 조건의 결과에 따라 실행할 실행문
- 조건이 참일 경우 :(콜론)의 앞문장, 거짓일 경우 :(콜론)의 뒷 문장을 실행함.
var nick = nickName == "신규유저" ? "맞습니다" : "아닙니다"
var result = points >= 60 ? points >= 90 ? "고득점 합격" : "합격" : "탈락"
변수 nick은 nickName이 신규유저와 같으면 맞습니다, 아니면 아닙니다를 갖게 됨.
변수 result는 points가 60점 이상이자 90점 이상이면 고득점 합격, 60점 이상이면 합격, 이 외는 탈락을 갖게 됨.
이 두가지를 조건문으로 풀어쓰면 아래와 같음.
var nick:String
if (nickName === "신규유저") {
nick = "맞습니다."
} else {
nick = "아닙니다."
}
var result:String
if (points >= 60) {
if(points >= 90) {
result = "고득점 합격"
} else {
result = "합격"
}
} else {
result = "불합격"
}
삼항 연산자 단독으로 쓰이기 보다 결과 값을 대입하는 데 주로 사용.
범위 연산자(...)
- 제한된 숫자의 범위를 표기하기 위한 연산자
- 자체가 특별한 타입을 의미
- 내림차순 형식으로 표기 불가능. (내림차순으로 변환은 가능)
- 실수 형식의 범위 가능. (사용하는 경우 드뭄)
- switch문에서 패턴 매칭에 사용/ 정수인 경우 for문과 함께 사용 / 배열의 서브스크립트 문법과 함께 사용 이런 특정한 경우에 사용됨.
Closed Range Operator (폐쇄 범위 연산자) | Half-Open Range Operator (반폐쇄 범위 연산자) |
1...10 : 1~10 1... : 1~ ...10 : ~10 (정수) |
1..<10 : 1~9 ..<10 : ~9 |
해당 값을 포함하면서 범위를 정의.
한 방향은 열리도 록 정의하는 것도 가능(One-Sided Ranges) |
(앞의 값은 포함) 뒤의 값을 포함하지 않고,
범위를 정의.
한 방향은 열리도록 정의하는 것도 가능 (One-Sided Ranges) |
ClosedRange<Int> PartialRangeFrom<Int> PartialRangeThrough<Int> |
Range<Int> PartialRangeUpTo<Int> |
One-Sided (단 방향 범위 연산자)로 표기 할때는 숫자와 붙여서 씀 (빈칸 허용 x)
패턴매칭 연산자(~=)
- 범위연산자와 함께 쓰임.
- ~= : 패턴매칭 연산자 → 오른쪽에 있는 표현식이 왼쪽의 범위에 포함되는 지에 따라 참과 거짓을 리턴한다.
var version = 15
1...5 ~= version // false
6...10 ~= version //false
11...15 ~= version //true
16...20 ~= version // false
✔︎ 위 내용은 앨런 Swift문법 마스터 스쿨(온라인 Bootcamp) 및 기타 자료를 바탕으로 정리한 것입니다.
반응형
LIST
'공부합시다 > Swift' 카테고리의 다른 글
[Swift] Storyboard 삭제 (0) | 2023.05.09 |
---|---|
[SwiftUI] 검색 필드(searchable modifier) (0) | 2023.04.27 |
[SwiftUI] image 위에 image 얹기(ZStack) (0) | 2022.12.03 |
[SwiftUI] imagePicker 사용기2 - 사진 추가 무한 스크롤 수정 및 사진 최대 개수 지정(maxSelectionCount) (0) | 2022.11.18 |
[SwiftUI] imagePicker 사용기 (1) | 2022.11.14 |
댓글