iOS 프로그래밍기초 수업 3주차

도연·2022년 9월 20일
0
post-thumbnail

▶ A Swift Tour

전통에 따르면 새로운 언어로 된 첫 번째 프로그램은 화면에 "Hello, world!"라는 단어를 인쇄해야합니다. Swift에서는 한 줄로 수행 할 수 있습니다.

print("Hello, world!")
// Prints "Hello, world!"

Simple Values

상수를 만들고 변수를 만드는 데 사용합니다. 상수의 값은 컴파일 타임에 알 필요는 없지만 정확히 한 번 값을 할당해야합니다. 즉, 상수를 사용하여 한 번 결정하지만 여러 위치에서 사용하는 값의 이름을 지정할 수 있습니다.

var myVariable = 42
myVariable = 50
let myConstant = 42

Control Flow

조건부를 사용하고 -, , 사용하고 루프를 만듭니다. 조건 또는 루프 변수 주변의 괄호는 선택 사항입니다. 몸 주위의 중괄호가 필요합니다.

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)
// Prints "11"

Functions and Closures

함수를 선언하는 데 사용합니다. 괄호 안에 인수 목록과 함께 이름을 따라 함수를 호출합니다. 매개 변수 이름과 형식을 함수의 반환 형식과 구분하는 데 사용합니다.

func greet(person: String, day: String) -> String {
    return "Hello \(person), today is \(day)."
}
greet(person: "Bob", day: "Tuesday")코드를 입력하세요

Objects and Classes

클래스 이름 뒤에 클래스를 만드는 데 사용합니다. 클래스의 속성 선언은 클래스의 컨텍스트에 있다는 점을 제외하고는 상수 또는 변수 선언과 동일한 방식으로 작성됩니다. 마찬가지로 메서드와 함수 선언은 같은 방식으로 작성됩니다.

class Shape {
    var numberOfSides = 0
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

Enumerations and Structures (열거형과 구조체)

열거형을 만드는 데 사용합니다. 클래스 및 다른 모든 명명 된 유형과 마찬가지로 열거형에는 연관된 메서드가 있을 수 있습니다.

 enum Rank: Int {
    case ace = 1
    case two, three, four, five, six, seven, eight, nine, ten
    case jack, queen, king    
 func simpleDescription() -> String {
        switch self {
        case .ace:
            return "ace"
        case .jack:
            return "jack"
        case .queen:
            return "queen"
        case .king:
            return "king"
        default:
            return String(self.rawValue)
        }
    }
}
let ace = Rank.ace
let aceRawValue = ace.rawValue

Concurrency

비동기적으로 실행되는 함수를 표시하는 데 사용합니다.

func fetchUserID(from server: String) async -> Int {
    if server == "primary" {
        return 97
    }
    return 501
}

Protocols and Extensions

프로토콜을 선언하는 데 사용합니다.

protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust()
}

Error Handling

프로토콜을 채택하는 모든 유형을 사용하여 오류를 나타냅니다.

enum PrinterError: Error {
    case outOfPaper
    case noToner
    case onFire
}

Generics

꺾쇠 괄호 안에 이름을 작성하여 일반 함수 또는 유형을 만듭니다.

unc makeArray<Item>(repeating item: Item, numberOfTimes: Int) -> [Item] {
    var result: [Item] = []
    for _ in 0..<numberOfTimes {
        result.append(item)
    }
    return result
}
makeArray(repeating: "knock", numberOfTimes: 4)

raywenderlich.com의 Swift 스타일가이드

링크텍스트

▶ 데이터 타입(자료형, data type)

  • 정수형 숫자를 저장하는 변수
    • var myNumber = 10
    • myNumber라는 이름의 변수를 생성했으며, 숫자 10을 할당
    • var myNumber : Int = 10 // int x = 10; // C/C++
    • 위와 같이 초깃값이 있을 경우에는 컴파일러가 타입 추론(type inference)을 하므로 데이터 타입을 명시할 필요 없음
  • Bool, Character, Int, Float, Double, String, Void
  • var x : Int
  • x= 10
    • //주의 error '=' must have consistent whitespace on both sides
    • '=' 양쪽에 일관된 공백이 있어야 함
  • print(x) //실행결과 주석처리 방법
