Swift
14 posts
In-Out 파라미터

💡 인-아웃 매개변수 (In-Out Parameter) In-Out 파라미터란 ? ! Swift에서 은 함수의 매개변수 선언 앞에 사용되는 키워드로, 해당 매개변수가 함수에 전달된 변수에 대한 참조를 나타냅니다. 이렇게 선언된 매개변수는 함수 내에서 변수의 값을 변경할 수 있고, 변경된 값은 함수를 호출한 곳으로 다시 전달됩니다. 이를 통해 함수 내부에서 변수의 값을 수정하고 그 결과를 함수 외부에서 사용할 수 있습니다. swapValues함수는 inout 매개변수인 a와 b를 사용해 변수 x와 y의 값을 서로 바꿉니다. 함수를 호출할 때 를 사용해 변수의 참조를 전달해야 합니다. 👀 Why ? Swift에서 In-Out 매개변수는 왜 필요한가요 ? ! 일반적으로 함수의 파라미터는 함수 내에서 지역 변수로 취급되며, 함수 내에서 변경된 값은 함수 외부에 영향을 미치지 않습니다. 그러나 in-out 파라미터를 사용하면 할 수 있으며, 변경된 값이 됩니다. 👀 When…

May 26, 2023
Swift
열거형 (Enum)

💡 Enum 개념 연관된 항목들을 묶어서 표현할 수 있는 타입 이미 정해놓은 입력 값만 선택해서 사용하고 싶을 떄 유리 -> 정의해 준 항목 외에는 추가 / 수정 불가능 즉, 열거형은 다음과 같은 경우 유용 제한된 선택지를 주고 싶을 떄 정해진 값 외에는 입력받고 싶지 않을 때 예상된 입력 값이 한정되어 있을 떄 💡 열거형을 사용하는 이유 깔끔하고 간결한 코드 다음과 같이 열거형을 사용해 코드를 짤 경우 각 대륙 안에 어떤 국가가 있는지 한눈에 알아볼 수 있다. 코드 작성이 편리 위 두개의 코드는 모두 말레이시아 수도 쿠알라룸푸르를 선언하고 있다. 두 가지의 코드로 수도(KualaLumpur)를 출력 하려고 할 떄, 열거형으로 선언할 경우에는 Capital 입력 시, 자동완성을 통해 어려운 철자를 입력하지 않아도 된다. 코드 실수를 줄일 수 있다. 다음과 같이 모두 같은 실패를 나타내지만, result가 아닌 다른 이름을 사용하면 쓸데없는 코드들이 많아지고 오류가 잦아진…

April 04, 2023
Swift
assert와 guard

💡 assert 함수 특정v조건을 체크하고 조건이 성립되지 않으면 메시지를 출력할 수 있게 해주는 함수 애플리케이션이 동작 도중에 생성하는 다양한 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리 가능 assert(::file:line:) 함수를 사용 디버깅 모드에서만 동작 배포하는 애플리케이션에서는 제외됨 주로 디버깅 중 조건의 검증을 위해 사용 💡 guard 구문 문법 guard 조건 else {조건이 false일 때 실행될 구문} guard 구문의 핵심은 Early EXIT (빠른 종료) if 조건문과 비교해본다면, if문은 ‘(조건)이면 (code)해라’의 실행구문이지만, guard구문의 경우 ‘(조건)이 아니면 끝내라’ 디버깅 모드뿐만 아니라 어떤 조건에서도 동작 가능 guard의 else 블럭 내부에는 _특정 코드블럭을 종료하는 지시어(return, break, continue, throw 등)_가 꼭 있어야 한다. 단순 조건 판단 후 빠르게 …

March 20, 2023
Swift
클로저 (Closure)

💡 클로저 (Closure) 클로저는 사용자의 코드 안에서 전달되어 사용할 수 있는 로직을 가진 중괄호{}로 구분된 코드의 블럭을 의미 전역함수(global function)와 중첩함수(nested function)기 모두 클로저에 포함 보통 클로저는 Unnamed Closure를 의미하는 것이지만, Named Closure(함수) 또한 Closure에 포함 Named Closure (함수) 다음 코드와 같이 우리가 일반적으로 func()을 사용해 정의하는 이름이 있는 함수를 의미 단지, 이를 클로저로 부르는 것이 아니라, 그냥 함수로 명칭 Unnamed Closure (익명함수) 보통 Closure의 의미는 다음과 같이 이름을 붙이지 않고 사용하는 함수(익명함수)를 말함 따라서 클로저는 익명이긴 하지만 함수이기에 1급 객체 함수의 특성을 모두 가짐 1급 객체 함수의 특성 변수나 상수에 저장 및 할당 가능 파라미터(객체의 인자)로 전달 가능 함수(객체)에서 retu…

March 06, 2023
Swift
프로퍼티(Property)와 메서드(Method)

💡 프로퍼티 (Property) ✨ 프로퍼티는 클래스, 구조체, 열거형과 관련한 값 ✨ 프로퍼티의 종류에는 *저장 프로퍼티(Stored Property)*와 *계산된 프로퍼티(Computed Property)*가 있다. 1. 저장 프로퍼티 (Stored Property) 단순히 값을 저장하고 있는 프로퍼티 let을 사용해 상수 또는 var를 사용해 변수로 선언해 사용 가능 클래스와 구조체(열거형 X) 에서만 사용기능 상수 구조체 인스턴스의 저장 프로퍼티 구조체를 상수(let)로 선언하면 구조체 인스턴스의 프로퍼티 변경 불가능 클래스 인스턴스는 let으로 선언하더라도 프로퍼티 변경 가능 지연 저장 프로퍼티 값이 처음으로 사용되기 전에는 계산되지 않는 프로퍼티 lazy 키워드 사용 요소가 끝나기 전에 적절한 값을 알지 못하는 경우에 유용 실제 사용되기 전에는 실행되지 않으므로 인스턴스의 초기화 시점에 복잡한 계산 회피 가능 📝 지연 프로퍼티는 반드시 변수(var)로 선언 상…

