Swift에서 print 함수는 콘솔에 정보를 출력하는 데 사용됩니다.
print("출력할 내용")
let name = "ggg"
print("안녕하세요, \(name)님!") // 안녕하세요, ggg님!
문자열 보간(Interpolation): 문자열 안에 변수나 상수 값을 포함시키려면 ()를 사용하여 값을 삽입할 수 있습니다.
여러 항목 출력 : , 를 사용하여 여러 항목을 print 문에 전달할 수 있습니다.
let x = 5
let y = 10
print("x는 \(x), y는 \(y)입니다.") // x는 5, y는 10입니다.
줄 바꿈 없이 출력: print 함수는 기본적으로 출력 후 줄 바꿈을 추가합니다. 줄 바꿈 없이 출력하려면 terminator 매개변수를 사용할 수 있습니다.
print("이것은 줄 바꿈 없는 출력입니다. ", terminator: "")
print("이어지는 출력입니다.") // 이것은 줄 바꿈 없는 출력입니다. 이어지는 출력입니다.
디버깅: 코드 디버깅 시 print 문은 중요한 변수나 상태를 추적하는 데 도움이 됩니다.
dump 함수: 복잡한 데이터 구조를 디버깅할 때 dump 함수를 사용하여 객체의 자세한 정보를 출력할 수 있습니다.
let array = [1, 2, 3]
dump(array) //▿ 3 elements
- 0: 1
- 1: 2
- 2: 3
Int: 음수와 양수를 포함한 정수를 표현하는 자료형입니다. 예를 들어, 다음과 같이 Int형 변수를 선언하고 값을 할당할 수 있습니다.
let a = 10
let b = -20
print(a)
print(b) // 10
-20
UInt: 음수를 제외한 양수를 표현하는 자료형입니다. 예를 들어, 다음과 같이 UInt형 변수를 선언하고 값을 할당할 수 있습니다.
let c = 10
let d = 20
print(c) // 10
print(d) // 20
Float: 32비트 부동소수점 실수를 표현하는 자료형입니다. 예를 들어, 다음과 같이 Float형 변수를 선언하고 값을 할당할 수 있습니다.
let e = 3.14
let f = 0.01
print(e) // 3.14
print(f) // 0.01
Double: 64비트 부동소수점 실수를 표현하는 자료형입니다. 예를 들어, 다음과 같이 Double형 변수를 선언하고 값을 할당할 수 있습니다.
let g = 3.14
let h = 0.01
print(g) // 3.14
print(h) // 0.01
Character: 하나의 문자를 표현하는 자료형입니다. 예를 들어, 다음과 같이 Character형 변수를 선언하고 값을 할당할 수 있습니다.
let i = "A"
let j = "B"
print(i) // A
print(j) // B
String: 여러 개의 문자로 이루어진 문자열을 표현하는 자료형입니다. 예를 들어, 다음과 같이 String형 변수를 선언하고 값을 할당할 수 있습니다.
let k = "Hello, World!"
let l = "안녕하세요, 세상!"
print(k) // Hello, World!
print(l) // 안녕하세요, 세상!
Bool: true와 false 두 값을 표현하는 자료형입니다. 예를 들어, 다음과 같이 Bool형 변수를 선언하고 값을 할당할 수 있습니다.
let m = true
let n = false
print(m) // true
print(n) // false
Float보다 Doble을 사용하는게 좋습니다.
Swift에서 변수를 선언하는 방식은 크게 두 가지가 있습니다: var와 let. 이 두 키워드를 사용하여 변수와 상수를 선언할 수 있습니다. 변수와 상수의 주요 차이점은 값이 변경 가능한지 여부입니다.
var (Variable - 변수): 이 키워드를 사용하여 값을 변경할 수 있는 변수를 선언합니다. 변수를 선언한 후에는 다른 값을 할당할 수 있습니다.
var age = 25
age = 30
printf(age) // 30
let (Constant - 상수): 이 키워드를 사용하여 값을 변경할 수 없는 상수를 선언합니다. 한 번 값을 할당하면 이후에는 변경할 수 없습니다.
let name = "Alice"
name = "Bob" // 에러: 상수는 값을 변경할 수 없음
이러한 변수와 상수를 사용하여 프로그램에서 데이터를 저장하고 관리할 수 있습니다. 보통, 값이 변하지 않는 상황에는 let을 사용하고, 값이 변경될 수 있는 상황에는 var을 사용합니다.
추가로, 변수 선언 시 데이터 유형 (Data Type)을 명시하는 것도 가능합니다. Swift는 타입 추론 (Type Inference)을 지원하여 대부분의 경우에는 데이터 유형을 명시하지 않아도 됩니다. 다만, 데이터 유형을 명시하고 싶다면 다음과 같이 작성합니다:
var number: Int = 42
let pi: Double = 3.14159
이렇게 하면 변수나 상수의 데이터 유형을 직접 지정할 수 있습니다.
호이스팅(Hoisting) : 변수나 함수의 선언이 코드의 실행 이전에 미리 메모리에 할당되는 것을 의미
동적 타입(Dynamic Type) : 변수의 타입이 런타임(Runtime) 시에 결정되는 것을 의미한다
타입 추론(Type Inference) : 코드의 문맥을 파악하여 변수나 함수의 타입을 자동으로 추론하는 것
튜플 : 여러 개의 값을 하나로 묶어서 저장하는 자료형
튜플의 특징
1.값의 순서가 중요합니다. 튜플은 값의 순서가 중요하며, 값의 순서를 변경하면 다른 튜플이 됩니다.
2.값의 변경이 불가능합니다. 튜플은 값의 변경이 불가능하며, 값을 변경하려면 새로운 튜플을 만들어야 합니다.
3.값의 타입이 고정됩니다. 튜플은 값의 타입이 고정되며, 값의 타입을 변경하려면 새로운 튜플을 만들어야 합니다.
튜플은 다음과 같은 형태로 사용합니다.
let tup1 = (1, 2)
let tup2 = (3, 4)
print(tup1) // (1, 2)
print(tup2) // (3, 4)
튜플은 값의 순서와 타입이 중요합니다. 따라서, 튜플을 사용할 때는 값의 순서와 타입을 잘 고려해야 합니다.
예를 들어, 다음과 같은 코드에서는 튜플을 사용하여 두 개의 값을 저장하고, 이를 출력합니다.
let tup1 = (1, 2)
let tup2 = (3, 4)
print(tup1.0) // 1
print(tup1.1) // 2
print(tup2.0) // 3
print(tup2.1) // 4
위의 코드에서는 튜플의 값을 접근하기 위해 .0과 .1과 같은 인덱스를 사용합니다.
튜플의 값을 접근할 때는 이러한 인덱스를 사용해야 합니다.
튜플은 값의 순서와 타입이 중요하며, let으로 변수를 선언 시 값의 변경이 불가능합니다. 따라서, 튜플을 사용할 때는 값의 순서와 타입을 잘 고려하고, 값을 변경할 때는 새로운 튜플을 만들어야 합니다.
예를 들어, 다음과 같은 코드에서는 튜플을 사용하여 두 개의 값을 저장하고, 이를 변경할려는 코드이지만 아래와 같은 결과가 나옵니다..
let tup1 = (1, 2)
let tup2 = (3, 4)
tup1.0 = 5
tup1.1 = 6
tup2.0 = 7
tup2.1 = 8
print(tup1) // (5, 6)
print(tup2) // (7, 8)
swift /tmp/NFsmXOXq5s.swift
/tmp/NFsmXOXq5s.swift:4:6: error: cannot assign to property: 'tup1' is a 'let' constant
tup1.0 = 5
~~~~ ^
/tmp/NFsmXOXq5s.swift:1:1: note: change 'let' to 'var' to make it mutable
let tup1 = (1, 2)
^~~
var
/tmp/NFsmXOXq5s.swift:5:6: error: cannot assign to property: 'tup1' is a 'let' constant
tup1.1 = 6
~~~~ ^
/tmp/NFsmXOXq5s.swift:1:1: note: change 'let' to 'var' to make it mutable
let tup1 = (1, 2)
^~~
var
/tmp/NFsmXOXq5s.swift:6:6: error: cannot assign to property: 'tup2' is a 'let' constant
tup2.0 = 7
~~~~ ^
/tmp/NFsmXOXq5s.swift:2:1: note: change 'let' to 'var' to make it mutable
let tup2 = (3, 4)
^~~
var
/tmp/NFsmXOXq5s.swift:7:6: error: cannot assign to property: 'tup2' is a 'let' constant
tup2.1 = 8
~~~~ ^
/tmp/NFsmXOXq5s.swift:2:1: note: change 'let' to 'var' to make it mutable
let tup2 = (3, 4)^~~
var
var로 선언시 튜플의 값을 변경되는게 확인 가능합니다.
var tup1 = (1, 2)
var tup2 = (3, 4)
tup1.0 = 5
tup1.1 = 6
tup2.0 = 7
tup2.1 = 8
print(tup1) // (5, 6)
print(tup2) // (7, 8)
튜플의 자료형을 출력하는 방법은 Swift의 type(of:) 함수를 사용하여 구할 수 있습니다.
let myTuple = (10, 12.1, "Hi")
let (myInt, myFloat, myString) = myTuple
let tupleType = type(of: myTuple)
print("myInt: \(myInt)") // myInt: 10
print("myFloat: \(myFloat)") // myFloat: 12.1
print("myString: \(myString)") // myString: Hi
print("Tuple의 자료형: \(tupleType)") // Tuple의 자료형: (Int, Double, String)
튜플을 생성할 때 각 값에 이름을 할당할 수 있는데, 이것을 레이블링된 튜플(Labeled Tuple)이라고 합니다.
let myTuple = (count: 10, length: 12.1, message: "Hi")
let tupleType = type(of: myTuple)
print("myTuple의 자료형: \(tupleType)") // myTuple의 자료형: (count: Int, length: Double, message: String)
let countValue = myTuple.count // count에 접근
let lengthValue = myTuple.length // length에 접근
let messageValue = myTuple.message // message에 접근
print("count: \(countValue)") // count: 10
print("length: \(lengthValue)") // length: 12.1
print("message: \(messageValue)") // message: "Hi"
튜플 인스턴스의 특정 값을 출력하는 방법입니다.
let myTuple = (count: 10, length: 12.1, message: "Hi")
// message 레이블을 사용하여 값 출력
print(myTuple.message) // Hi
// 인덱스를 사용하여 값 출력
print(myTuple.2) // Hi
Void 튜플
함수의 부수효과: 어떤 함수가 값을 반환하지 않고, 대신에 부수효과(side effect)를 가지는 경우 Void 튜플을 반환합니다.
부수효과는 주로 함수 내에서 외부 상태를 변경하거나, 파일에 쓰기, 데이터베이스 업데이트, 콘솔 출력 등의 작업을 의미합니다. 이러한 함수는 호출 후에 어떤 값을 반환하지 않더라도, 부수효과를 실행할 수 있습니다.
예를 들어, 파일에 로그를 기록하는 함수는 다음과 같이 Void를 반환할 수 있습니다:
func writeLogToFile(message: String) -> Void {
// 파일에 로그를 기록하는 부수효과 수행
// 반환값이 없으므로 Void 튜플을 반환
}
함수 호출의 결과 확인: 때로는 함수를 호출했을 때 반환값을 무시하고, 단순히 함수의 부수효과를 확인하기 위해 Void 튜플을 사용합니다. 예를 들어, 다음과 같이 파일을 삭제하는 함수를 호출한 후 결과를 무시할 수 있습니다:
func deleteFile(filePath: String) -> Void {
// 파일을 삭제하는 부수효과 수행
}
deleteFile(filePath: "/path/to/file")
// 파일 삭제 함수 호출
// deleteFile 함수는 반환값이 없지만, 파일 삭제의 부수효과를 사용하기 위해 호출됩니다.
요약하면
Void 튜플은 주로 반환 값이 없는 함수나 메서드의 결과로 사용되며, 부수효과를 실행하거나 함수 호출의 결과를 확인하는 데 사용됩니다. 이를 통해 코드의 명확성을 유지하고 함수의 목적을 명시적으로 나타낼 수 있습니다.