분류 전체보기 87

SwiftUI - 개요

SwiftUI 목적 : 앱 개발을 더 쉽고 빠르게 함과 동시에 소프트웨어를 개발할 때 일반적으로 발생하는 버그를 줄이는 것 라이브 프리뷰 기능을 이용하여 실시간으로 테스트 가능 스위프트의 장점은 선언적 구문(declartive syntax)과 데이터 주도(data driven) 기반에서 비롯됨 UIKit과 인터페이스 빌더 선언적 구문에 대한 의미와 장점을 이해하려면 UI 레이아웃이 SwiftUI 이전엔 어떻게 설계됐는지 알아야 함 SwiftUI 도입 이전에는 iOS 소프트웨어 개발 키트(Software Development Kit, SDK)를 구성하는 여러 프레임워크와 함께 UIKit 이용하여 개발함 UI 레이아웃을 설계하도록 Xcode에서는 인터페이스 빌더 도구가 포함됨 앱을 구성하는 각각의 화면을 담..

SwiftUI 2024.01.07

Swift - 10. 에러 핸들링

에러 핸들링 활성화된 인터넷 연결을 기반으로 동작하는 앱은 디바이스가 네트워크 신호를 잃는 것을 제어할 수 없음 에러 처리를 해야 함 ex) 앱을 계속 사용하려면 인터넷 연결이 필요하다는 메시지 띄우기 에러 처리 2단계 iOS 앱의 메서드 내에서 원하는 결과가 나오지 않을 경우 에러 발생 (스로잉) 메서드가 던진 에러를 잡아서 처리 에러를 던진 경우, 해당 에러는 에러의 특성을 식별하여 적절한 동작을 결정하는 데 사용되는 특정 에러 타입 중 하나가 됨 에러 타입 값은 Error 프로토콜을 따르는 모든 값이 될 수 있음 에러 타입 선언 원격 서버 파일을 전송하는 메서드가 있다고 하자. 이 메서드는 여러 원인(네트워크 연결 x, 네트워크 속도 느림, 전송할 파일 찾지 못함)으로 인해 파일 전송에 실패 가능성..

Swift 2024.01.06

Swift - 9. 배열과 딕셔너리

가변형 컬렉션, 불변형 컬렉션 불변형 컬렉션 인스턴스에 속한 것은 객체가 초기화된 이후 변경될 수 없음 불변형 컬렉션은 생성할 때 상수에 할당하면 됨 변수에 할당했다면 가변형 컬렉션 배열 초기화 배열 : 하나의 순서 있는 컬렉션에 여러 값을 담기 위하여 설계된 데이터 타입 배열은 동일한 타입들의 값들만 저장할 수 있음 배열의 타입은 타입 어노테이션을 사용한 구체적 지정과 타입 추론을 이용하여 컴파일러가 식별하게 할 수도 있음 배열을 생성할 때 값들을 갖도록 초기화 → 배열 리터럴 var 변수명 : [타입] = [값1, 값2, 값3 ... ] 세 개의 문자열 값으로 초기화되어 생성된 새로운 배열을 변수에 할당 // 타입 추론 형태 // 가변형 var treeArray = ["Pine", "Oak", "Ye..

Swift 2024.01.06

Swift - 8. 프로퍼티 래퍼

프로퍼티 래퍼 클래스와 구조체 구현부에 게터(getter), 세터(setter), 연산 프로퍼티(computed property) 코드의 중복을 줄여줌 연산 프로퍼티의 기능을 개별 클래스와 구조체와 분리할 수 있게 함 → 앱 코드에서 재사용 도시 이름을 저장하는 String 프로퍼티를 가지는 구조체 struct Address { var city : String } 사용자 입력에 상관없이 도시 이름이 대문자로 저장되어야 한다면 다음과 같이 연산 프로퍼티 추가 struct Address { private cityname : String = "" var city : String { get {cityname} set {cityname = newValue.uppercased()} } } var address = ..

Swift 2023.12.29

Swift - 7. 구조체

