본문 바로가기
코딩 공부/Swift

[Swift] 기초문법

by JH-M 2022. 9. 4.

 

 

Swift 기본 타입

 

  • Int
  • Double
  • Boolean
  • String
  • Tuple
// Int
1

// Double
1.0

// Boolean
true
false

// String
"Swift Coding Tutorials"

// Tuple
(1, "튜플")

 

 

콘솔출력

print("출력하기")

 

 

상수와 변수

// 상수
let name = "코딩튜터"

// 변수
var count = 3

상수는 한번 값을 설정하면 변경할 수 없습니다. 변수는 이름처럼 여러번 설정해서 값 변경이 가능합니다.

 

 

연산자

1 + 1
1 - 1
1 * 2
1 / 3.0

위와 같이 사칙연산을 할 수 있습니다. 

 

 

 

다만 나눗셈할때 결과가 실수로 예상되는 연산에는 3.0 과 같이 Double 타입으로 연산을 해야 정확한 결과값을 얻을 수 있습니다.

 

 

비교

let num = 1

num == 1 // 같다
num != 2 // 같지 않다
num > 0 // 0 보다 크다
num < 2 // 2 보다 작다
num >= 0 // 0 보다 크거나 같다
num <= 2 // 2 보다 작거나 같다

 

 

Optional

프로그램의 안정성을 위해서 오류를 발생시키시는 대신에 nil 을 발생시키는 것을 옵셔널(Optional) 이라고 합니다. 일반 자료형 타입은 nil 을 반환할 수 없습니다. 옵셔널은 nil 또는 값을 가질 수 있습니다.

* nil 은 다른프로그래밍 언어에서 NULL 로 불립니다.

 

var value: Int
print( value ) // 에러발생 & 프로그램 중단!!!
print( "다음작업" )

값을 할당하지 않고 변수를 호출하면 에러가 발생하고 프로그램이 중단됩니다. 결과적으로 마지막에 "다음작업"은 출력되지 않습니다. 앞서 이야기한대로 프로그래밍에 안정성에 문제가 생길 수 있는 부분입니다.

 

var opt: Int?

옵셔널은 타입뒤에 ? 를 붙혀서 만들 수 있습니다.

 

print( opt ) // nil 출력
opt = 3
print( opt ) // Optinoal(3) 출력

값을 할당되지 않은상태에서 호출하면 nil 이 리턴되고 프로그램이 중단되지 않습니다. 다음으로 값을 할당하고 호출하면 Optional(값)과 같은 형태로 리턴됩니다.

 

opt = nil
print(opt ?? 1) // 1 출력
opt = 3
print(opt ?? 1) // 3 출력

?? 연산자를 이용하면 옵셔널을 벗겨내고 값을 리턴하게 됩니다. 2번 줄에 opt 값이 nil 이면 오른쪽 1 을 출력하고 4번 줄에 opt 값이 할당되어 있을때 Optional(3) 에서 옵셔널을 벗겨내고 값 3을 리턴합니다.

 

print( opt! )

! 를 사용해서 강제로 Optional 을 벗겨낼 수 있지만 값이 할당되지 않은 상태에서 사용하면 에러를 발생시킬 수 있으니 주의해야 합니다.

 

 

Boolean 연산

let check = true

!check // not
check && true // And 연산
check || true // Or 연산

 

 

문자열

// 타입 1
var str1 = "문자열"

// 타입 2
var str2 = """
	여러줄의 문자열을
	다루기 쉽습니다
"""

