본문 바로가기

분류 전체보기64

상속 상속 클래스, 프로토콜: 상속 가능 열거형, 구조체: 상속 불가능 다중상속은 미지원 클래스의 상속과 재정의 class 이름: 상속받을 클래스 이름 { /* 구현부 */ } // 기반 클래스 Actor class Actor { var name: String = "" func selfIntroduce() { print("안녕하세요 저는 \(self.name) 배우입니다.") } // final 키워드를 사용하여 재정의를 방지할 수 있다. final func myName() { print("안녕하세요 저는 actor 클래스 내에 있습니다.") } // 타입 메서드 // 재정의 불가 타입 메서드 - static static func typeMethod() { print("type method - static").. 2024. 4. 4.
Filemanager로 CRUD 해보기 Filemanager 사용해보기 먼저 위치를 확인한다. 아래 코드를 실행하면 콘솔창에 주소가 하나 뜬다. 그걸 터미널에 열어서 open 주소라고 치면 어떤 폴더가 나온다. 이 폴더가 바로 앞으로 작업할 폴더 이다. override func viewDidLoad() { ... let manager = FileManager.default guard let url = manager.urls( for: .documentDirectory, in: .userDomainMask).first else { return } print(url.path) } 작업을 저장할 폴더 만들기 만들 때 먼저 해야하는 것이 바로 "경로 설정"이다. 여기서는 newFolderUrl 이라는 변수에 url (위에서 만든 변수) 변수로 설정된.. 2024. 4. 4.
프로퍼티 프로퍼티 클래스, 구조체, 열거형과 연관된 값이다. 타입과 관련된 값을 저장 및 연산이 가능하다. 프로퍼티의 종류 인스턴스 저장 프로퍼티 타입 저장 프로퍼티 인스턴스 연산 프로퍼티 타입 연산 프로퍼티 지연 저장 프로퍼티 정의와 사용 열거형 내부에서는 연산 프로퍼티만 가능 연산 프로퍼티는 "var"로만 선언 가능 연산 프로퍼티는 읽기 전용으로는 구현 가능 쓰기 전용으로는 구현 불가능 읽기 전용으로 구현할 경우 get 블럭만 작성 (이 때, get 블럭은 생략 가능) 읽기, 쓰기 모두 가능하게 하기 위해서는 get 블럭, set 블럭 모두 구현 set 블럭에는 암시적 매개변수 newValue 사용 가능 struct FruitInfo { // 인스턴스 저장 프로퍼티 var name: String = "Not .. 2024. 4. 3.
Class vs Struct / Enum 열거형과 구조체는 값 타입 클래스는 참조 타입 클래스는 상속 가능 열거형과 구조체는 상속 불가능 struct ValueType { var property = 1 } class ReferenceType { var property = 1 } 첫 번째 구조체 인스턴스를 두 번째 인스턴스에 복사한 뒤 두 번째 구조체 인스턴스의 property 값을 변경해도 첫 번째 구조체 인스턴스의 property 값의 변화는 없다 ⭐️ 두 번째 구조체 인스턴스는 첫 번째 구조체를 복사한 별도의 인스턴스이기 때문이다 ⭐️ // 첫 번째 구조체 인스턴스 let firstStruct = ValueType() // 두 번째 구조체 인스턴스에 첫 번째 인스턴스 복사 var secondStruct = firstStruct // 두 번째.. 2024. 4. 3.
열거형 열거형 1. enum은 타입, 대문자 카멜케이스를 사용하여 이름을 정의한다. 2. 각 case는 소문자 카멜케이스로 정의한다. 3. 각 case는 그 자체가 고유의 값이다. 4. 각 케이스는 한 줄에 개별로도, 한 줄에 여러 개도 정의할 수 있다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // ... } 열거형 사용 enum FruitInfo { case apple case banana case kiwi case melon, strawberry, orange } // 열거형 타입과 케이스를 모두 사용된다. var apple: FruitInfo = FruitInfo.apple print(apple) // apple switch의 비교값에 열거형 타입이 위치할 때 .. 2024. 4. 2.
클래스 (Class) 정의 문법 클래스는 참조 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. class 이름 { /* 구현부 */ } 프로퍼티 및 메서드 구현 클래스의 타입 메서드는 두 종류가 있다. 상속 후 재정의가 가능한 class 타입메서드, 상속 후 재정의가 불가능한 static 타입메서드가 있다. class Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() { print("instance method") } // 타입 메서드 // 재정의 불가 .. 2024. 4. 1.
구조체 (Struct) 정의 문법 스위프트 대부분의 타입은 구조체로 이루어져 있다. 구조체는 값 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. struct 이름 { /* 구현부 */ } 프로퍼티 및 메서드 구현 프로퍼티는 변수의 다른 이름을 말한다. 클래스, 구조체, 열거형 등 전체적으로 사용되는 변수를 프로퍼티라고 부른다. 프로퍼티에는 저장, 연산, 타입 프로퍼티가 있다. 메서드는 함수와 같은 의미인데, 구조체, 클래스 내에서 쓸 때 메서드라고 한다. struct Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100.. 2024. 4. 1.
네비게이션 바 + 탭 바 적용 SceneDelegate.swift 파일 내 아래 코드 적용 // 첫화면이 뜨기전에, 탭바를 내장시키기⭐️⭐️⭐️ func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) // 탭바컨트롤러의 생성 let tabBarVC = UITabBarController() // 첫번째 화면은 네비게이션컨트롤러로 만들기 (기본루트뷰 설정) let vc1 = UIN.. 2024. 3. 29.
옵셔널 옵셔널 변수 뒤에 붙는 ? 물음표가 바로 옵셔널이다. 옵셔널 변수는 값이 있을 수도 또는 없을 수도 있다는 의미이다. name이라는 변수에 String 타입으로 "jerry"라는 값을 할당했다. var name: String = "jerry" print(name) // jerry 근데 만약에 name이라는 변수에 들어갈 값이 아직 정해지지 않았다면? String 타입 뒤에 ? 물음표를 붙인다. 그러고 print()로 출력하면 nil이 출력된다. var name: String? print(name) 나중에 name이라는 변수에 값을 할당한다면? 그리고 출력하면 Optional("jerry")가 나온다. var name: String? = "jerry" print(name) // Optional("jerry.. 2024. 3. 29.
Drawing Cycle (+ Layout Cycle) View Drawing Cycle view가 로드 또는 변경이 있을 때, 화면에 그려지는 사이클을 말한다. ⭐ 아래 순서로 drawing이 일어난다 (Constraints -> Layout -> Draw) Constraints: 오토레이아웃 업데이트 (제약을 업데이트) Layout: 하위뷰의 레이아웃으로 위치&크기 (재)조정 Draw: 실제 내부 컨텐츠 (다시) 그리기 ⭐1초에 60번씩 아래 메서드(함수)들이 자동 호출 된다. updateConstraints (오토레이아웃이 업데이트 과정) 현재 기기의 화면 크기를 기준으로 제약을 업데이트하는 과정이다. 동적인 오토레이아웃 변경이 일어날 경우 제약조건을 변경한다. ✅ 제약을 함수로 업데이트하고, 여러 개의 제약을 한 번에 업데이트 하는 상황이 아니라면 잘.. 2024. 3. 28.
앱의 생명주기 (App Life Cycle) 앱의 생명 주기 (App Life Cycle) 앱의 생명 주기는 포그라운드 또는 백그라운드 상태에 있을 때 앱의 실행 & 종료를 시스템 이벤트 의해 앱의 상태가 전환되는 과정을 말한다. 예를 들어 사파리로 웹 검색을 하다가 전화가 와서 받으면화면의 상태가 전화기 모드로 넘어가고, 사파리 웹은 사라지는 전환을 정의한 것이다. 앱의 상태 현재 앱이 언제든지 수행 가능 또는 불가능한 작업을 결정한다. NotRunning 앱이 아직 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태 Foreground - Inactive Inactive는 앱이 실행중이지만 사용자로부터 이벤트를 받을 수 없는 상태이다. 멀티태스킹 윈도우로 진입하거나 앱 실행중 전화, 알림 등에 의해 앱을 사용할 수 없게 되는 경우 이 상태로.. 2024. 3. 27.
ViewController의 life cycle ViewController의 life cycle 이란? 각각의 ViewController이 "보이고, 사라지는 주기"를 말한다. 보통은 생명주기라고 하는데, 이를 잘 사용하면 화면을 구성 또는 재구성할 때 유용하게 쓰인다. Appearing 상태 (나타나기 직전)에서 Appeared 상태 (나타남)으로 진행되고, 만약에 View가 종료된다면 Disappearing 상태 (사라지기 직전)에서 Disappeared 상태(사라짐)로 진행된다. ViewController 상태변화에 따른 메서드 종류 View의 각 상태 변화에 따른 메서드가 존재하고, 이를 이용하여 화면을 구성한다. loadView: 뷰를 메모리에 올리는 과정을 말하는데, 뷰를 바꿀 수 있는 시점이다. 각 뷰컨트롤러에는 기본적으로 갖고 있는 뷰가.. 2024. 3. 27.