print와 dump
print()
콘솔 로그를 남기는 용도의 함수
문자열 보간법 ()dump()
🔍 print 함수에 비해 자세한 정보를 출력해주는 함수.var someVar:String = "world" print("hello") // hello print("hello \(someVar)") // 문자열 보간법 \()
변수
var
키워드를 사용하여
var [변수명]:[데이터 타입] = [값]
의 형태로 선언한다.
🔍 변수의 경우 값을 선언하여도 값이 변할 수 있다.
상수
let
키워드를 사용하여
let [변수명]:[데이터 타입] = [값]
의 형태로 선언한다.
🔍 상수의 경우 값을 선언하면 값이 바뀌지 않는다.
🔍 상수를 사용하는 이유 중 가장 중요한 이유는 가독성이다.let satelliteOfEarth:String = "Moon" print(satelliteOfEarth) var year:Int = 2021 year = 2022 print("내년은 \(year)년도 입니다.") // "내년은 2022년도 입니다."
Int와 UInt
- Int :
Int
는 +,- 부호를 포함한 정수를 표현한다.- UInt :
UInt
는 - 부호를 포함하지 않는 양의 정수만을 표현한다.var someInt:Int = -123 var someUInt:UInt = 123
Bool
- Bool :
Bool
은 불리언 타입으로, 참(true) 또는 거짓(false) 만을 값으로 가지는 데이터 타입이다var someBool:Bool = false print("강아지는 식물인가요? : \(someBool)") // false
Float 와 Double
🔎 Float와 Double은 부동소수점을 사용하는 실수이며, 부동소수 타입이라고 한다.
흔히 우리가 알고 있는 소수점 자리가 있는 수를 뜻한다.
- Float : 32비트 환경에서 7자리 이하의 수까지만 표현이 가능하다
- Double : 64비트 환경에서 최소 15자리의 십진수를 표현할 수 있다.
🔑 둘 중 무엇을 사용해야 할 지 모른다면 Double의 사용을 권장한다.var someFloat:Float = 3.12345678 // 3.123456 var someDouble:Double = 1.12345678901234 // 1.12345678901234...
🔎 임의의 수 만들기
Int.random(in: 1...100) Double.random(in: 1.1...1.2)
Character
🔎
Character
은 말 그대로 '문자'를 의미한다.
문장이나 단어가 아닌 단 하나의 문자이다.var someCharacter:Character = "❤️" print(someCharacter) // ❤️
String
🔎
String
타입은 문자의 나열, 즉 문자열이다.
String
타입에는 기본적으로 많은 메서드들과 프로퍼티들이 구현되어 있으며, 문자열과 관련된 연산자도 많다let hello:String = "Hello" let world:String = "World" print("\(hello)" + " " + "\(world)") // '+' 와 문자열 보간법을 통해 출력 가능
var isSameString:Bool = false isSameString = hello == "Hello" print(isSameString) isSameString = hello == "hi" print(isSameString) // 연산자를 이용한 문자열 비교
Any와 nill
- Any : Any는 스위프트의 모든 데이터 타입을 사용할 수 있는 데이터 타입이다.
변수 또는 상수에 데이터 타입이 Any로 지정되어 있다면 그 변수 또는 상수에는 어떤 종류의 데이터 타입이든지 상관 없이 할당 할 수 있다.- nil : nil은 특정 타입이 아닌 '없음'을 나타내는 키워드이다. 즉, 변수 또는 상수에 값이 들어있지 않고 비어있음을 나타낸다.
var someAny:Any = 123 var someany:Any = "일이삼" var soMeany:Any = 1.23
튜플(Tuple)
🔍 튜플은 타입의 이름이 따로 지정되어 있지 않은, 프로그래머 마음대로 만드는 타입이다.
지정된 데이터의 묶음이라고 표현할 수 있다.
튜플은 이름이 따로 없으므로 일정 타입의 나열만으로 튜플 타입을 생성해줄 수 있다.
🔑typealias
- 사용할 때마다, 긴 튜플 타입을 모두 쓰게 되면 번거롭기 때문에 튜플에 별칭을 지정해줄 수 도 있다.var somePerson: (String, Int, Double) = ("dinx", 70, 175.1) print("name : \(somePerson.0) , weight : \(somePerson.1) , height : \(somePerson.2)" var someAdress:(도:String, 시:String, 구:String) = ("경기도", "OO시", "ㅁㅁ구") print("도는 \(someAdress.도)") // 각 데이터 타입에 이름을 붙혀줄 수 도 있다. typealias personTuple = (name:String , age:Int, height:Double) // personTuple 이라는 튜플 데이터 타입의 별칭을 지어 새로 생성했다. let 철수:personTuple = ("김철수", 5 , 140.2) let 맹구:personTuple = ("박맹구", 5 , 146.3) print(철수) // (name: "김철수", age: 5, height:140.2
Array
🔎 배열을 뜻하는
Array
타입은 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션 타입이다.
var 변수명 : Array<데이터 타입> = [값, 값, 값]
var 변수명 : [데이터 타입] = [값, 값, 값]
💡 배열은 항상 0번째 부터 시작함.
💡 배열에는 '순서'가 있다는 것을 꼭 기억해야함.var 한글 : [String] = ["가", "나", "다", "라"] var 영어 : [String] = ["A", "B", "C", "E"] print(한글[1]) print(영어[3]) // 인덱스를 활용해 값을 추출. [n] 번째에 있는 값 추출 한글.append("마") // append 메서드를 이용하여 마지막 순서에 값 추가 영어.insert("D", at: 3) // insert 메서드를 이용하여 at: n 번째 순서에 값 추가
Dictionary
🔎 딕셔너리는 요소들이 순서 없이 키와 값의 쌍으로 구성되는 타입이다.
딕셔너리에 저장되는 값은 항상 키와 값의 쌍을이루며, 딕셔너리 안에는 키가 하나이거나 여러 개일 수 있다.
var someDic: Dictionary<String(키),Int(값)> = Dictionary<String(키),Int(값)>()
var someDic:[String:Int] = [String:Int]()
var someDic: StringIntDictionary = StringIntDictionary()
typealias StingIntDictionary = [String:Int]
typealias 티어표 = [String:Int] var champ:티어표 = ["Olaf":1 , "Amumu":5 , "Xinziao":4] print(champ)
Set
🔎 세트는 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입이다.
세트는 보통 순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우에 사용한다.
var names: Set<String> = Set<String>()
var names: Set<String> = []
var animal: Set<String> = ["호랑이","치타","가젤","원숭이"] print(animal.count) // count 프로퍼티를 통해 세트 안에 값이 몇 개 있는지 확인 가능 print(animal.isEmpty) // isEmpty 프로퍼티를 통해 값이 비어있는지 아닌지 확인 가능
열거형(enum)
🔎열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입이다.
열거형은 제한된 선택지를 주고 싶을때,
정해진 값 외에는 입력받고 싶지 않을 때,
그리고 예상된 입력 값이 한정되어 있을 때 사용한다.enum leagueOFlegend : String { case midlane = "미드" // "미드" 라는 rawValue를 설정했다. case jungle = "정글" case top = "탑" case adCarry = "원딜" case supporter = "서폿" } = enum LOL { case mid, jg, top, adc, sup }
연산자
🔎 연산자는 그 종류가 매우 다양하지만 자주 쓰이는 연산자를 아래와 같이 정리한다.
- 할당 연산자
A = B
A에 B의 값을 할당한다. 데이터 타입이 같아야 한다.- 산술 연산자
A + B
A - B
A * B
A / B
A % B
대체로 수학에서 쓰이는 연산과 같은 기능을 한다.- 비교 연산자
A == B
: A와 B가 같은 값인지 비교하여 불리언 값을 반환
A >= B
: A가 B보다 크거나 같은 값인지 비교하여 불리언 값을 반환
A <= B
: A가 B보다 작거나 같은 값인지 비교하여 불리언 값을 반환
A > B
: A가 B보다 큰 지 비교하여 불리언 값을 반환
A < B
: A가 B보다 작은 지 비교하여 불리언 값을 반환
A != B
: A와 B가 서로 다른 값인지 비교하여 불리언 값을 반환
A === B
: A와 B가 참조 타입 일 때 A와 B가 같은 인스턴스를 가리키는지 비교하여 불리언 값을 반환
A와 B의 값을 비교하는 연산자이며, 불리언 값으로 반환한다는 특징이 있다.- 범위 연산자
A...B
: A부터 B까지의 수를 묶어 범위를 표현.A와 B를 포함
A..< B
: A부터 B 미만까지의 수를 묶어 범위를 표현.A를 포함하고 B는 포함되지 않음
A...
: A 이상의 수를 묶어 범위를 표현.A를 포함
...A
: A 이하의 수를 묶어 범위를 표현.A를 포함
..< A
: A 미만의 수를 묶어 범위를 표현.A를 포함하지 않음- 부울 연산자
NOT(부정) 부울 연산자 -!B
: B(불리언 값)의 참, 거짓을 반전한다.
AND 부울 연산자 -A&&B
: A와 B의 불리언 AND 논리 연산을 실행한다.
OR 부울 연산자-A||B
: A와 B의 불리언 OR 논리 연산을 실행한다.- 비트 연산자
비트 연산이란 2진법으로 표기된 숫자를 연산하는 것을 말한다.
OR 연산 -A|B
: A와 B의 OR 논리 연산을 실행한다.
AND 연산 -A & B
: A와 B의 AND 논리 연산을 실행한다.
XOR 연산 -A^B
: A와 B의 XOR 연산을 실행한다.
NOT 연산 -~A
: A의 비트를 반전한 결과를 반환한다.
비트 이동(쉬프트) 연산자 :A >> B
,A << B
: A의 비트를 B만큼 이동한다.
OR 연산은 두 개 중에 하나라도 결과가 참이면 참
AND 연산은 두 개 다 참인 경우에만 참.
NOT 연산은 값이 반대가 되는 것
XOR 연산은 같은 값을 가지면 거짓, 다른 값을 가지면 참
🔎 흐름제어에는 조건문과 반복문이 존재한다.
if else 조건문
if
는 대표적인 조건문으로if
,else
등의 키워드를 사용하여 구현.
swift의if
구문은 조건의 값이 반드시bool
타입이어야 함let someint = 100 if someint < 100 { print("100미만") // 만약 조건이 참이라면 아래 명령문을 실행 } else if someint > 100 { // 다른 조건이 참 이라면 아래 명령문을 실행 print("100초과") } else { // 위에 조건이 전부 거짓이라면 아래 명령문을 실행 print("100") }
switch 조건문
switch 조건문은 스위프트의 기본 문법이라고 할 수 있다.
타 언어에서의switch
구문과는 달리 자동으로break
가 걸려있다.
break
를 걸지 않으려면fallthrough
키워드를 사용한다.var value1 = 4 switch (value1) { case 4: print("4") fallthrough case 3: print("3") fallthrough case 2: print("2") fallthrough case 1: print("1") fallthrough default: print("none") }
for-in 반복문
for-in
반복 구문은 반복적인 데이터나 시퀀스를 다룰 때 가장 많이 사용한다.
for
문은 문자열 또는 튜플이 들어갔을 때 안에 있는 요소를 하나씩 반복한다.for i in 0...2 { print(i) } for i in 0...5 { if i.isMultiple(of: 2) { print(i) continue // continue 키워드를 사용하면 바로 다음 시퀀스로 건너뛴다. } print("\(i) == 홀수") } let helloSwift: String = "Hello, Swift!" for char in helloSwift { print(char) }
while 반복문
특정 조건(Bool 타입)이 성립하는 한 블록 내부의 코드를 반복해서 실행한다.
var names: [String] = ["joker", "jenny", "nove", "max"] while names.isEmpty == false { print("Good bye \(names.removeFirst())") // removeFirst() 는 요소를 삭제함과 동시에 삭제한 요소를 반환한다.
repeat-while 반복문
repeat
블록의 코드를 최초 1회 실행한 후,while
다음의 조건이 성립하면 블록 내부의 코드를 반복실행한다.var name:[String] = ["john", "chalse", "jessica", "menny"] repeat { print("Good bye \(name.removeFirst())") } while name.isEmpty == false
안녕하세요! 엄청 깔끔하게 정리를 잘하셨네요 :)
혹시 현재 공부하고 있는 강의나 책을 알려주실 수 있나요?