09. 기본(The Basic) - 부울(Booleans, Bool)과 튜플(Tuples)

이경은·2024년 1월 4일
0

요약

  1. 부울(Boolean, Bool)
    • Bool타입은 논리적 참/거짓을 판단할 수 있는 타입으로, truefalse를 제공합니다.
    • Bool타입은 논리적 참/거짓 판단을 통해 제어 흐름 구문에서 주로 사용됩니다.

  2. 튜플(Tuples)
    • 튜플은 타입과 관계없이 여러개의 값을 그룹화하여 단일 값으로 가지는 타입을 말합니다.
    • 함수의 반환 값으로 다양한 타입의 여러 값을 반환해야 할 때, 유용하게 사용됩니다.
    • 튜플은 간단한 형태의 데이터를 생성하는데 적합합니다. 보다 복잡한 데이터 구조에는 클래스와 구조체가 적합합니다.



부울(Boolean, Bool)

Swift는 Bool이라고 불리는 기본 부울(Boolean)타입을 가지고 있습니다. 부울 값은 오직 참 또는 거짓 값만 가지므로 논리적(logical)_으로 참조됩니다. Swift는 2개의 부울 상수 값인 truefalse를 제공합니다.

let orangesAreOrange = true
let turnipsAreDelicious = false

orangesAreOrangeturnipsAreDelicious의 타입은 부울 리터럴 값으로 초기화되어 Bool로 타입추정 되었습니다. 위의 IntDouble에서와 같이 상수 또는 변수를 초기화 시, true또는 false로 선언하면 상수 또는 변수를 Bool타입으로 선언할 필요가 없습니다. 타입 추론은 Swift 코드가 이미 알고 있는 타입의 다른 값으로 상수 또는 변수를 초기화 시에 더 간결하고 읽기 쉽습니다.

부울 값은 if구문과 같은 조건문으로 동작할 때 특히 유용합니다.

if turnipsAreDelicious {
	print("Mmm, tasty turnips!")
} else {
	print("Eww, turnips are horrible.")
}	// turnipsAreDelicious는 false이므로, else의 "Eww, turnips are horrible."을 출력합니다.

if 구문같은 조건문은 제어 흐름(Controll Flow)에서 자세히 알아보겠습니다.

Swift의 타입세이프티(Type-Safety)는 부울(Bool)값이 아닌 값이 Bool로 대체되는 것을 방지합니다. 아래 예제는 컴파일 시 에러가 발생됩니다.

let i = 1
if i {
	// 이 예제는 if구문에 Bool 타입의 값을 포함하고 있지 않기 때문에, 컴파일 되지 않으며 에러를 발생시킵니다.
}

위 구문은 아래와 같이 수정하여 정상 동작하게 할 수 있습니다.

let i = 1
if i == 1 {
	// if 구문에 Bool 타입의 값을 포함하도록 수정했으므로, 컴파일에 문제를 일으키지 않습니다.
}

i == 1 비교결과는 Bool 타입이므로 두번째 예제는 타입 검사를 정상적으로 수행할 수 있습니다. i == 1과 같은 비교는 기본 연산자(Basic Operators)에서 자세히 다룹니다.

Swift의 타입 세이프티에 대한 다른 예제처럼 이 방법은 실수로 인한 오류를 피하고 코드의 특정 섹션의 의도를 항상 명확하게 만들어줍니다.




튜플(Tuples)

튜플(Tuples)은 여러값을 단일 복합 값으로 그룹화합니다. 튜플 안의 값은 어떠한 타입도 포함될 수 있으며, 서로 같은 타입일 필요가 없습니다.

아래 예제에서 (404, "Not Found")는 HTTP 상태 코드 (HTTP status code) 를 나타내는 튜플입니다. HTTP 상태 코드는 웹 페이지를 요청할 때마다 웹 서버가 반환하는 특정 값입니다. 404 Not Found 상태 코드는 요청한 웹 페이지가 존재하지 않을 때 반환됩니다.

let http404Error = (404, "Not Found")
// http404Error는 (Int, String) 타입이며, (404, "Not Found")라는 값으로 할당되었습니다.

(404, "Not Found") 튜플은 HTTP 상태 코드에 2개의 개별 값인 '숫자'와 '사람이 읽을 수 있는 설명'을 제공하는 IntString 을 함께 그룹화하여 제공합니다. 이것은 "튜플의 타입은 (Int, String)" 이라고 설명할 수 있습니다.

모든 타입의 튜플을 만들 수 있으며, 원하는 만큼 다른 타입을 포함할 수 있습니다. 튜플의 타입 (Int, Int, Int) 또는 (String, Bool) 또는 실제로 필요한 다른 어떠한 것도 만들 수 있습니다.

튜플의 내용을 별도의 상수 또는 변수로 분해 (decompose) 하여 평소와 같이 접근할 수 있습니다.

let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")			// "The status code is 404"
print("The status message is \(statusMessage)")		// "The status message is Not Found"

/* 출력값 : 
"The status code is 404"
"The status message is Not Found"
*/

튜플의 값 중 일부만 필요한 경우 튜플을 분해할 때, 밑줄 (_)로 튜플의 일부를 무시할 수 있습니다.

let (justTheStatusCode, _) = http404Error
print("The Status code is \(justTheStatusCode)")
// 출력값 : The Status code is 404

또는 0에서 시작하는 인덱스를 사용하여 튜플의 개별 요소값에 접근할 수 있습니다.

print("The status code is \(http404Error.0)")		// "The status code is 404"
print("The status message is \(http404Error.1)")	// "The status message is Not Found"

/* 출력값 : 
"The status code is 404"
"The status message is Not Found"
*/

튜플을 정의할 때, 튜플의 요소(Element)에 이름을 정할 수 있으며

let http200Status = (statusCode: 200, description: "OK")

튜플 요소에 이름이 있다면 요소의 값에 요소 이름으로 접근이 가능합니다.

print("The status code is \(http200Status.statusCode)")				// "The status code is 200"
print("The status description is \(http200Status.description)")		// "The status description is OK"

/* 출력값 :
"The status code is 200"
"The status description is OK"
*/

튜플은 함수의 반환 값으로 특히 유용하게 사용됩니다. 웹페이지를 검색하는 함수는 페이지 검색의 성공 또는 실패를 설명하기 위해 (Int, String) 튜플 타입을 반환할 수 있습니다. 이 함수는 각각 다른 타입의 2가지 고유한 값으로 튜플을 반환함으로써 '단일 타입의 단일 값'만 반환할 수 있는 경우보다 유용합니다. 자세한 내용은 반환값이 여러개인 함수(Functions with Multiple Return Values)를 참조 바랍니다.

튜플은 관련된 값의 간단한 그룹에 유용합니다. 복잡한 데이터 구조를 생성하는데는 맞지 않습니다. 데이터 구조가 복잡한 경우 튜플이 아닌 클래스(Class)또는 구조체(Structure)를 사용하십시오. 자세한 내용은 구조체와 클래스(Structures and Classes)를 참조바랍니다.

0개의 댓글