금일은 제공해준 iOS 강의를 보면서 기초적인 정보랑 문법을 배울수 있는 날이였다.
iOS에 대해서 아는것이 없으니 되게 중요한 첫 시작이였다고 생각이 들어서 집중해서 들었었다.
일단 배운기초적인것들을 정리를하자면
Swift는 Camel Case라는 방식으로 이름을 짓는다 먼저 낙타의 혹처럼 글씨의 공백대신 대문자가 들어간다. 그래서 내 velog 아이디를 기본으로 설명하자면 내 나이디는 tae ryu 7이지만 이걸 camelcase로 쓴다면 taeRyu7 이런식으로 사용한다.
var 변수명 : 변수의 데이터 타입 = "실제값"
var name: String = "Ryu"
- `let` (상수)
- 상수에 값을 넣으면 변경할 수 없다.
- 데이터 타입이 정해진 후 다른 타입의 값을 넣으면 오류가 발생한다.
- 이름은 소문자로 시작하는게 좋다.
let 상수이름: 상수의 데이터 타입 = "실제 값"
let name: String = "Ryu"
선언방법
1. 기본선언형
/*
// 기본 선언 방법
// var 변수명: 데이터의 타입(숫자, 문자 등등...)
// let 상수명: 데이터 타입(숫자, 문자 등등...)
// Int는 숫자 타입을 의미합니다.
// 한국어 번역 : age 이라는 이름의 변수의 타입은 Int다.
var age: Int
// String은 문자열 타입을 의미합니다.
// 한국어 번역 : name 이라는 이름의 상수의 타입은 String이다.
let name: String
// 위에서 만들어놓은 age, name같은 변수와 상수는 사용할 수 있다.
*/
// 기본 선언에서 값을 바로 할당할 수 있ek.
// 값을 할당하려면 = 을 사용하면 된다.
// = 오른쪽의 값을 왼쪽으로 넣는 역할을 한다.
// age 라는 이름의 변수의 타입은 Int이고 할당값은 20이다.
var age: Int = 20
// name 이라는 이름의 상수의 타입은 String이고 할당값은 "Ryu" 다.
let name: String = "Ryu"
// let은 상수이기 때문에 새로운 값을 다시 할당할 수 없다.
// Swift 컴파일러가 할당하는 값을 보고 데이터타입을 정해준다.
// age 라는 이름의 변수에 20을 할당한다.
var age = 27
age = 28 // 변수에는 새로운 값을 할당할 수 있다.
// name 이라는 이름의 상수에 "내배캠"을 할당한다.
let name = "Ryu"
name = " taeRyu" // Error 발생! let에는 새로운 값을 할당할 수 없다.
let name = "Ryu" // ✅ 상수의 이름이 name으로 소문자로 시작하고 있어요.
var age = 28 // ✅ 변수의 이름이 age로 소문자로 시작하고 있어요.
let myName = "Ryu" // ✅ 상수의 이름이 m으로 소문자로 시작하고 Camel Case가 적용되어 있어요.
let Name = "Ryu" // ❌ 상수의 이름이 N 대문자로 시작하고 있어요.
var Age = 28 // ❌ 변수의 이름이 A 대문자로 시작하고 있어요.
공통사항 : 다른 데이터 타입으로 바꿀수 없다
차이점
var(변수) = 가변형(안에 들어가는 값을 상황에 맞게 바꿀수 있다)
let(상수) = 불변형(안에 들어가는 값을 바꿀수 없다)
한줄주석 //
//이렇게 하면 인식을 못함
여러줄주석 /**/
/**
이렇게하면
인식을 못함
*/
만약 빠르게 주석하고 싶으면 Command + / 를 동시에 누르면 주석이 되거나 풀린다
-2,147,483,648
~ 2,147,483,647
사이의 정수를 사용할 수 있음let age: Int = 150
print(age) // 150
Float(실수)
- `3.1458`, `0.1`, `-273.15` 같은 실수를 표현하는 데이터 타입이다. - 소수점까지 표현할 수 있다. - 32비트의 메모리 공간을 차지하며, 소수점 이하 6자리까지 표현할 수 있다.let height: Float = 180.12345678
print(height) // 180.12346
Double(실수)
- `3.1458`, `0.1`, `-273.15` 같은 실수를 표현하는 데이터 타입이다.
- 소수점까지 표현할 수 있다.
- 64비트의 메모리 공간을 차지하며, 소수점 이하 15자리까지 표현할 수 있다.
```Swift
let weight = 80.01234567890123456789
print(weight) // 80.01234567890124
// " 쌍따옴표로 감싸서 문자열을 생성할 수 있다.
let hello = "안녕하세요! 수강생 여러분"
// 쌍따옴표를 3개 연속사용하면 여러줄의 문자열을 만들 수 있다.
let welcomeSwiftClass = """
안녕하세요! 수강생 여러분
Swift 강의에 오신걸 환영 합니다 :)
"""
// 빈 문자열을 만들 수 있다.
let emptyString2 = ""
let emptyString = String()
// 문자열 안에 변수나 상수의 값을 출력하고 싶다면 \()를 사용하세요!
let age = 20
print("저의 나이는 \(age) 입니다.") // 출력 : 저의 나이는 20 입니다.
Character(문자)
- 한 글자를 저장하는 데이터 타입이다. ```Swift let char: Character = "A" // Character(문자) 타입let character = "A" // String(문자열) 타입
// Swift 컴파일러가 String으로 유추하여 자동으로 String 타입으로 설정
// 문자열 배열을 String으로 만들 수 있다.
let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)
print(catString)
// Prints "Cat!🐱"
Boolean(참 또는 거짓)
Boolean
- Boolean 타입(Bool)은 참 또는 거짓을 나타낸다.
- 값은 오직 true 또는 false 두개로 참과 거짓을 결정하는데 사용한다.
- true 는 참이고 false는 거짓이다.
```Swift
let isOrangeColorGreen = false
let isAppleColorRed = true
let isArea: Bool = false
print(isArea) // false 출력
Tuple(여러 값의 묶음)
Tuple
// 이름을 정하지 않은 튜플
// () 안에 타입들을 모아서 사용한다.
// 선언 방법
let person: (String, Int) = ("Ryu", 28)
// 상수 person의 타입은 String, Int를 그룹화한 튜플이고, 값에는 ("Ryu", 28)을 할당한다.
// 접근 방법
person.0 // "Ryu" -> person 상수의 0번째 값 이다. (index는 0부터 시작한다)
person.1 // 28 -> person 상수의 1번째 값이다.
// 이름을 붙인 튜플
// 튜플을 선언할 때 값에 이름을 부여할 수 있다. 조금더 직관적이게 된다.
// 선언 방법
let person: (name: String, age: Int) = (name: "Ryu", age: 28)
// 해석 : 상수의 이름은 person이고 타입은 String, Int를 그룹화한 튜플이다.
// String에는 name이라는 이름을 붙였고 Int에는 age라는 이름을 붙였다.
// 값에는 name에 "Ryu"을 할당했고, age에는 28 할당했다.
// 접근 방법
person.name // "Ryu" -> person의 name의 값
person.age // 28 -> person의 age 값
: 컨벤션
타입을 정하는 : 앞에는 공백이 없고 뒤에는 공백이 있게 코드를 작성해야한다. ```Swift var age: Int let name: String // 처럼 : 앞에는 공백이 없고 뒤에만 공백이 있으면 좋다! ```대입 연산자
- 연산자는 값을 변수나 상수에 대입할 때 사용한다. - 연산자 기준으로 뒤에 값을 앞에 대입(할당) 한다. - 변수의 데이터 타입이 같다면 다른 값으로 재할당할 수 있다. ``` let age = 20 // 해석 : age 라는 상수에 20을 대입(할당)합니다. // 이렇게 하면 age에는 실제 값이 20이 들어가있습니다.var name = "내배캠" // 해석 : name이라는 변수에 "내배캠" 이라는 값을 대입(할당)합니다.
var address = "서울"
name = address // adress에 있는 값 서울을 name 변수에 할당합니다.
print(name) // name변수의 저장 값 "서울"이 출력됩니다.
산술 연산자
더하기
+ : 두 값을 더한다.
+= : 기존 값에 더한 후 할당한다.
var result = 10 + 20 // result 변수에 10 + 20의 값 30을 할당한다.
print(result) // 출력 : 30
result += 3 // result에 3을 더한 후 값을 할당한다.
print(result) // 출력 : 33
let value = 5
result += value // result에 value 값 더한 후 할당한다.
print(result) // 38
나누기
/ : 두 값을 나눈다.
var result = 30 / 7 // result 변수에 30 나누기 7의 값인 4를 할당한다.
print(result) // 출력 : 4
곱하기
* : 두 값을 곱한다.
*= : 기존 값에서 곱한 뒤 할당한다.
var result = 10 * 3 // result 변수에 10 * 3의 값 30을 할당한다.
print(result) // 출력 : 30
result *= 2 // result 값에 2를 곱한 값을 할당한다.
print(result) // 출력 : 60
나머지
% : 두 값을 나눈 후의 나머지를 반환한다.
var result = 10 % 3 // result 변수에 10/3의 나머지값 1을 할당한다.
print(result) // 출력 : 1
비교연산자
- == : 값이 같은지 확인
- a == b : a와 b가 같은지 확인
- 1 == 1 : 숫자 1과 숫자 1이 같은지 확인 → true
- != : 두 값이 다른지 확인
- a != b : a와 b가 같지 않은지 확인
- 1 != 1 : 숫자 1과 숫자 1이 같지 않은지 확인 → false
- > : 왼쪽의 값이 오른쪽 값보다 더 큰지 확인
- a > b : a가 b보다 큰지 확인
- 1 > 2 : 1이 2보다 큰지 확인 → false
- < : 왼쪽의 값이 오른쪽 값보다 더 작은지 확인
- a < b : a가 b보다 작은지 확인
- 1 < 2 : 1이 2보다 작은지 확인 → true
- >= : 왼쪽의 값이 크거나 같은지 확인
- a >= b : a가 b보다 크거나 같은지 확인
- 1 >= 1 : 1이 1보다 크거나 같은지 확인 → true
- <= : 왼쪽의 값이 작거나 같은지 확인
- a <= b : a가 b보다 작거나 같은지 확인
- 1 <= 1 : 1이 1보다 작거나 같은지 확인 → true
논리연산자(Bool 값을 조작하거나 결합할 때 사용)
NOT 연산자
! 키워드를 사용.
!true 처럼 느낌표가 앞에 온다.
Bool 값을 반대로 반환하는 연산자
true → false
false → true
var allowedEntry = false
print(allowedEntry) // false가 출력된다.
print(!allowedEntry) // false의 반대값인 true가 출력된다.
allowedEntry = !allowedEntry // allowedEntry 변수에 allowedEntry의 값 false 의 반대인 true를 대입한다.
print(allowedEntry) // true가 출력된다.
AND 연산자
두개의 값을 비교하여 두개의 값이 모두 true 일 때 true를 반환하는 연산자
한개가 true이고 한개가 false일 때는 false를 반환한다.
&& 키워드를 사용합니다.
true && true // true
true && false // false
false && false // false
let isHavingPan = false
let isHavingPineApple = true
let pineAppleApplePan = isHavingPan && isHavingPineApple
print(pineAppleApplePan)
// false isHavingPineApple이 false이기 때문에 전체값이 false가 된다.
OR 연산자
두개의 값을 비교하여 한개만 true일 때 true를 반환하는 연산자
한개가 true 이고 한개가 false일 때 true를 반환한다.
|| 키워드를 사용한다.
true || true // true
true || false // true
false || false // fase
let isGreenPan = false
let isYelloPan = true
let isHavingPan = isGreenPan || isYelloPan
print(isHavingPan) // true
// isGreenPan, isYellowPan 둘 중 하나가 true여서 true가 할당된다.
범위 연산자 (숫자나 값의 범위를 나타낼 때 사용하는 연산자)
닫힌 범위 연산자(Closed Range Operator)
a...b 와 같이 ... 를 사용한다.
시작값과 마지막값을 모두 포함하는 범위를 정의할 때 사용한다.
a...b a이상 b이하의 범위를 나타낸다.
(0...3) // 0,1,2,3 의 범위로 0이상 3이하의 범위를 포함한다.
(10...12) // 10, 11, 12 의 범위로 10이상 12이하의 범위를 포함한다.
반-열림 범위 연산자(Half-Open Range Operator)
a..<b 와 같이 ..< 를 사용한다.
시작값은 포함되어 있고 마지막 값은 포함되어 있지 않은 범위를 정의한다.
a..<b a이상 b미만의 범위를 나타낸다.
(0..<3) // 0,1,2 의 범위
(10..<15) // 10, 11, 12, 13, 14 의 범위를 포함한다.
단-방향 범위(One-Sided Ranges)
a... ...b 와 같이 한쪽에만 값을 넣어서 사용한다.
오로지 한쪽으로만 범위를 갖고 있다.
(10...) // 10, 11, 12, 13 ...
삼항연산자 (조건 ? 참일 때 반환값 : 거짓일 때 반환값 형태를 가진 연산자)
let age = 20
let isAdult = age > 20 ? "성인 입니다" : "미성년자 입니다"
// 위에 코드를 번역해보면
// age 상수에 20 값을 할당한다.
// isAdult 상수에 age가 20이면 "성인입니다"를 할당하고 아니면 "미성년자 입니다"를 할당한다.
연산자 코드 컨밴션
- `대입 연산자` , `산술 연산자`, `비교 연산자` 양옆으로 공백을 줘야한다.
- 논리연산자 `NOT`을 제외한 `AND`, `OR` 연산자에는 양옆으로 공백을 줘야한다.
- 범위 연산자는 공백을 안줘도 된다.
```Swift
if문
true
이면 코드 블록을 실행하고, false
이면 else
의 코드블록이 실행된다.if
와 else
중간에 조건을 추가하려면 else if
로 조건을 추가할 수 있다.
if 10 > 20 { // 만약 10 이 20보다 크다면 아래 코드블록을 실행합니다.
print("10은 20보다 큽니다!!!")
} else { // 만약 10이 20보다 크지 않다면 아래 코드블록을 실행합니다.
print("10은 20보다 작습니다!!!")
}
var age = 15
if age >= 20 {
print("20살이 넘은 성인입니다")
} else if age >= 17 {
print("20살 미만이고 17살 이상인 고등학생입니다.")
} else if age >= 14 {
print("17살 미만이고 14살 이상인 중학생입니다.")
} else {
print("어린이 입니다!")
}
/*
// 위의 코드 번역본
var age = 15 // age 상수에 15를 할당.
if age >= 20 { // 만약 age가 20 이상이면 아래 코드블록을 실행.
print("20살이 넘은 성인입니다")
} else if age >= 17 { // 만약 age가 20 미만이고 17 이상이면 아래 코드블록을 실행.
print("20살 미만이고 17살 이상인 고등학생입니다.")
} else if age >= 14 { // 만약 age가 17 미만이고 14 이상이면 아래 블록을 실행.
print("17살 미만이고 14살 이상인 중학생입니다.")
} else { // 위의 조건들이 모두 false이면 else의 code block을 실행.
print("어린이 입니다!")
}
*/
guard문
guard
는 조건이 false
일 때 코드를 더이상 실행시키지 않고 코드블록을 빠져나가는 조건문이다.true
일 경우 코드를 계속 진행하고, false
일 경우 else
코드 블록에서 탈출해야한다.guard 조건 else {
// 조건이 false 일 때 실행되는 코드블록
// return, break, continue, throw등 코드블록을 종료하는 구문이 필요
return
}
// 만약 위에서 조건이 false라면 아래 코드는 실행되지 않는다.
// ealry exit (빠른 탈출)이라고도 불린다.
// 조건이 true이면 아래의 코드를 게속 진행한다.
// 반복문에서 사용하는 guard
for i in 0...10 {
print(i)
guard i < 5 else { break }
}
/* 출력 값
0
1
2
3
4
5
*/
// 한국말로 풀어보기
for i in 0...10 { // 0부터 10까지 반복합니다. 현재값은 i에 넣는다.
print(i)
guard i < 5 else { break } // i가 5보다 작다면 true이기 때문에 계속 진행.
// i가 5보다 크다면 false이기 때문에 else 코드블록을 실행.
// else 코드블록에서는 for 반복문을 탈출하는 break
}
if문 vs guard문
if
조건문은 true
일 때 코드블록을 실행하고, false 일 때 다른처리를 할 수 있다.guard
조건문은 false일 때 즉시 탈출하는 방식.if
조건문은 코드블록을 명시적으로 작성해야 하지만 guard
는 true
일 때 코드블록이 없고 계속 진행.guard는 아래의 더이상 코드를 진행하지 못하게 하는 경비원 같은 존재
if 는 코드블록에 들어갈 수 있는 티켓
switch문
case
, default
를 사용해서 조건들에 맞는 코드를 실행할 수 있다.case
에서 조건을 확인하여 조건이 맞다면 코드를 실행하고 switch 코드블록에서 빠져나다.case
에서 맞는 조건이 없다면 default
에서 구현한 코드가 실행다.case
, default
조건 뒤에는 :
을 사용하여 동작을 구현해야 한다.case
에서 실행하고 싶은 코드가 없다면 break
키워드를 사용해야 한다.case
에서 조건이 없다면 default
코드를 실행한다.case
에서 조건이 맞아서 실행된 후 아래의 조건도 확인하고 싶다면 fallthrough
키워드를 사용해야한다.let score = 80
switch score {
case 90...100:
print("A 등급 입니다!")
case 80..<90:
print("B 등급 입니다.")
case 70..<80:
print("C 등급 입니다.")
default:
print("D 등급 입니다.")
}
// 번역
let score = 80 // score 이름의 상수에 80을 할당한다.
switch score { // score를 switch 코드블록에 넣는다.
case 90...100: // score가 90이상 100점 이하일 때 아래 코드를 실행한다.
print("A 등급 입니다!")
case 80..<90: // score가 80이상 90미만일 때 아래 코드를 실행한다.
print("B 등급 입니다.")
case 70..<80: // score가 70이상 80미만일 때 아래 코드를 실행한다.
print("C 등급 입니다.")
default: // score가 위에 조건문에서 true가 하나도 없었다면 아래 코드를 실행한다.
print("D 등급 입니다.")
}
반복문은 배열이나 Dictionary 같은 Collection Type이나 범위를 반복적으로 접근할 때 사용한다.
배열은 동일한 데이터 타입의 값을 순서대로 저장하는 Collection Type중 하나다.
대괄호를 사용하여 배열을 만들 수 있다.
let array = [1, 2, 3, 4, 5]
// [ ] 안에 데이터들을 넣으면 1,2,3,4,5가 들어가 있는 배열이 만들어진다.
["봄", "여름", "가을", "겨울"] // 봄, 여름, 가을, 겨울이 저장되어 있는 배열이다
for 반복문
for in 을 사용하면 배열(Collection Type)과 범위의 숫자를 반복할 수 있다.
// 컬렉션 타입에 대한 for in 반복문
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
print(name)
}
// 출력 값
// Anna
// Alex
// Brian
// Jack
// 해석
let names = ["Anna", "Alex", "Brian", "Jack"] // names 상수에 배열로 순서대로 "Anna", "Alex", "Brian", "Jack"을 넣습니다.
for name in names { // names 배열 안에 있는 값들을 반복하여 아래 코드블록을 실행합니다. name에 배열의 데이터를 넣는다.
print(name)
}
// 숫자의 범위를 사용한 for in 반복문
for index in 0...5 {
print(index)
}
// 출력 값
// 0
// 1
// 2
// 3
// 4
// 5
// 한국어 번역
for index in 0...5 {
// 0이상 5까지 숫자를 index에 할당하며 반복 한다.
print(index)
}
while 반복문
// while 뒤에 조건을 입력하여 사용합니다. 조건이 true이면 코드블록을 실행하고 false이면 코드블록이 실행되지 않고 다음으로 넘어간다.
while 조건 {
// 반복 실행할 코드
}
반복문에서 흐름제어를 도와주는 break / continue
break 문
// for 반복문에서 더이상 반복이 필요없는 경우
for age in 15...99 {
print(age)
if age >= 20 {
break
}
}
/*
출력값 :
15
16
17
18
19
20
*/
// 한국말로 풀어보기
for age in 15...99 {
// 15이상 99까지 반복하여 코드블록을 실행한다. 현재 숫자는 age에 넣는다.
print(age)
if age >= 20 { // age가 20이상이면 코드블록을 실행한다.
break // 반복문을 종료한다.
}
}
// while 반복문에서 더이상 반복이 필요없는 경우
var age = 15
while age < 100 {
print(age)
if age >= 20 {
break
}
age += 1
}
/*
출력값 :
15
16
17
18
19
20
*/
// 한국말로 풀어보기
var age = 15 // age라는 이름의 변수에 값 15를 할당한다.
while age < 100 { // age가 100 미만일 때 반복적으로 코드블록을 호출한다.
print(age)
if age >= 20 { // 만약 age가 20보다 크거나 같을 때 아래 코드블록을 실행한다.
break // 반복문을 종료한다.
}
age += 1 // age에 1을 더한 값을 할당한다.
}
continue 문
반복문 안에서 현재 반복을 건너뛰고 다음 반복으로 넘어갈 때 사용
// for in 에서 continue를 사용하여 반복문을 건너뛰는 방법
for number in 1...5 {
if number % 2 == 0 {
continue
}
print(number)
}
/*
출력 값
1
3
5
*/
// 한국말로 풀어보기
for number in 1...5 { // 1이상 5이하까지 반복합니다. 현재 숫자는 number에 넣는다.
if number % 2 == 0 { // number 에서 2를 나눴을 때 나머지가 0이면 아래의 코드블록을 실행한다.
continue // 다음 반복문으로 바로 이동합니다. 아래의 코드는 실행하지 않는다.
}
print(number)
}
// while에서 continue를 사용하여 반복문을 건너뛰는 방법
var number = 0
while number < 5 {
number += 1
if number % 2 == 1 {
continue
}
print(number)
}
/*
출력 값
2
4
*/
// 한국말로 풀어보기
var number = 0 // 변수 number에 0 값을 할당합니다.
while number < 5 { // number가 5 미만일 때 반복합니다.
number += 1 // number에 1을 더한값을 할당합니다.
if number % 2 == 1 { // number에 2를 나눈 나머지 값이 1일 때 코드블록을 실행합니다.
continue
}
print(number)
}