Xcode에서 스토리보드로 새 프로젝트를 생성하였을 때 이와 같은 기본 파일들이 생성된다. 이 중에 swift 파일들을 자세히 알아보겠다.
AppDelegate.swift 파일의 내용이며, 각 주요 문법들에 주석을 달았다.
import UIKit // UIKit 프레임워크를 가져옴. iOS 앱 개발에 필요한 기본 UI 및 앱 관리 기능 제공
@main // 이 클래스가 앱의 진입점임을 나타냄. 앱 실행 시 가장 먼저 실행되는 클래스 지정
class AppDelegate: UIResponder, UIApplicationDelegate { // AppDelegate 클래스 정의. UIResponder를 상속받아 이벤트 처리 가능, UIApplicationDelegate 프로토콜 채택으로 앱 생명주기 관리
// 클래스는 앱의 전반적인 동작을 제어하는 역할을 함
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 앱이 실행된 직후 호출되는 메서드
// 매개변수: application은 현재 앱 인스턴스, launchOptions는 앱이 실행된 이유(예: 알림 클릭 등)에 대한 옵션 딕셔너리
// 반환값: Bool 타입으로, 앱 초기화 성공 여부 나타냄
return true // 초기화 성공 시 true 반환
}
// MARK: UISceneSession Lifecycle // 코드 섹션을 구분하기 위한 주석 표시. Xcode에서 접기/펼치기 가능
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// 새로운 scene 세션이 생성될 때 호출되는 메서드
// 매개변수: connectingSceneSession은 새로 연결될 scene 세션, options는 연결 옵션 정보
// 반환값: UISceneConfiguration 객체로, 새 scene의 설정을 정의
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
// 기본 설정 이름과 해당 scene의 역할을 사용해 UISceneConfiguration 객체 생성 후 반환
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// 사용자가 scene 세션을 종료했을 때 호출되는 메서드
// 매개변수: sceneSessions는 종료된 scene 세션들의 집합(Set)
// 앱이 실행 중이지 않을 때 세션이 종료되면, 앱 시작 후 이 메서드가 호출됨
// 종료된 scene과 관련된 리소스를 정리하는 데 사용
}
}
_ (언더스코어)의 역할을 자세히 설명한 것이다.
// 새로운 scene 세션이 생성될 때 호출되는 메서드. 앱에서 다중 창(scene)을 지원하기 위한 설정을 제공
func application(_ application: UIApplication, // 함수 정의 시작. 'application' 매개변수의 외부 레이블을 '_'로 생략하여 호출 시 이름 없이 사용 가능
configurationForConnecting connectingSceneSession: UISceneSession, // 'configurationForConnecting'는 외부 레이블, 'connectingSceneSession'는 내부 이름으로 사용
options: UIScene.ConnectionOptions) -> UISceneConfiguration { // 'options'는 외부와 내부 이름이 동일하게 사용됨. 반환 타입은 UISceneConfiguration
// '_'는 매개변수의 외부 레이블을 생략하라는 뜻. 즉, 이 메서드를 호출할 때 'application:' 같은 레이블 없이 바로 값만 전달 가능
// 예: application(application, configurationForConnecting: session, options: options)
// 언더스코어 사용 이유: Apple의 UIApplicationDelegate 프로토콜에서 첫 번째 매개변수는 보통 앱 인스턴스를 나타내며, 명시적 레이블이 필요 없는 관례적 설계임
// 매개변수 설명:
// - application: 현재 실행 중인 UIApplication 인스턴스. 앱의 전반적인 상태와 동작을 관리
// - connectingSceneSession: 새로 연결될 UISceneSession 객체. 특정 창(scene)의 세션 정보를 담음
// - options: UIScene.ConnectionOptions 타입으로, scene 연결 시 추가적인 컨텍스트나 설정 제공
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
// UISceneConfiguration 객체를 생성해 반환. 'name'은 설정 이름, 'sessionRole'은 해당 scene의 역할(예: foreground, background 등)을 지정
// 이 메서드는 새 scene의 초기 설정을 정의하는 데 사용됨
}
이는 문법 중 상속에 대한 요소들이다.
// AppDelegate 클래스는 UIResponder의 자식 클래스이며, UIApplicationDelegate 프로토콜을 채택
class AppDelegate: UIResponder, UIApplicationDelegate { // 클래스 선언. 상속과 프로토콜 채택을 동시에 사용
// 'UIResponder'는 부모 클래스(parent class 또는 superclass)로, AppDelegate는 이를 상속받아 자식 클래스(subclass)가 됨
// 'UIApplicationDelegate'는 프로토콜로, 상속과는 별개로 AppDelegate가 따라야 할 규칙(메서드 구현)을 정의
// 자식 클래스(subclass)란?
// - 부모 클래스(UIResponder)의 속성과 메서드를 물려받아 사용 가능
// - 필요 시 부모 클래스의 기능을 확장(override)하거나 새로운 기능을 추가할 수 있음
// - 예: UIResponder가 제공하는 이벤트 처리 메서드(touchesBegan 등)를 AppDelegate에서 재정의 가능
// 상속의 의미:
// - AppDelegate는 UIResponder의 모든 기본 기능을 상속받음
// - 즉, 터치나 모션 같은 사용자 이벤트를 처리할 수 있는 능력을 물려받은 상태
}
함수를 정의하는 기본적인 방법이다.
** 함수명은 매개변수명까지도 포함이기 때문에 add라는 함수가 여러 개 있어도 매개변수가 다르면 각각 다른 함수가 된다. **
func add(x:Int, y:Int) -> Int { //(매개변수,매개변수) -> 리턴할 자료형
return x+y
}
func add(_:Int, with:Int) -> Int {
return x+y
}
print(add(x:10,y:20))
var x = 10
print(type(of: x))
Class 선언
class Man {
var age : Int = 1
var weight : Double = 3.5
//init(){} //클래스를 만들면 컴파일러가 자동으로 init() 메소드를 만들어 준다.
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight: Double){
self.age = age
self.weight = weight
} //designated initializer 지정 초기화기. 이렇게 직접 만들 수도 있다.
}
var song = Man(age:20, weight:35.5)
song.display()
상속
class Student: Man {
}
var kim : Student = Student(age: 25, weight: 35.2) //Man을 상속 받았기 때문에 꼭 이와 같은 형태로 입력
print(kim.age)
class Student: Man {
var name: String
func displayS(){
print("이름=\(name), 나이=\(age), 몸무게=\(weight)")
}
//override func display(){ //만약 함수 이름을 똑같이 하고 싶다면 override해야 한다.
// print("이름=\(name), 나이=\(age), 몸무게=\(weight)")
//}
init(age: Int, weight: Double, name: String){
self.name = name //line 9와 바꿔 작성하면 오류 발생. 자식 클래스의 프로퍼티부터 초기화해야 한다.
super.init(age: age, weight: weight)
}
}
var hong : Student = Student(age: 25, weight: 35.2, name: "홍길동")
hong.displayS()
'iOS' 카테고리의 다른 글
Swift - TableView (0) | 2025.04.02 |
---|---|
Swift - 프로토콜 (0) | 2025.03.26 |
Swift로 전광판 만들기 (0) | 2025.03.19 |
Swift로 무드등 만들기 (0) | 2025.03.19 |
Swift 문법 정리 (0) | 2025.03.18 |