Swift 5.9에서는 복사 불가능한 타입(Noncopyable Types)이 새롭게 도입되었습니다. 이 기능을 통해 특정 구조체(struct)나 열거형(enum)을 복사할 수 없도록 만들어, 고유한 소유권을 명확히 관리할 수 있습니다.왜 도입됐을까? 기존 Swift의 값 타입(struct, enum)은 항상 복사가 가능했습니다. 즉, 같은 데이터를 여러 번 복사하여 사용할 수 있었죠. 이는 편리하지만 때론 부적합합니다. 예를 들어, 파일 핸들이나 네트워크 소켓 같은 리소스는 하나의 고유한 소유권만을 요구하며, 복사가 가능하면 리소스 관리가 어려워지기 때문입니다.이 문제를 해결하기 위해 Swift 5.9부터는 복사를 금지하는 기능을 제공합니다.어떻게 사용하나? 복사 불가능한 타입을 정의할 때는 타입 선언..
Swift는 ARC ( 자동 참조 계산 )을 사용하여 앱의 메모리 사용을 추적하고 관리한다.ARC 동작 방식1. 인스턴스 생성과 메모리 할당class의 새로운 인스턴스를 생성할 때 마다 ARC는 해당 인스턴스에 대한 정보를 저장할 메모리 공간을 할당인스턴스의 타입 정보와 프로퍼티의 값이 저장됨.2. 참조 카운트 관리ARC는 사용중인 인스턴스가 메모리에서 해제되지 않도록, 몇개의 프로퍼티, 상수, 변수가 인스턴스를 참조하고 있는지 추적 - 참조 시작 시 : 카운팅 + 1 - 참조 종료 시 : 카운팅 - 1 - 최종적으로 참조 카운트가 0이 되면 인스턴스는 메모리에서 해제3. 메모리 해제참조 카운트가 0이 된 인스턴스는 더 이상 필요하지 않기 때문에, ARC가 해당 인스턴스가 사용했던 메모리..
Swift wholeNumberValue 사용 시 숫자가 아닌 문자 포함 이슈 해결문제 상황Swift의 Character.wholeNumberValue를 사용하면 숫자가 아닌 문자가 포함된 입력도 변환되는 문제 발생wholeNumberValue는 Int? 타입을 반환하면서 문자가 포함된 입력에서도 숫자만 걸러지는 문제가 있음.예를 들어, input = "1ㅁ23"인 경우 **[1, 2, 3]**으로 변환되어 입력이 허용됨.사용자 의도와 다르게 잘못된 입력을 허용하는 보안 취약점 가능성이 있음.문제 코드func inputAnswer() -> [Int] { while true { print("숫자를 입력하세요.") if let input = readLine() {..
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 위 프로그래머스 "수열과 구간 쿼리" 문제를 풀다가 차분 배열이라는 것을 알게되었습니다.기존에 제가 작성한 코드는 아래와 같습니다.import Foundationfunc solution(_ arr:[Int], _ queries:[[Int]]) -> [Int] { var result = arr for query in queries { let s = query[0] let e = query[1] for i in s...e { result[i] += 1 } ..
접근제어자클래스와 구조체를 사용하다 보면 외부에서 특정 데이터에 접근을 제한하고 싶을 때가 있다.struct Person { var name: String var age: Int var havingMoney: Int func introduce() { print("안녕하세요. 제 이름은 \(name)이고, 나이는 \(age)살 입니다.") }}var me = Person(name: "Brody", age: 26, havingMoney: 10000)print(me.havingMoney) 내가 가진 돈은 나만 알고 싶은데 다른 사람에게 알리고 싶지 않을때 접근 제어자를 사용하면 외부에서 접근을 못하도록 막을 수 있다.접근제어자는 외부에서 코드에 대한 접근을 제한하..
📝 중첩된 타입은 하나의 타입 안에 다른 타입을 정의하는 것을 의미한다.구조적으로 복잡한 클래스나 구조체 등을 더 조직적으로 관리할 수 있습니다.class, struct, enum 등에서 사용할 수 있습니다.중첩된 타입을 사용하면 코드의 가독성을 높이고, 타입 간의 연관성을 명확히 할 수 있습니다.타입의 블록 안에서 다른 타입을 정의하고 사용하는 방식으로 구현합니다.struct Car { struct Company { // Car 안에 중첩된 Company 구조체 var name: String var phoneNumber: String func contact() { print("\(name) 회사의 A/S 센터 번호는 \(ph..