Swift 기본

Swift는 정적인 프로그래밍 언어입니다. 정적 프로그래밍 언어란, 컴파일 등 프로그래밍 언어가 실행되기 이전 단계에서 변수/상수의 타입을 결정하는 언어를 의미하며 동적 언어와 비교해 실행이 되기 전에 프로그램의 타당성이 검증되기 때문에 안정성이 높으며 대형 프로그램 개발에 적합하다는 특징을 가지고있습니다

Swift는 nil의 혀용을 제어가 가능합니다. nil이란 값이 존재하지 않는 것을 의미하는 것으로 변수나 상수가 초기화 되지 않은 상태나 참조가 존재하지 않는 상태를 의미합니다. Swift는 기본적으로 변수와 상수에 nil을 대입할 수 없으나 대신 Optional 타입을 가지며 이 타입을 통해 nil에 대한 허용을 제어할 수 있습니다

let a: Optional<Int>
let b: Int

a = nil
b = nil    // 'nil' cannot be assigned to type 'Int

Variable

  • 변수는 무엇일까?
    • 프로그램 데이터를 저장하는 공간
  • 변수는 어떻게 만들까?
    • var 키워드를 이용하여 선언
  • 좌측 변수에 ← 우측의 프로그램 데이터를 저장하는 형태를 가지고 있다
var sayHi = "Hello, Chen"
sayHi = "Hello, SOPT"

Swift 변수의 기본 유형

Bool 타입

참 거짓을 나타내는 true와 false가 Bool 리터럴입니다. true와 false를 대입할 때 Type annotation을 해주지 않으면 Bool 타입으로 입력이 됩니다.

let a = true
let b = false
let c = !a    // c의 값은 false가 됩니다

Numeric 타입

대표적인 타입으로는 Int가 있으며 그 외에도 다양한 수치 자료형이 존재한다. 수치를 나타내는 리터럴을 숫자 리터럴이라고 하며, 정수 리터럴과 부동소수점 리터럴로 나눌 수 있습니다. 정수 리터럴의 경우 Int외에도 Int8, Int16, Int32, Int64에 대입이 가능하며, 부동소수점의 리터럴의 경우는 Type annotation이 되지 않았다면 Double 타입으로 인식됩니다

let a: Int = 100 // 100
let b: Int64 = Int64(a) // 100

let x: Double = 1.4 // 1.4
let y: Float = Float(x) // 1.4

String 타입

Swift는 값을 큰따옴표(”)로 둘러 싸면 문자열 리터럴로 인식합니다. (값)을 이용하면 원하는 값을 문자열 리터널 내에 포함시킬 수 있습니다

let add = 3 + 7
let str: String = "결과는 \(add)입니다"

“a”와 같은 단일문자는 타입추론을 통해 String으로 인식되기 때문에 Character 타입을 원한다면 Type annotation을 해주어야 합니다

let str1 = "a"                // String.Type
let char1: Character = "a"    // Character.type

숫자 리터럴을 문자열 리터럴로 변환하기 위해서는 이니셜라이져를 사용하면 됩니다 만약 타입 변환에서 변화하는 타입으로 나타낼 수 없는 경우는 nil을 반환합니다

let a1 = 100
let a2 = String(a1)     // "100"

let b1 = "hello"
let b2 = Int(b1)        // nil

타입 어노테이션, 타입 추론

Swift에서 변수는 선언과 초기화를 동시에 할 수 있지만, 선언만 먼저 해 놓은 다음 필요한 시점에 초기화를 하는 것으로도 분리하여 작성할 수 있습니다.

var first = 1 // 선언과 초기화를 동시에

var second: Int // 선언과 초기화 분리
second = 2 // 초기화

1. 타입 어노테이션 ( Type annotation )

타입 어노테이션이란, 변수나 상수를 선언할 때 그 타입을 명시적으로 선언해 줌으로써 어떤 타입의 값이 저장될 것인지 컴파일러에게 직접알려주는 문법입니다.

  • 변수나 상수 뒤에 콜론( : )을 붙이고 저장될 값의 타입을 작성해주는 방법입니다