February 20, 2023
Swift
구조체(Struct)와 클래스(Class)

✨ 구조체와 클래스는 OOP(Object-Oriented Programming)를 위한 필수 요소로 프로그램의 코드를 추상화하기 위해 사용 ✨ Swift에서는 구조체와 클래스를 위한 별도의 인터페이스와 파일을 만들 필요가 없다. 💡 구조체 (Struct) 정의 인스턴스의 값(프로퍼티)을 저장하거나 기능(메소드)을 제공하고 이를 캡슐화할 수 있는 Swift가 제공하는 타입 Swift에서는 대부분의 타입이 구조체로 이루어져 있다. 대문자 CamelCase 사용 구조체는 값 타입 (Value Type) 함수에서 상수나 변수에 전달될 때 값이 복사되어 전달 구조체에서는 값이 할당되는 순간 복사되기 때문에 picture와 hd는 전혀 다른 인스턴스 struct 이름 {       구현부 } 프로퍼티 및 매서드 🔎 프로퍼티와 매서드에 대한 자세한 설명은 여기 참고 구조체 사용 1. 가변 인스턴스 2. 불변 인스턴스 3. 타입 프로퍼티 및 매서드 구조체 타입 자체에서 사용할 수 있는 프로…

February 17, 2023
Swift
옵셔널(Optional)과 옵셔널 체이닝(Optional Chaining)

💡 옵셔널 (Optional) 값이 있을 수도 있고, 없을 수도 있는 것! 🧠 Why? nil의 가능성을 명시적으로 표현 nil의 가능성을 문서화 하지 않아도 코드만으로 충분히 표현이 가능하므로 문서 / 주석 작성 시간을 절약 가능 전달 받은 값이 옵셔널이 아닐 경우 nil체크를 하지 않더라도 안심하고 사용할 수 있으므로 효율적인 코딩과 예외 상황을 최소화하는 안전한 코딩이 가능 enum + general ❗️ 암시적 추출 옵셔널 (Implicitly Unwrapped Optional) 기존 변수처럼 사용 가능 nil 할당 가능 ❓ 옵셔널 (Optional) nil 할당 가능 기존 변수처럼 사용불가 ❌ 💡 옵셔널 추출 (Optional Unwrapping) 옵셔널 바인딩 (Optional Binding) nil 체크 + 안전한 값 추출 if - let 여러 변수들을 한번에 바인딩 가능 강제 추출 (Force Unwrapping) 옵셔널의 값을 강제로 추출 강제추출 시 값이 없으면 런…

February 17, 2023
Swift
Swift 기초 다지기 (3)

💡 조건문 if-else if condition {      statements }  else if condition {      statements }  else {      statements } condition(조건) 소괄호 생략 가능 ❗️ Swift 조건은 항상 Bool 타입이 들어와야한다. ❗️ switch switch value { case pattern:    code default:    code } 범위 연산자를 활용하면 유용 💭 범위 연산자 닫힌 범위 연산자(Closed Range Operator) a…b a 이상 b 이하 반 닫힌 범위 연산자 (Half-Open Range Operator) a..

February 11, 2023
Swift
Swift 기초 다지기 (2)

💡 컬렉션 타입 컬렉션 타입 : 여러 값들을 묶어서 하나의 변수로 표현 1. Array Array : 순서가 있는 list 컬렉션 빈 Array 생성 🎯 Int Array 생성 🎯 Double Array 생성 🎯 String Array 생성 🎯 Character Array 생성 ⭐️ let을 사용해 Array 선언 시 Array 원소 변경 불가능 immutableArray.append(4) 또는 immuntableArray.removeAll() 과 같은 명령어 사용 불가능 append Int 타입으로 Array를 생성했기 때문에 Int 타입의 숫자들만 추가할 수 있다. contains Array안에 해당 숫자가 있는지 판별 있으면 true 반환 없으면 false 반환 remove remove(at: 인덱스) Array안에 해당 위치 값 삭제 후 값 반환 removeLast() 마지막 값 삭제 후 값 반환 removeAll() 모두 삭제 count 몇개의 원소가 있는지 확인 2. D…

January 12, 2023
Swift
Swift 기초 다지기 (1)

💡 명명법 Swift 는 대소문자를 구분! 1. Lower Camel Case function, method, variable, constant 2. Upper Camel Case type(class, struct, enum, extension, …) 💡 콘솔로그 1. print 단순 문자열 출력 2. dump 인스턴스의 자세한 설명 (description 프로퍼티) 까지 출력 💡 문자열 보간법 (String interpolation) 프로그램 실행 중 문자열 내에 변수 또는 상수의 실질적인 값을 표현하기 위해 사용 () -> 문자열로 자동 치환 💡 상수와 변수 띄워쓰기 중요! 값의 type이 명확하다면 type 생략 가능 1. 상수 선언 상수 선언 키워드 : let let 이름: 타입 = 값 2. 변수 선언 변수 선언 키워드 : var var 이름: 타입 = 값 💡 데이터 타입 Swift는 다른 데이터 타입 간의 변경이 매우 까다롭기 때문에 반드시 명확한 데이터 타입을 설정…

December 24, 2022
Swift