""" 쌍따옴표 3개로 \n \r 과 같은 개행문자 없이도 여러줄의 문자열을 생성할 수 있습니다. 

 

let name = "코딩튜터"
let str3 = "이름: \(name)" // 변수 삽입

\( ) 형식 안에 변수를 삽입해서 문자열을 생성할 수 있습니다.

 

var str = "123456789"
print( str.prefix(3) ) // 앞에서 3개, 123 출력
print( str.suffix(3) ) // 뒤에서 3개, 789 출력

let start = str.index(
	str.startIndex, 
	offsetBy: 3 // 앞에서 3개 건너뛰고
)
let end = str.index(
	str.endIndex, 
	offsetBy: -3 // 뒤에서 3번 까지
)
print( str[start...end] ) // 4567 출력

다른 프로그래밍 언어와 비교해서 문자열 자르기는 간단해 보이지 않습니다. 

 

 

배열

var names = ["Apple", "Banana"]

간단하게 대괄호 [ , ] 를 사용해서 배열을 생성할 수 있습니다.

 

name[1] // Banana

배열의 1번 에 위치한 값을 리턴합니다. 배열에서 인덱스는 0부터 시작이기 때문에 1번이 두번째 요소를 가리킵니다.

 

names.append("kiwi")
names.insert("mango", at: 0)

append 와 insert 를 사용해서 배열의 요소를 추가할 수 있습니다. append 는 배열의 마지막에 요소를 추가하고 insert 는 위치를 지정해서 배열에 추가할 수 있습니다.

 

names.removeFirst() // 배열의 처음 요소 제거
names.removeFirst(2) // 배열의 처음 요소 2개 제거

names.removeLast() // 배열의 마지막 요소 제거
names.removeLast(2) // 배열의 마지막 요소 2개 제거

names.remove(at: 2) // 배열의 2번 요소 제거

names.removeAll() // 배열의 모든 요소 제거

remove() 함수를 사용해서 배열의 요소를 제거할 수 있습니다.

 

names.contains("apple") // true 리턴

contains()  함수를 사용해서 배열에 요소가 포함되어 있는지 확인할 수 있습니다.

 

 

Set

var names = Set( ["apple", "banana"] )

names.insert("kiwi") // 추가
names.remove("banana") // 제거
names.contains("apple") // "apple" 이 포함되어 있는지 확인

Set 은 중복을 허용하지 않는 배열입니다. 배열과 유사한 방식으로 사용할 수 있습니다.

 

 

Dictionary

var dic = [
	"apple": 3,
	"banana": 2
]

Dictionary 는 키값을 갖는 배열입니다.

 

// 값 출력
print( dic["apple"] ) // 3

// 값 변경
dic["banana"] = 5

// 삭제
dic["kiwi"] = nil

 

 

조건문

조건문 - if

let condition = true
let condition2 = true

if condition { 
	...
}

if condition {
	...
} else if condition2 {
	...
} else {
	...
}

 

옵셔널 언래핑

var name: String? = "코딩튜터"

if let name = name {
	...
}

if 문 내부에서 name 은 Optional("코딩튜터") 가 아닌 "코딩튜터" 를 리턴하게 됩니다.

 

 

조건문 - for

let numbers = [1,2,3,4,5]

for value in numbers {
	...
}

for value in 0..<5 { // 0 부터 4 까지, 0, 1, 2, 3, 4
	...
}

for value in numbers[...2] { // 뒤에 2개 빼고, 1, 2, 3
	...
}


for value in numbers[2...] { // 앞에서 2개 빼고, 3, 4, 5
	...
}

 

위에서 numbers[...2] 처럼 배열을 간단히 자를 수 있습니다. 이전에 문자열 자르기에서 복잡한 코드로 문자열을 배열로 만들었는데 number[...2] 를 조금 응용하면 좀더 간단하게 자르기를 구현할 수 있습니다. 

 

// 문자열 -> 배열
var numbers = Array("12345") 

// 배열 자르기, Int 배열 -> String 배열, 배열 -> 문자열
var str = numbers[2...2].map({String($0)}).joined()

// 결과 출력
print( str ) // 3

중간에 map({  }) 함수는 클로저로 반복문을 대신한 함수식입니다. 

 

 

조건문 - while

var job = true
while job {
	...
	job = false
}

while 조건문을 반복하다기 작업을 마치고 싶을때 job = false 를 통해서 반복문을 빠져나오게 할 수 있습니다.

 

 

조건문 - switch

var value = 2
switch value {
case 1:
	print("1")
case 2:
	print("2")
default:
	break
}

 

Swift 에서 switch 는 기능이 다양합니다. Int 뿐만아니라 String, 튜플 까지 사용할 수 있고 값의 범위를 지정할 수도 있습니다. 

 

문자열 사용하기

var value = "a"
switch value {
case "a":
	print(value)
case "b", "c", "d": // 범위지정 타입 1
	print(value)
case "e"..."z": // 범위지정 타입 2
	print(value)
default:
	break
}

 

튜플 사용하기

let tuple = (0, 100)

switch tuple {
case (0, 100):
	print(tuple)
case (50, 50):    
	print(tuple)
case (_, 200): // 첫 요소값 상관없이 두번째 요소 값이 200 이면 해당
	print(tuple)
case let(x, y) where y > 300: // 범위지정
	print(tuple)
default:
	break
}

 

 

함수

// 함수 선언
func work() {
	...
}

// 함수 호출
work()

 

전달값이 있을때

// 함수 선언
func work(param: String) {
	...
}

// 함수 호출
work(param: "p")

 

리턴형 함수

// 함수 선언
func work() -> Bool {
    return true
}

// 함수 호출
let result: Bool = work()

 

전달값 + 리턴형

// 함수 선언
func work(param: String) -> Bool {
    return true
}

// 함수 호출
let result: Bool = work(param: "p")

 

 

전달값 네이밍 생략

// 함수 선언
func work(_ param: String) {
	...
}

// 함수 호출
work("p")

 

전달값 네이밍 변경

// 함수 선언
func work(name param: String) {
	print( param )
}

// 함수 호출
work(name: "p")

 

댓글