평범한 컴공 대학생의 공부일지

iOS Swift 자료형, 상수(let), 변수(var), 튜플(Tuple) 본문

iOS Swift

iOS Swift 자료형, 상수(let), 변수(var), 튜플(Tuple)

Taram 2023. 9. 11. 16:55

※이 iOS 카테고리의 글 들은 학교 강의와 과제를 기반으로 작성한 것입니다.※
※Window환경에서 작업하기 때문에 Online Compiler를 사용하는 점 참고 부탁드립니다.※


이번 글에서는 Swift의 자료형, 상수, 변수, 튜플에 대해서 알아보겠습니다.

  • 자료형
    1. 값(숫자, 문자)을 저장하기 위한 변수를 선언하기 위해 타입을 지정해 줍니다.
       Ex) var myNumber  = 10;
       ★ 위 예시와 같이 초깃값이 존재할 경우 Compiler가 타입 추론(type inference)을 하기 때문에
            자료형을 명시할 필요가 없습니다. 
            즉, 초깃값을 설정하지 않은 경우에만 자료형을 명시해 줍니다.

    2. 종류
      - Int
        1) 정수(양수, 음수, 0)를 저장하는 데 사용하는 정수형 데이터 타입(자료형)
        2) 8, 16, 32, 64bit 지원
        3) 특정 크기의 데이터 타입보다 Int 자료형을 권장합니다.
        4) 플랫폼(하드웨어, 소프트웨어 플랫폼(Window 64bit))에 따라 크기가 달라집니다.
            ★C언어는 Int형이 4바이트지만 Swift에서는 8바이트입니다.

                아래 코드는 Int형의 크기를 알아보는 코드입니다.
var x = 10 // 가변 변수 X 선언
print(type(of:x)) // X의 타입 출력, type(of:) 함수 = 변수나 상수의 타입 확인
let s = MemoryLayout.size(ofValue: x) // X의 메모리 크기 계산 -> 불변 변수 S에 할당
                                      // Int 타입은 8바이트이므로 S의 값은 8
let t = MemoryLayout<Int>.size // 특정 자료형(Int)가 차지하는 공간 크기 계산 -> 값은 8
print(s, t, 77, 84.9) // X의 메모리 크기, Int의 공간 크기, 77, 84.9 출력

             추가적으로 Int형이 32비트, 64비트에 따라 다룰 수 있는 숫자의 크기가 어떻게 달라지는지 확인해 볼게요.
             아래 코드는 32비트, 64비트에 따라 다룰 수 있는 숫자의 크기를 출력해 줍니다.

var x : Int = 10
print(x) // 10
print("x") // x
print("\(x)") //10(2번째 줄의 코드와 같은 결과지만 문자열이 있어 문자열 형태로 출력됨)
print("값은 \(x)입니다.") // "" 안에서 \(변수)는 연결 연산자(+)와 같은 기능
                         // 값은 10입니다.
print("Int32 Min = \(Int32.min) Int32 Max = \(Int32.max)") //32비트의 크기
// -2^31 ~ 2~31-1 출력
print("Int64 Min = \(Int64.min) Int64 Max = \(Int64.max)") //64비트의 크기
// -2^63 ~ 2^63-1 출력

Int형 bit에 따른 크기 변화


             Int를 알아봤으니 선언하고 사용하는 방법을 알아봐야겠죠?
             아래 코드는 Int형을 선언하고 사용하는 코드입니다.

//var x = 77; 이 코드도 print(X)와 같이 실행하면 정상적으로 실행 된다.
//var x : Int = 77; 
var x : Int
x = 10 // '=' 대입연산자를 사용하는 경우 양쪽에 공백을 똑같이 넣어줘야한다.
print(x) // 77 출력

Int형 코드 실행 결과
공백을 넣지 않았을 때 오류 코드


      - Double
         1) 소수점이 있는 숫자, 8바이트의 크기
         2) Float(32bit, 소수점 6자리)과 Double(64bit, 소수점 15자리, 기본) 타입의 자료형을 제공합니다.
         3) var myWeight : Double = 72.5; 또는 var myWeight : Double 또는 var myWeight = 72.5;

var x : Double = 1.234567890123456888889 // 15자리까지만 표현 그 이후는 이상한 값
var y : Float = 1.234587890123456789 // 6자리까지만 표현 그 이후는 이상한 값
print(x) // 1.23456789012345까지 출력 이후 쓰레기 값
print(y) // 1.234567까지 출력 이후 쓰레기 값

