기본 데이터 타입

  • 데이터 타입?

    • 데이터 타입은 프로그램 내에서 다뤄지는 데이터의 종류.
    • 스위프트의 기본 데이터 타입은 모두 구조체를 기반으로 구현되어 있다.
    • 스위프트의 모든 데이터 타입 이름은 첫 글자가 대문자로 시작. (대문자 카멜케이스)
  • Int와 UInt (Integer and UnsignedInteger)

    • 정수 타입으로 Int는 부호를 포함한 정수 즉 + 와 - 를 가진 정수입니다. 반면에 UInt는 부호를 포함하지 않는, 0을 포함한 양의 정수를 나타냅니다.

    • Int와 Uint 모두 각각 8비트, 16비트, 32비트, 64비트의 형태가 있습니다. 즉 저장할 수 있는 데이터의 크기에 따라 타입이 분리되어 있습니다.

    • let integer : Int = -100    // Integer는 음수 값 할당 가능!
      let unsignedInteger : UInt = 100    // UnsignedInteger는 음수 값 할당 불가능!
      
      // max와 min을 통해 최대값 최소값 확인 가능.
      print("Int의 최대 값: \(Int.max), Int의 최소 값: \(Int.min)") 
      print("UInt의 최대 값: \(UInt.max), UInt의 최소 값: \(UInt.min)")
      
      //  Int의 최대 값: 9223372036854775807, Int의 최소 값: -9223372036854775808
      //  UInt의 최대 값: 18446744073709551615, UInt의 최소 값: 0
      
      • 흥미로운 점은 최대 값을 보시면 UInt의 최대 값이 Int의 최대값의 2배입니다.
    • 또한 각 진수에 따라 정수를 표현할 수 있습니다.

      • 10진수 == 그냥 숫자.
      • 2진수 == 접두어 0b를 사용
      • 8진수 == 접두어 0o를 사용
      • 16진수 == 접두어 0x를 사용
      • ex ) 10진수 28을 2진수로 표현하면 ==> let binaryInt: Int = 0b11100
  • Bool (Boolean)

    • Bool은 boolean 타입입니다. 참(true) 와 거짓(false)만 값으로 가집니다.

    • var boolean: Bool = true
      boolean.toggle() // toggle()이란 boolean의 값을 반전시킵니다.
      print(boolean) // false
  • Float 와 Double

    • 부동 소수점을 사용하는 실수를 나타낼때 사용하는 Float와 Double!

    • 부동소수 타입은 정수 타입보다 훨씬 넓은 범위의 수를 표현 가능.

    • Swift에서는 64비트의 부동소수 표현을 하는 Double, 32비트의 부동소수 표현을 하는 Float가 있다.

    • Double은 최소 15자리의 십진수 표현 가능, Float는 6자리의 숫자까지만 표현 가능.

    • var floatValue : Float = 1234567890.1
      var doubleValue : Double = 1234567890.1
      
      print("FloatValue : \(floatValue) DoubleValue : \(doubleValue)")
      
      //FloatValue : 1.234568e+09 DoubleValue : 1234567890.1
      • Float는 6자리 숫자까지만 표현가능한데 위의 예제에서는 너무 많이 넣어서 출력 해보니 정확도가 떨어지는 모습을 볼 수 있다.
  • Character

    • Character 타입은 '문자' 를 의미합니다. 하나의 문자를 표현할 수 있습니다.

    • let alphabetChar : Character = "A"
      let 한글문자 : Character = "ㄱ"
      
      print("Alphabet : \(alphabetChar), 한글 : \(한글문자)")   //  Alphabet : A, 한글 : ㄱ
      • 한글도 유니코드 문자에 속하므로 Swift코드의 변수 이름으로 사용 가능합니다. (신기신기..)
  • String

    • String은 문자열(문자가 나열된 것.) 입니다.

    • let name : String = "Holuck"
      var nameString : String = String() // 이니셜라이저를 사용한 빈 문자열 생성
      
      // append()를 사용하여 문자열을 이어붙인다.
      nameString.append(name)
      nameString.append(" ")
      
      // +연산자를 사용하여 문자열을 이어붙인다.
      nameString = nameString + " " + name
      
      // 문자의 수를 반환하는 count
      print(name.count)   // 6
      
      // 빈 문자열인지 확인하는 isEmpty
      print(nameString.isEmpty)   // false
      
      //Unicode의 스칼라 값을 사용
      let unicodeScalarValue : String = "\u{2665}"
      print(unicodeScalarValue)   //  ♥
    • 더 많은 기능을 코드로 확인해 봅시다

    • 연산자를 통한 문자열 비교

      • //  연산자를 통한 문자열 비교
        var isMyName : Bool = name == "Holuck"
        print(isMyName) // true
        isMyName = name == "holuck"
        print(isMyName) // false
    • 접두어, 접미어 확인

      • //  접두어, 접미어 확인
        var hasPrefix : Bool = false
        var hasSuffix : Bool = false
        
        //접두어 확인
        hasPrefix = name.hasPrefix("Ho")
        print(hasPrefix) // true
        hasPrefix = name.hasPrefix("Hi")
        print(hasPrefix) // false
        
        //접미어 확인
        hasSuffix = name.hasSuffix("ck")
        print(hasSuffix) // true
        hasSuffix = name.hasSuffix("lk")
        print(hasSuffix) // false
    • 대소문자 변환

      • var convertedString : String = String()
        convertedString = name.uppercased()
        print(convertedString) //   HOLUCK
        convertedString = convertedString.lowercased()
        print(convertedString) //   holuck
    • 여러줄 쓰기

      • let myDream : String = """
            제 꿈은
            스위프트를 마스터 하는 것입니다 !!
        """
        print(myDream)
        //제 꿈은
        //스위프트를 마스터 하는 것입니다 !!
    • 특수 문자.

      • print("줄바꿈 \n 백슬래시 표현 \\ 큰따옴표 표현 \" 탭. \t 문자열이 끝났음을 알리는 \0")
    • Ant, AnyObject와 nil

      • Any는 스위프트의 모든 데이터 타입을 사용할 수 있다는 뜻. 어떤 종류의 데이터 타입이든지 상관없이 할당 가능.

      • AnyObject는 Any보다는 조금 한정된 의미로 클래스 인스턴스만 할당 가능.

      • var anyVar : Any = "thisIsString"
        anyVar = 100
        anyVar = 100.2
      • nil은 타입이 아닌 '없음'을 나타내는 Swift의 키워드. 변수나 상수에 값이 들어있지 않고 비어있음을 나타냄.