구조체 데이터와 기능을 재사용할 수 있는 객체로 캡슐화 방법 제공 struct 키워드 사용 struct SampleStruct { var name : String init(name : String){ self.name = name } } 구조체와 동일한 클래스 선언부 비교 class SampleClass { var name : String init(name : String){ self.name = name } } → 키워드만 다를 뿐 똑같음. 각각의 인스턴스 생성 시에도 동일 let myStruct = SampleStruct(name : "Mark") let myClass = SampleClass(name : "Mark") 값 타입 vs 참조 타입 겉으로 보기엔 구조체와 클래스가 비슷하지만, 각각의 인스..

Swift 2023.12.28

Swift - 6. 서브 클래싱과 익스텐션 개요

상속, 클래스, 하위 클래스 클래스에 어떤 특성을 정의하고 그 클래스를 상속받은 다른 클래스를 생성 부모 클래스의 모든 기능을 상속받으며, 자신의 기능을 추가 클래스 상속을 통하여 클래스 계층 구조를 만듦 계층 구조의 최상위 클래스 : 베이스 클래스 (루트 클래스) 상속 받은 클래스 : 하위 클래스 (자식 클래스) 하위 클래스가 상속받은 클래스 : 부모 클래스 (상위 클래스) 하위 클래스는 반드시 단 한 개의 부모 클래스만 둘 수 있음 → 단일 상속 class BankAccount { var accountBalance : Float = 0 // 계좌에 남은 잔고 var accountNumber : Int = 0 // 계좌 번호 var fees : Float = 25.00 // 은행 수수료 // 초기화 i..

Swift 2023.12.28

Swift - 5. 객체 지향 프로그래밍 기초

객체(인스턴스)란 소프트웨어 애플리케이션을 구축하는 블록으로 쉽게 사용하고 재사용 할 수 있는 독립적인 기능 모듈 작업을 수행하기 위한 객체나 인스턴스에서 접근되고 호출되는 속성(프로퍼티)과 함수(메서드)로 구성 객체를 구성하는 데이터 변수와 함수를 포괄적으로 클래스 멤버라고 함 클래스 객체가 생설될 때의 모습 정의 메서드, 프로퍼티 정의 클래스 선언 새로운 스위프트 클래스를 선언할 때, 새롭게 만드는 클래스가 어떤 부모 클래스에서 파생되었는지 지정 클래스에 포함할 프로퍼티와 메서드 정의 // 기본 구문 class 클래스 이름 : 부모 클래스 { // 프로퍼티 // 인스턴스 메서드 // 타입 메서드 } 프로퍼티 : 클래스 내에 포함될 변수나 상수 정의 인스턴스 메서드, 타입 메서드 : 클래스에서 호출되는..

Swift 2023.12.27

Swift - 4. 함수, 메서드, 클로저 개요

함수 특정 작업을 수행하기 위해 호출할 수 있게 이름 붙여진 코드 블록 매개 변수(parameter) vs 인자(argument) 매개변수 : 함수가 호출될 때 받게 되는 값 인자 : 실제로 함수가 호출되고 값이 전달되는 시점에서 인자로 부름 메서드 특정 클래스나 구조체 또는 열거형과 연관된 함수 클래스 내 함수 선언 → 메서드 특별한 언급 없으면 함수 설명과 규칙, 동작이 모두 메서드에도 동일하게 적용됨 함수 선언 방법 함수명, 매개변수, 반환 결과 타입의 조합 → 함수 시그니처 func 함수명 (매개변수 이름 : 매개변수 타입, ... ) -> 반환 결과 타입 { // 함수 코드 } // 매개변수로 문자열 하나와 정수 하나를 받으며 문자열 결과를 반환하는 함수 func buildMessageFor(n..

Swift 2023.12.26

Swift - 3. 제어 흐름

break 현재 반복문에서 빠져나와 반복문 다음의 코드로 이동하여 실행 continue 반복문의 나머지 코드를 건너뛰고 반복문의 처음으로 다시 돌아감 guard 구문 불리언 표현식을 포함, true일 때만 guard 구문 다음에 위차한 코드가 실행됨 false일 때 수행될 else 절을 반드시 포함해여 함 else 절의 코드는 반드시 현재의 코드 흐름에서 빠져나가는 구문(return, break, continue, throw)을 포함해야 함 else 블록은 자기 자신을 반환하지 않는 다른 함수나 메서드 호출 가능. guard else{ // 조건문이 false일 때 실행될 코드 } // 조건문이 true 일 때 실행될 코드 func multiplyByTen(value : Int?){ guard let n..

Swift 2023.12.26