iOS 앱 개발자 독학 D+6 [Swift_정리]

Dev-dinx·2021년 1월 11일
0
post-thumbnail

정리

  • 현재 6일차까지 공부한 내용들을 복습할 겸 해서 정리해보았습니다.
    D + 0 : 출력
    D + 1 : 변수와 상수
    D + 2 : 기본 데이터 타입
    D + 3 : 심화 데이터 타입
    D + 4 : 연산자
    D + 5 : 흐름제어

D+0 _ 출력

print와 dump

  • print()
    콘솔 로그를 남기는 용도의 함수
    문자열 보간법 ()
  • dump()
    🔍 print 함수에 비해 자세한 정보를 출력해주는 함수.
var someVar:String = "world"
print("hello") // hello
print("hello \(someVar)") // 문자열 보간법 \() 

D+1 _ 변수와 상수

변수

var 키워드를 사용하여

var [변수명]:[데이터 타입] = [값] 의 형태로 선언한다.

🔍 변수의 경우 값을 선언하여도 값이 변할 수 있다.

상수

let 키워드를 사용하여

let [변수명]:[데이터 타입] = [값] 의 형태로 선언한다.

🔍 상수의 경우 값을 선언하면 값이 바뀌지 않는다.
🔍 상수를 사용하는 이유 중 가장 중요한 이유는 가독성이다.

let satelliteOfEarth:String = "Moon"
    print(satelliteOfEarth)
var year:Int = 2021
year = 2022
    print("내년은 \(year)년도 입니다.") // "내년은 2022년도 입니다."

D+2~3 _ 데이터 타입

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
}

D+4 _ 연산자

연산자

🔎 연산자는 그 종류가 매우 다양하지만 자주 쓰이는 연산자를 아래와 같이 정리한다.

  • 할당 연산자
    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 연산은 같은 값을 가지면 거짓, 다른 값을 가지면 참

D+5_흐름제어

🔎 흐름제어에는 조건문과 반복문이 존재한다.

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

마무리

  • 오늘은 그 동안 배웠던 것들을 복습할 겸 해서 정리를 해보았습니다. 잘 기억이 나지 않았거나 이해가 안됐지만 그냥 넘어갔었던 부분들을 중점으로 다시 책을 정독하며 정리했더니 전에는 이해가 안갔었던 개념들도 이제는 이해가 가네요! :)

    아마 내일부터는 벨로그 포스팅이 조금 어려울 것 같습니다. 신학기 프로모션을 놓치고 맥북을 구매했어서 환불을 받고 다시 구매하려고 해서요..ㅠㅠ
    그래도 공부는 책과 유튜브로 하고 있겠습니다!

    오늘도 감사합니다 :)
profile
비전공자 iOS 개발자 준비중입니다 :)

1개의 댓글

comment-user-thumbnail
2021년 5월 5일

안녕하세요! 엄청 깔끔하게 정리를 잘하셨네요 :)
혹시 현재 공부하고 있는 강의나 책을 알려주실 수 있나요?

답글 달기