https://github.com/elddy0948/Swift_Programming/tree/master/DataTypeBasic

'Swift > Programming' 카테고리의 다른 글

Swift) Swift란?  (0) 2020.02.12

Swift란?

Swift?

iOS, macOS, watchOS, tvOS 등 Apple의 제품 개발에 활용하고자 새 프로그래밍 언어인 Swift를 만들었습니다.

Swift의 언어적 특성

  • Safe : 안전성을 뜻하는 Safe는 Swift가 안전한 프로그래밍을 지향한다는 것을 뜻합니다. 이는 프로그래머가 저지를 수 있는실수를 미연에 방지하고자 하는 노력입니다. 옵셔널, guard구문, 타입 통제 등을 통해 Swift는 안전성을 추구합니다.
  • Fast : 신속성을 뜻하는 Fast는 Swift 가 C언어를 기반으로 한 프로그래밍 언어를 대체하려는 목적으로 만들어져 C언어의 수준과 동등한 성능을 일정한 수준으로 유지하는데 초점을 맞춰 개발, 구현되어 나가고 있습니다.

  • Expressive : 표현을 뜻하는 Expressive는 Swift가 다양한 언어의 문법적 장단점을 참고하여 좀 더 사용하기 편하고 보기 좋은 문법을 구현하려 노력하는 것입니다.

  • 그 외에도 C언어는 명령형 프로그래밍 패러다임(절차적 프로그래밍 패러다임)

    C++, JAVA등의 언어는 명령형 프로그래밍 패러다임과 객체지향 프로그래밍 패러다임을 동시에 사용한 다중 프로그래밍 패러다임

    Swift는 명령형 프로그래밍 패러다임, 객체지향 프로그래밍 패러다임, 함수형 프로그래밍, 프로토콜 지향 프로그래밍 패러다임

    객체지향?

    클래스와 객체

    • 클래스 : 같은 문제 해결을 위한 집단에 속하는 속성과 행위를 정의한 것. 객체지향 프로그램의 기본 사용자 정의 데이터 타입. 하나의 클래스는 다른. 클래스 또는 외부 요소와 독립적으로 디자인.

    • 객체 : 클래스의 인스턴스 (설계도를 바탕으로 실제 소프트웨어 세계에 구현된 구체적인 실체). 하나의 객체는 자신 고유의 속성이 있으며 클래스에서 정의한 행위를 할 수 있다. Swift에서는 '클래스의 인스턴시'라는 표현을 사용.

    • 메소드 or 메시지 : 객체가 클래스에 정의된 행위를 실질적으로 하는 함수. 메소드를 통해 객체에 명령, 데이터 전달. 전달하는 행위를 '메소드 호출'이라고 한다.

    import Foundation
    
    class imClass {
       let imOne: Any = 1
    
    
  • 객체지향 프로그래밍(Object-Oriented Programming, OOP)란 기존의 명령형 프로그래밍 패러다임에서 벗어나 여러개의 독립된 단위인 객체의 모임으로 파악하고자 하는 시각입니다. 개체끼리는 서로 데이터를 주고받고 처리할 수 있음. 하나의 클래스에 하나의 문제 해결을 위한 데이터를 메소드를 모아둠. 주요 특징으로 자료 추상화, 상속, 다형성, 동적 바인딩 등 (C++, Object-C, JAVA, Swift등에서 사용)
    func imMethod() {
        print("I'm Method!!")
    }
}
let imInstance: imClass = imClass()
// imClass 라는 이름의 클래스의 이니셜라이저를 호출합니다.
// imInstance라는 이름의 상수에 할당합니다.

