카테고리 없음

iOS프로그래밍실무(6/15)

59date 2025. 4. 9. 16:46

var x : Int!
var x : Int?

두 개 소스의 공통점과 차이점(시험 나옴)

 

✅ 공통점

옵셔널 타입 둘 다 nil을 가질 수 있는 옵셔널
메모리 구조 내부적으로 값을 감싸는 Optional 열거형
초기 상태 값을 안 넣으면 기본적으로 nil

✅ 차이점

언래핑 직접 꺼내야 함 (x!, if let, guard let) 자동으로 꺼내짐
사용 시 안정성 더 안전함 (명시적으로 처리) 위험할 수 있음 (실수 시 앱 크래시)
코드 작성 방식 옵셔널임을 항상 인식하며 코딩 옵셔널 같지만 보통 변수처럼 사용
주 사용처 일반적인 옵셔널 처리 상황 나중에 값이 꼭 들어올 걸 보장할 때 (ex. IBOutlet 등)

 

 

실행문에서 ! ? 두 개의 차이점

 

? 사용: 옵셔널 체이닝 (안전하게 접근)

! 사용: 강제 언래핑 (위험한 방식)

 

차이 요약

안전성 ✅ nil이어도 에러 없음 ❌ nil이면 런타임 에러
반환값 옵셔널 값 (Optional(5)) 일반 값 (5)
권장 사용 옵셔널일 수 있는 상황 값이 반드시 있다고 확신할 때만 사용

 

 

 

 

 

 

  • throws 함수는 반드시 try로 호출해야 함
  • try는 반드시 do-catch로 감싸서 에러 처리해야 함
  • 아니면 try! 또는 try? 로 처리 가능 (하지만 안전성 주의)

 

✅ Swift 괄호 종류와 역할

() 소괄호 (Parentheses) 함수 호출, 파라미터 정의, 튜플 등 func greet(name: String)
greet(name: "Kim")
{} 중괄호 (Braces) 코드 블록, 클로저 정의 등 if true { print("Yes") }
let add = { (a: Int, b: Int) -> Int in return a + b }
[] 대괄호 (Brackets) 배열, 서브스크립트 접근 let arr = [1, 2, 3]
print(arr[0])
<> 꺾쇠괄호 (Angle Brackets) 제네릭 타입 표기 Array<Int>
Dictionary<String, Int>

 

Swift의 기본 콜렉션 타입 3가지

Array 순서가 있는 값들의 집합 (중복 가능) [1, 2, 3], ["apple", "banana"]
Set 순서가 없고, 중복을 허용하지 않는 집합 Set([1, 2, 2, 3]) → {1, 2, 3}
Dictionary 키-값 쌍으로 이루어진 컬렉션 ["name": "Kim", "age": 25]

 

 

var number : [Int] = []
//빈 배열을 let으로 만들 수는 있지만 초기값에서 변경 불가이니 배열의 의미 없음
var odd = [Int]()
var even : Array<Int> = Array()
print(number) //[]
print(number[0]) //오류, 빈 배열을 값을 넣은 다음에 접근
number.append(100) //let으로 선언한 불변형 배열이라 추가 불가능
//error: cannot use mutating member on immutable value: 'number' is a 'let' constant
print(number[0])
number.append(200)
print(number[0], number[1],number)

 

빈 배열은 반드시 append해서 가지고 놀아야 한다.

append 할 때마다 방이 늘어난다.

 

 

초기값에서 변경되지 않아도 var보다는 let이 좋다

 

var num = [1,5,3,2,4]
num.sort() //오름차순 정렬하여 원본 변경
print(num) //[1, 2, 3, 4, 5]
num[0...4] = [2,3,4,5,1]
num.sort(by:>) //내림차순 정렬하여 원본 변경
print(num) //[5, 4, 3, 2, 1]
num[0...4] = [2,3,4,5,1]
num.reverse() //반대로 정렬하여 원본 변경
print(num) //[1, 5, 4, 3, 2]
print(num.sorted()) //오름차순 정렬 결과를 리턴하고, 원본은 그대로, var x = num.sorted()
//[1, 2, 3, 4, 5]
print(num) //[1, 5, 4, 3, 2]
print(num.sorted(by:>)) //내림차순 정렬 결과를 리턴하고, 원본은 그대로
//[5, 4, 3, 2, 1]
print(num)//[1, 5, 4, 3, 2]

 

sort는 정렬은 하는데 원본을 변경

sorted는 정렬한 결과를 잠깐 return함 원본은 그대로 둔다

(by:>) 이건 내림차순 (클론 다음에 꺽세)

reverse  반대로 정렬

 

Swift에서는 **아무 접근 제어자도 명시하지 않으면 기본값은 internal**입니다.