var x : Int = 10
print(x) // 10
x = 20
print(x) // 20드를 입력하세요

▶ 자료형의 종류와 크기?

var x = 10
// int x = 10;
print(type(of:x)) //Int
let s = MemoryLayout.size(ofValue: x) //8
let t = MemoryLayout<Int>.size
print(s, t)

//실행결과 
// Int
// 8 8

for i in 1...5 {
        print(i, terminator:" " )
}
print(1.0, 2.0, 3.0, 4.0, 5.0, separator: " aaaaa ")

// 실행결과 : 1 2 3 4 5 1.0 aaaaa 2.0 aaaaa 3.0 aaaaa 4.0 aaaaa 5.0

▶ 정수 데이터 타입 : Int

  • 정수(소수점이 없는 수)를 저장하는 데 사용

    • 양수, 음수, 영(0) 값을 담을 수 있는 부호 있는(signed) 정수
    • 영과 양수만 담을 수 있는 부호 없는(unsigned) 정수
  • 8비트, 16비트, 32비트, 64비트 정수를 지원

    • Int8, Int16, Int32, Int64 타입
  • 부호 없는 정수

    • UInt8, UInt16, UInt32, UInt64 타입
  • 애플은 특정 크기의 데이터 타입 보다 Int 데이터 타입을 권장

    • Int 데이터 타입은 해당 코드가 실행되는 플랫폼에 맞는 정수 크기를 사용
    • var myAge : Int = 20 // 초깃값 20이 있으므로 : Int는 일반적으로 생략함
  • 32비트 부호 있는 정수 데이터 타입에 대한 최솟값과 최댓값을 출력

  • \(출력하고 싶은 변수나 상수)

var x : Int = 10
print("x의 값은 ===> \(x)")

// 실행결과: x의 값은 ===> 10


print("Int32 Min = \(Int.min) Int32 Max = \(Int.max)")

// 실행결과: Int32 Min = -9223372036854775808 Int32 Max = 9223372036854775807

▶ 부동 소수점 데이터 타입: Double

  • 소수점이 있는 숫자
    • 4353.1223
  • Float와 Double 타입을 제공
  • Double 타입
    • 64비트로 부동 소수점 수를 저장, 소수점 15자리 정확도
  • Float 데이터 타입
    • 32비트로 부동 소수점 수를 저장, 소수점 6자리 정확도
  • Double형이 기본
  • var myWeight : Double
  • var myWeight : Double = 58.5
    • 초깃값 58.5이 있으므로 : Double은 일반적으로 생략함

▶ 부울 데이터 타입 : Bool

  • 참 또는 거짓(1 또는 0) 조건을 처리할 데이터 타입
  • Boolean 데이터 타입을 처리하기 위하여 두 개의 불리언 상수
    값(true/false) 사용
    • var orangesAreOrange : Bool
    • var orangesAreOrange : Bool = true
    • 초깃값 true가 있으므로 : Bool은 일반적으로 생략함

▶ 문자 데이터 타입 : Character

  • 문자, 숫자, 문장 부호, 심볼 같은 유니코드(Unicode) 문자 하나를 저장
    • 스위프트에서의 문자들은 문자소 묶음(grapheme cluster)의 형태로 저장
      • 문자소 묶음은 하나의 문자를 표현하기 위하여 유니코드 코드 값들로 이루어짐
  • var 변수명: Character = "초깃값"
  • 주의 : 초깃값은 작은 따옴표가 아니고 큰 따옴표
    • var myChar1 : Character
    • var myChar2 : Character = ":"
    • var myChar3 : Character = "X" //:Character 생략불가,생략하면 String형임
      • print(type(of: myChar3))
    • 유니코드를 이용하여 변수에 문자 'X'를 할당
      • var myChar4 = "\u{0058}