15자리, 6자리 이후로 다른 값이 들어가있는 모습


      - Bool
       1) True(참, 1) or False(거짓, 0)을 처리
       2) var A : Bool = true 또는
           var A : Bool 또는 var A = false;

      - Character
       1) 유니코드(문자, 숫자, 부호, 심볼) 문자 하나를 저장
       2) 다른 자료형처럼 자료형을 생략할 수 없습니다.
           생략하면 String으로 인식하기 때문에 Character를 사용하기 위해선 자료형을 명시해줘야 합니다.
       3) 사용 방식은 var 변수명 : Character = "초깃값" 이렇게 사용됩니다.
           꼭 ' '가 아닌 " "를 사용해줘야 합니다.
       4) 유니코드를 사용할 때는 "\u(유니코드)"를 사용합니다.  -> 이스케이프 시퀀스
       아래 코드는 Character를 설명하는 간단한 예제 코드입니다.

// 'Character' 변수를 선언하고 초기화합니다.
var letter: Character = "a"

// 'letter'의 값을 출력합니다.
print(letter) // 출력: a

// 'letter'에 다른 문자를 할당합니다.
letter = "b"

// 'letter'의 새로운 값을 출력합니다.
print(letter) // 출력: b

// 이 코드는 Swift에서 단일 문자를 다루는 방법을 보여줍니다. 
// 'Character' 타입은 한 개의 문자만 저장할 수 있으며, 
// 이것은 문자열(String)과 구별되는 점입니다.


      - String
        1) 단어나 문장을 구성하는 일련의 문자
        2) 문자열 보간(String Interpolation) 사용 -> 문자열, 변수, 상수, 표현식, 함수 호출 조합 가능

var userName : String = "Taram" 
// : String 생략 가능 -> var userName = "Taram"
var age = 22
var message = "\(userName)의 나이는 \(age)입니다." // \(변수)를 사용하여 문자열 안에 변수를 연결하여 출력가능
print(message) //Taram의 나이는 22입니다. 출력

출력 화면

  • Var(변수, 가변 변수)
    - 자바스크립트에서도 다뤘듯이 Swift에서도 Var을 사용합니다. 
    - 정의 : 프로그램에서 사용될 데이터를 저장하기 위한 메모리 공간
    - 가변 변수기 때문에 할당된 값을 변경할 수 있습니다.

var myVariable = 30 // :Int
print(myVariable)
// 값 30 출력
myVariable = myVariable + 6
print(myVariable)
// 가변 변수이기 때문에 값을 바꿀 수 있어 6을 더한 값인 36 출력

가변 변수를 활용한 값 변경

 

  • let(상수, 불변 변수)
    - 한 번 할당되면 이후에 변경 불가능
    - 코드 내에서 반복적으로 사용되는 값이 있을 경우에 유용합니다.
    - 유니코드를 사용하여 변수명에 특수기호나 이모티콘을 사용 가능하지만 가독성 때문에 추천하지 않습니다.
    ★ 애플은 코드의 효율성과 실행 성능을 높이기 위해서 var 보다는 let을 사용하라고 권장하고 있습니다.

    아래 코드는 불변 변수라 값을 변경할 수 없다는 것을 확인할 수 있는 코드입니다.
let myVariable = 30 // :Int
print(myVariable) //30

myVariable = myVariable + 6
print(myVariable) //36

let은 불변 변수이기 때문에 값을 변경할 수 없다는 오류 메시지 출력

  • Tuple(튜플)
    - 여러 값을 하나의 개체에 일시적으로 묶는 방법
    - array(배열)과 비슷하나 [ ]가 아닌 ( )을 사용합니다.
      그리고 값들이 동일한 타입일 필요가 없으며 어떠한 타입도 될 수 있습니다.
    - 선언 및 사용 방법
       -> 선언 : let myTuple = (22, 77.7, "Taram")
       -> 사용 : var myString = myTuple.0(Tuple이름. 인덱스 번호)
       -> 출력 시 인덱스 0번에 해당하는 22의 값이 출력됩니다. 
    - Void는 빈 Tuple을 의미합니다.
       
  • Tuple 간단 과제
    1. myTuple의 자료형 확인하기
let myTuple = (22, 77.7, "Taram") //튜플에 Int, Double, String형 자료 저장
print(type(of:myTuple)) //튜플 값들의 자료형을 출력
					    //(Int, Double, String) 출력
let (myInt, myFloat, myString) = myTuple //튜플의 값들을 불변 변수로 각 순서대로 변수에 저장

Tuple에 저장된 값들의 자료형이 출력

      2. Tuple을 생성하고 각 값에 이름 할당(분리)

let myTuple = (22, 77.7, "Taram") //튜플에 Int, Double, String형 자료 저장
print(type(of:myTuple)) //튜플 값들의 자료형을 출력
						//(Int, Double, String) 출력
let (myInt, myFloat, myString) = myTuple //튜플의 값들을 불변 변수로 각 순서대로 변수에 저장(이름 할당)
print(myInt, myFloat, myString) // 할당된 이름으로 Tuple에 저장된 값들을 
                                // 22, 77.7, Taram 출력

Tuple에 저장된 값들을 가져와 출력

     3. Tuple 인스턴스의 message 등 값들을 출력하는 코드

