IOS앱개발

iOS 앱프로그래밍개발 4주차

taeho1630 2025. 3. 27. 16:46

지난 학기 복습 개념

func application(_ application: UIApplication,)

_ 는 외부 매개변수 생략

  1. 매개변수: application이라는 UIApplication 타입의 매개변수를 받습니다. 이는 앱의 공유 인스턴스에 대한 참조입니다4.
  2. 호출 시점: 이 메서드는 앱이 처음 시작될 때 UIKit에 의해 자동으로 호출됩니다1.
  3. 용도: 앱의 초기 설정을 수행하는 데 사용됩니다. 예를 들어, 앱의 주요 데이터 구조를 초기화하거나, 필요한 서비스를 등록하는 등의 작업을 수행할 수 있습니다4.
  4. 반환 값: 일반적으로 Bool 타입을 반환합니다. 앱이 성공적으로 시작되었는지를 나타냅니다1.
  5. 생명주기 관리: iOS 13 이전에는 이 메서드에서 앱의 전체 생명주기를 관리했지만, iOS 13부터는 일부 기능이 SceneDelegate로 이동했습니다6.

_ 의 사용 목적

  1. 매개변수 이름 생략: _를 사용하면 메서드를 호출할 때 해당 매개변수의 이름을 명시적으로 쓰지 않아도 됩니다.
  2. 가독성과 간결성: 일부 경우에 매개변수 이름이 불필요하게 반복적이거나 문맥상 명확할 때 _를 사용하여 코드를 더 간결하게 만들 수 있습니다.
  3. Apple의 컨벤션: application(_:didFinishLaunchingWithOptions:) 같은 UIKit의 델리게이트 메서드에서 Apple은 종종 첫 번째 매개변수에 _를 사용합니다. 이는 UIApplication 인스턴스가 항상 앱의 shared 인스턴스를 참조한다는 것이 명확하기 때문입니다.
configurationForConnecting connectingSceneSession

앞의 configurationForConnecting는 외부매개변수 connectingSceneSession는 내부매개변수

  1. 역할: configurationForConnecting은 메서드이며, connectingSceneSession은 해당 메서드의 매개변수입니다.
  2. 목적: configurationForConnecting은 Scene 구성을 결정하는 반면, connectingSceneSession은 생성될 Scene에 대한 정보를 제공합니다.
  3. 사용: 개발자는 configurationForConnecting 메서드를 구현하여 Scene 구성을 커스터마이즈할 수 있지만, connectingSceneSession은 시스템에 의해 제공되는 정보입니다3.

 

swift 함수의 특징 : arqument lable이 없어서 발생한 에러이다.
수정된 코드의 결과

함수의 자료형이라는 것은 매개변수의 자료들을 ,을 통해 나누고 화살표를 통해 리턴값의 자료형까지 나타낸다.

(Int, Int) -> Int

func add(x:Int,y:Int)->Int {
    print(#function)
    return x+y
}
add(x: 10,y: 20);

func add(first x:Int,second y:Int) -> Int {
    print(#function)
    return x+y
}
add(first: 10,second: 20);
func add(_ x:Int,_ y:Int) -> Int {
    print(#function)
    return x+y
}
add(10,20);
func add(_ x:Int,with y:Int) -> Int {
    print(#function)
    return x+y
}
add(10,with: 20);

4개의 함수명이 다 다름(swift 함수명)

# Swift 함수명 :

함수명(외부매개변수명 : 내부매개변수명 ...)

: 의 갯수가 매개변수 갯수

 

class 선언

class Man {
    var age : Int
    
}

변수 값이 없어서 오류가 생김

class Man {
    var age : Int = 1
    var weight : Double = 3.5
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
}
var kang = Man() // kang는 인스턴스 Man은 클래스
kang.display()

클래스 메서드는 class나 static이 앞에 붙는다.

class Man {
    var age : Int = 1
    var weight : Double = 3.5
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init(yourAge: Int, yourWeight : Double){ // 이 문장으로 인해 밑의 Man 클래스가 값이 없으면 실행X
        age = yourAge
        weight = yourWeight
    } //designated initializer
}
var kang = Man(yourAge: 10, yourWeight: 30.5) // 그냥 실행 안됨 값이 들어가야한다
kang.display()

designated initializer : 모든 프로퍼티(age, weight)를 다 초기화시키는 생성자

class Man {
    var age : Int = 1
    var weight : Double = 3.5
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init(age: Int, weight : Double){
        self.age = age
        self.weight = weight
    } //designated initializer
}
// -----------------클래스 정의
var kang = Man(age: 10, weight: 30.5)
kang.display()
// ------ 인스턴스 생성 및 사용

self : 현재 클래스 내 메서드나 프로퍼티를 가리킬 때 메서드나 프로퍼티 앞에 self.을 붙임

override : 부모와 자식의 함수의 이름이 똑같음 /func 앞에 override를 써야함

protocol : 특정 클래스와 관련없는 함수(메서드)들의 선언 집합

x  변수가 읽기(get)와 쓰기(set)를 모두 지원해야 함을 명시
Man  클래스가  Runnable  프로토콜을 준수하지 않기 때문에 발생합니다. Swift에서 클래스가 특정 프로토콜을 준수하려면, 해당 프로토콜에서 정의된 모든 속성 및 메서드를 반드시 구현해야 합니다.

 

protocol Runnable { //대리하고 싶은 함수 목록 작성
var x : Int {get set} //읽기와 쓰기 가능 프로퍼티,{get}은 읽기 전용
//property in protocol must have explicit { get } or { get set } specifier
func run() //메서드는 선언만 있음
}
class Man : Runnable { //채택, adopt
var x : Int = 1 //준수, conform
func run(){print("달린다~")} //준수, conform
}
var kim = Man()
kim.run()

 

'IOS앱개발' 카테고리의 다른 글

iOS 프로그래밍 6주차  (0) 2025.04.10
iOS 5주차 0403  (0) 2025.04.03
iOS 3주차 0320  (0) 2025.03.20
iOS 프로그래밍 2주차 0317  (0) 2025.03.19
다시 1주차  (0) 2025.03.06