var myChar1  : Character
var myChar2 : Character = ":"
var myChar3 : Character = "X"  //:Character 생략불가,생략하면 String형임
print(type(of: myChar3))

var myChar4 = "\u{0058}"
print(myChar4)

// 실행결과
Character
X

▶ 문자열 데이터 타입 : String

  • 단어나 문장을 구성하는 일련의 문자
  • 저장, 검색, 비교, 문자열 연결, 수정 등의 기능을 포함
  • 문자열 보간(string interpolation)을 사용하여 문자열과 변수, 상수,
    표현식, 함수 호출의 조합으로 만들 수도 있음
var userName : String = "Kim"  // : String 생략하는 것이 일반적임
var age = 20
var message = "\(userName)의 나이는 \(age)입니다."
print(message) 

// 실행결과 : Kim의 나이는 20입니다.

▶ 변수 : var

  • 기본적으로 변수(variable)는 프로그램에서 사용될 데이터를
    저장하기 위한 메모리 공간
  • 변수에 할당된 값은 변경 가능
  • var myVariable = 10 // :Int
  • var x = 0.0, y = 0.0, z = 0.0

▶ 상수 : let

  • 상수(constant)는 데이터 값을 저장하기 위하여 메모리 내의 명명된 공간을 제공한다는 점에서 변수와 비슷
  • 어떤 값이 한번 할당되면 이후에 변경될 수 없음

▶ 상수와 변수 선언하기

  • 변수는 var 키워드를 이용하여 선언되며, 변수를 생성할 때에 값을 가지고 초기화할 수도 있음
    • var userCount = 10
    • var userCount : Int?
  • 상수는 let 키워드를 사용하여 선언
    • 선언하는 시점에서 상수에 값이 할당되어 초기화되고, 할당된 값을 수정할 수 없음
    • let maxUserCount = 20
  • 애플은 코드의 효율성과 실행 성능을 높이기 위해서 변수(var)보다는 상수(let)를 사용하라고 권장

▶ 타입 어노테이션과 타입 추론

  • 첫 번째 방법은 변수 또는 상수가 코드 내에서 선언되는 시점에 타입 어노테이션(type annotation)을 사용하는 것
    • 변수 또는 상수 이름 다음에 타입 선언을 두면 됨
    • Int 타입의 userCount 라는 이름의 변수를 선언
    • var userCount : Int = 10 // : Int가 type annotation
  • 선언부에 타입 어노테이션이 없으면 스위프트 컴파일러는 상수 또는 변수의 타입을 식별하기 위하여 타입 추론(type inference) 사용

▶ 튜플(Tuple)

  • 튜플은 스위프트 프로그래밍 언어에서 가장 강력한 기능 중 하나

  • 여러 값을 하나의 개체에 일시적으로 묶는 방법

  • 튜플에 저장되는 항목들은 어떠한 타입도 될 수 있으며, 저장된 값들이 모두 동일한 타입이어야 한다는 제약도 없음

  • let myTuple = (10, 12.1, "Hi")
    인덱스 2 위치를 추출하고 그 값을 새로운 문자열 변수에 할당

let myTuple = (10, 12.1, "Hi") 
var myString = myTuple.2  // myTuple.0 은 10 , myTuple.1 은 12.1
print(myString)   

// 실행결과 : Hi
  • 단 한 줄의 코드로 튜플의 모든 값을 추출하여 변수 또는 상수에 할당
let myTuple = (10, 12.1, "Hi")  
print(type(of:myTuple))

// 실행결과 : (Int, Double, String)
  • 튜플을 생성할 때 각 값에 이름을 할당할 수도 있음
let myTuple = (count: 10, length: 12.1, message: "Hi") 
print(type(of:myTuple))
print(myTuple.length)

// 실행결과 
(count: Int, length: Double, message: String)
12.1
  • 튜플의 가장 강력한 점은 함수에서 여러 값들을 한 번에 반환하는 것

출처:iOS프로그래밍기초 (22-2학기)한성현교수님 강의 내용 변형 및 요약 3주차
profile
초보개발자..ㅠ

0개의 댓글