// 타입 어노테이션의 예시

var name: String
var Char: Character
var dis: Double
var pi: Float
var flag: Bool

2. 타입 추론

타입 추론이란 타입을 직접 명시하지 않아도 컴파일러가 초기화 된 값을 보고 타입을 추론하는 것을 말합니다

let name = "Cheon" // "Cheon"은 String 값 이겠구나 하고 타입을 추론하고 지정함
print(type(of: name)) // String

이 기능은 직접 타입을 명시하지 않아도 되고, swift 언어 특성 중 하나인 “설계에 의한 안전성” 항목에 타입 추론이 해당 됩니다.

타입 추론의 단점

  • 원하는 타입으로 추론되지 않는 경우
  • 초기값이 없는 경우 → 초기값이 없는 경우 컴파일러는 타입 추론을 할 때 초기 값을 보고 자료형을 유추하는데 초기 값이 없을 경우 문제 발생 !! ❗이 문제는 타입 어노테이션으로 해결할 수 있다

swift는 타입 안정성 언어이기 때문에 코드를 컴파일 할 때 확인 작업을 수행하고 잘못된 타입이 있다면 오류로서 표시합니다. 특히 이는 타입 추론을 통해 명확하게 타입을 지정해주지 않아도 타입을 지정해주기 때문에 이런 오류를 미연에 방지할 수 있습니다!

let pi = 3.141592 
let grade = "A" 

Swift에서 변수를 선언할 때 타입을 직접 명시하지 않으면 초기화가 된 값을 보고 타입을 추론하여 지정합니다. 하여 위 코드는 부동소수점의 리터럴인 pi는 Double 타입으로 추론되며 grade는 String 타입으로 추론됩니다.

만약 pi, grade의 타입을 float, Character으로 출력하고 싶다면 Type annotation을 통해 명시적으로 타입을 선언해주는 방법으로 표현할 수 있습니다

let pi: Float = 3.141592 
let grade: Character = "A" 

Swift의 연산자/조건문

arithmetic operator (산술 연산자)

  • 숫자 타입에 대해서는 + , - , * , / 연산 가능
  • 정수형 숫자 타입에 대해서는 나머지 (%) 연산도 가능
let first = 10 
let second = 3

let sum = first + second 
let diff = first - second

let multiple = first * second 
let divided = first / second 

let remainder = first % second

operator overloading

  • 연산자는 타입에 따라 연산을 가질수 있음
  • 구체적으로 + 의 경우, String , array 등 각 타입에 따라 연산됨
let str1 = "SOPT"
let str2 = "iOS"

let str = str1 + str2 // "SOPTiOS"

let names1 = ["Cheon", "SeongWoo"]
let names2 = ["Heo", "Jiyoung"]

let names = names1 + names2 // ["Cheon", "SeongWoo", "Heo", "Jiyoung"]

compound operator

  • 연산자를 좀 더 줄여서 쓸수가 있음
var price1 = 10
price1 += 1 // 11

var price2 = 20
price2 -= 5 // 15

var price3 = 30 
price3 *= 3 // 90

var price4 = 40
price4 /= 2 // 20

var quote = "Hello, Swift "
quote += "Playgrounds" // "Hello, Swift Playgrounds"

comparison operator

  • 비교 연산자( == != > >= … ) 를 이용해서 두 값을 비교 할수 있음
let score1 = 6
let score2 = 4

score1 == score2 // false
score1 != score2 // true

score1 > score2 // true 
score1 >= score2 // true 

score1 < score2 // false

IF문

  • if 를 이용해서 조건에 따라 다른 프로그램이 실행 될수록 할수 있음
let num1 = 3
let num2 = 5

let sum = num1 + num2

if sum > 10 {
	print("over 10")
} else {
	print("not over 10")
}

조건 IF

  • if 에 들어가는 조건들을 합칠수 있음 ( && , || 를 이용함)
let age1 = 15
let age2 = 25 

if age1 > 19 && age2 > 19 {
    print("19세 이상 영화를 같이 볼수 있겠네요")
}

if age1 > 20 || age2 > 20 {
    print("20세 이상 보호자가 있으면 놀이공원에 들어갈수 있어요")
}