let myTuple = (age: 22, weight: 77.7, message: "Taram hi")
print(type(of:myTuple))
// (age: Int, weight: Double, message: String) 출력
print(myTuple.0, myTuple.age, myTuple.message)
// 인덱스 0번에 해당하는 값, age에 해당하는 값, message에 해당하는 값 순서대로 출력
// 22 22 Taram hi 출력

출력 화면

 

  • 강의 중간 과제
    1. print 함수 예를 들어 설명하기
// 문자열을 출력합니다.
print("Hello, World!") // "Hello, World!"를 콘솔에 출력합니다.

// 변수나 상수의 값을 출력합니다.
var myName = "John"
print(myName) // "John"이라는 문자열을 콘솔에 출력합니다.

// 여러 개의 값(문자열, 숫자 등)을 쉼표로 구분하여 한 줄에 출력할 수 있습니다.
let apples = 3
let oranges = 5
print("I have", apples, "apples and", oranges, "oranges.") 
// "I have 3 apples and 5 oranges."라는 문자열을 콘솔에 출력합니다.

// 조건문의 결과를 출력할 수도 있습니다.
let isTrue = true
print("The statement is", isTrue) 
// "The statement is true"라는 문자열을 콘솔에 출력합니다.

// 배열이나 딕셔너리 등의 컬렉션 타입을 통째로 출력할 수 있습니다.
let array = [1, 2, 3]
print(array) // "[1, 2, 3]"라는 배열 내용을 콘솔에 출력합니다.

let dictionary = ["apple": "red", "banana": "yellow"]
print(dictionary)
//"["apple": "red", banana: yellow]"와 같은 형태로 딕셔너리 내용이 랜덤한 순서로 콘솔에 출력됩니다.

      2. Default 인자의 정의와 사용하는 언어의 종류(wrtn.ai 사용)
          Default 정의 : 특별한 값을 지정하지 않았을 때 사용되는 기본 값

func sayHello(to name: String = "friend") {
// name 파라미터는 Default로 friend 값을 가집니다.
    print("Hello, \(name)!")
}
// sayHello()로 호출하면 Hello, friend! 출력
// sayHello(to:"Taram")로 호출하면 Hello, Taram!이 출력

sayHello() 호출 후 출력
sayHello(to:"Taram") 호출 후 출력


          1) python(함수 정의 시 사용) 

def greet(name="World"):
    print(f"Hello, {name}!")

          2) Swift(함수 정의 시 사용)

func greet(name: String = "World") {
    print("Hello, \(name)!")
}

          3) Kotlin(함수 정의 시 사용)

fun greet(name: String = "World") {
    println("Hello, $name!")
}

          4) C++(함수 선언 시 사용)

void greet(std::string name = "World") {
    std::cout << "Hello, " << name << "!\n";
}

          5) JavaScript(ES6이상, 함수 선언시 사용)

function greet(name = 'World') {
    console.log(`Hello, ${name}!`);
}

      3. Tuple을 지원하는 프로그래밍 언어의 종류
          1) Python (쉼표로 구분된 값들의 시퀀스를 () 안에 넣어서 생성합니다)

my_tuple = ("apple", "banana", "cherry")

          2) Swift (여러 값을 하나의 그룹으로 묶어 사용합니다)

let myTuple = (1, "Bob", 3.14)

          3) Go (멀티 반환 값을 위해 Tuple형태로 사용합니다)

func getPerson() (string, int) {
    return "John", 25
}

name, age := getPerson()

          4) Rust (여러 값을 그룹화하는 데 사용)

let my_tuple = (10, "hello", true);

         5) Kotlin (Pair와 Triple 클래스 제공 -> 2개와 3개의 값을 갖는 Tuple 생성 가능)

val myTuple = Pair("apple", 10)
val anotherTuple = Triple("banana", true, 3.14)

         6) C# (ValueTuple 형식을 사용하여 튜플 기능 제공)

var myTuple = ("apple", 10);
var anotherTuple = (name: "banana", quantity: 5);

Console.WriteLine(myTuple.Item1); // 출력: apple
Console.WriteLine(anotherTuple.name); // 출력: banana

         7) JavaScript (배열이나 객체를 사용하여 Tuple과 유사한 동작 구현 가능)

const myTuple = ["apple", 10];
const [fruit, quantity] = myTuple;

console.log(fruit); // 출력: apple
console.log(quantity); // 출력: 10

const anotherTuple = { name: "banana", quantity: 5 };

console.log(anotherTuple.name); // 출력: banana

      4. Camel Case(Lower, Upper)에 대한 설명
          1) Upper Camel Case : 변수나 함수 이름에 여러 단어를 사용할 때, 각 단어의 첫 글자를 대문자로 표시하는 방법
                                     첫 번째 단어는 소문자로 시작하며, 그 뒤의 모든 단어는 대문자로 시작합니다.
                                     Ex)  `MyVariableName`, `PrintMyName`
          2) Lower Camel Case : 첫 문자를 소문자로 표시하는 방법
                                     Ex) myVariableName, printMyName