// 클래스의 이니셜라이저를 통하여 메모리에 할당하고 초기화한 객체를 인스턴스라고 부릅니다. (imInstance)
print(imInstance.imOne) // 1 (클래스 안의 값)
imInstance.imMethod() // I'm Method!! (메소드 호출!)
```

객체지향 프로그래밍 패러다임을 사용한 언어는 필수로 명령형 프로그래밍 패러다임을 사용합니다.

함수형?

함수형 프로그래밍 패러다임의 가장 큰 장점은 대규모 병렬처리가 굉장히 쉽다. 함수형 프로그래밍 패러다임은 프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임.

명령형 함수를 이용하는 객체지향 프로그래밍은 절차지향 프로그래밍 패러다임이 포함되어 있다. 그래서 함수 실행 시 함수가 전달받은 객체의 상태 값 또는 메모리 참조값 등이 변경될 수 있으며 함수 내부의 처리에도 영향을 미칠 수 있다.

수학적 함수를 이용하는 함수형 프로그래밍은 순수하게 함수에 전달된 인자 값만 결과에 영향을 준다. 따라서 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출할 수 있다. 이 때문에 병렬처리 시 부작용이 없으며 필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업 할 수 있기 때문에 대규모 병렬처리에 강점.

또한 다음 조건을 만족하면 함수를 일급 객체(First-Class Citizen)로 다루는데..

  • 전달인자로 전달할 수 있다.

  • 동적 프로퍼티 할당이 가능.

  • 변수나 데이터구조 안에 담을 수 있다.

  • 반환 값으로 사용할 수 있다.

  • 할당할 때 사용 된 이름과 관계없이 고유한 객체로 구별.

    Swift의 함수는 이 모든 조건을 모두 충족할 수 있기에 함수를 일급 객체로 취급! -> 다양한 종류의 함수를 호출하고 전달하고 반환하는 등의 동작만으로도 프로그램 구현 가능.

    //명령형 프로그래밍 패러다임
    import Foundation
    
    func func1() {
     print("I'm Func1")
    }
    func func2() {
     print("I'm Func2")
    }
    func callAll() {
     func1()
     func2()
    }
    callAll()
    //함수형 프로그래밍 패러다임
    import Foundation
    
    func func1() {
     print("I'm Func1")
    }
    func func2() {
     print("I'm Func2")
    }
    
    func callAll(tasks: [() -> Void]){
     for task in tasks {
         task()
     }
    }
    callAll(tasks: [func1,func2]) // 함수를 직접 인자값으로 사용 가능.

    순수하게 함수형 프로그래밍 패러다임으로 프로그램을 작성했을때 장점

  • 여러 가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.

  • 멀티 코어 또는 여러 개 연산 프로세서를 사용하는 시스템에서 효율적.

  • 상태변화에 따른 부작용에서 자유로워짐.

    프로토콜?

    참조 타입의 참조 문제에서 조금 더 자유롭고, 다중상속이 불가능한 하나계를 뛰어넘음. 더 나은 추상화 메커니즘 구현 가능.

  • Swift에서는 구조체와 열거형에 기존의 클래스에서 구현할 수 있었던 것들과 더불어 프로토콜에 익스텐션을 활용할 수 있기 때문에 프로토콜 지향 프로그래밍이 가능합니다.

https://github.com/elddy0948/Swift_Programming

'Swift > Programming' 카테고리의 다른 글

Swift ) 기본적인 DataType  (0) 2020.02.13

+ Recent posts