ternary operator (삼항 연산자)

  • 변수 선언 + if ~ else 구문 2가지를 한 줄로 쓸 수 있는 간편한 방법이다
let age3 = 30 
let age4 = 40 

let text = age3 == age4 ? "same" : "not same"
  • 아래 코드를 삼항연산자를 통해서 표현해보세요!
var myMind: String?
var ifULoveMe: Bool?

//여기서부터
if ifULoveMe {
        myMind = "나도 너 좋아했어!!! 나랑 사귀자!!!"
} else {
        myMind = "나도 너 안 좋아했어! 흥칫뿡야야!!!"
}
//여기까지를 삼항연산자로 표현해주보세여~

→ 아래와 같이 한 줄로 표현할 수 있다!

myMind = ifULoveMe ? "나도 너 좋아했어!!! 나랑 사귀자!!!" : "나도 너 안 좋아했어! 흥칫뿡야야!!!"

Swift 반복문

for-in 반복문

  • swift 에서 어떤 코드를 반복해서 수행할수 있는 메커니즘이 있음 → 그게 바로 반복문
  • 그중에서 for 반복문을 사용해서 array, range 를 돌면서 코드를 반복 수행할수 있음
    • (여기서 range 는 수의 어떤 범위를 표현하는 타입임)
// Range
let numRange = 1...10 

for num in numRange {
	print("\(num)")
} // 1부터 10까지 반복하며 print 됨

// Array
let names = ["Cheon", "Heo", "Park"]

for name in names {
	print("name is \(name)")
} // name is Cheon부터 순서대로 print 됨

for-stride 반복문

  • for 반복문에서 값을 1씩 말고 원하는 만큼 증가시킬 때 사용할 수 있는 방법
  • 시작값, 끝값, 증가량을 지정하여 반복문을 싱행하는 방법
    • for-stride 반복문은 일정한 간격으로 값을 증가시키면서 반복을 실행하기 때문에, 특정 범위에서 일정한 규칙으로 값을 처리할 때 유용합니다.
for i in stride(from: 0, to: 9, by: 2) {
    print(i)
}
// 0, 2, 4, 6, 8을 출력하는 반복문

for-where 반복문

  • for-in 반복문과 함께 사용되는 조건절으로 배열, 딕셔너리, 집합 등 여러 컬렉션 타입에서 특정 조건을 만족하는 요소를 필터링 하는데 유용한 반복문이다
for i in 0...8 where i % 2 == 0 {
    print(i)
}

while 반복문

  • while 를 사용하면 특정 조건을 만족할때까지 코드를 반복 수행할수 있음
var num1 = 1 

while num1 <= 20 {
	print(num1)
	num1 += 1
} // num1이 20보다 작거나 같을 때 까지 1이 증가하며 출력 됨

print("조건을 더 이상 만족하지 않아서, 탈출")

// 추가 코드 0, 2, 4, 6, 8을 출력하는 반복문

var i = 0

while i <= 8 {
    print(i)
    i += 2
}

repeat 반복문

  • repeat 반복문을 이용하면 특정 조건을 만족할때까지 코드를 반복 수행할수 있음
    • while 반복문과 다른점
      • 코드를 수행하고 조건을 체크함 (while 은 조건을 먼저 체크하고 수행)
var num2 = 1 

repeat {
	print(num2)
	num2 += 1
} while num2 <= 20 

print("조건을 더 이상 만족하지 않아서, 탈출")

// 추가 코드 0, 2, 4, 6, 8을 출력하는 반복문

var i = 0

repeat {
    print(i)
    i += 2
} while i <= 8

무한 반복문

  • loop 를 돌다가 나가고 싶을때는 break 키워드를 이용해서 나갈수 있음
print("---> Exiting")

for i in 0...10 {
    if i == 4 {
        break
    }
    print(i)
}

var countDown1 = 10
while countDown1 > 0 {
    countDown1 -= 1
    if countDown1 == 3 {
        break
    }
    print(countDown1)
}
profile
응애 난 애기 개발자..

0개의 댓글