본문 바로가기

IOS App Programming/Swift22

[Swift] for 문 거꾸로 순회(stride), reverse VS reversed 알고리즘 문제를 풀다 보면 반복문을 반대로 돌려야 할 때가 종종 등장한다. 파이썬의 경우 for 문 안에 같이 적는 range에 step이 존재하여 큰 수부터 작은 수까지 step을 -1씩 하면 거꾸로 순회가 가능했다. 이와 같은 문법이 swift에서는 어떻게 작성해야하는지 찾아보았다. 또한 배열을 거꾸로 순회하는 경우에는 reversed() 함수를 사용해 뒤집으면 되는데 공식 문서를 읽어보던 중 reversed()와 reverse() 두가지 함수의 재밌는 차이점을 발견하여 같이 정리해볼까 한다. 연속되는 범위 거꾸로 순회하기 파이썬의 range의 step과 같은 역할을 해주는 swift 함수는 stride()이다. stride(from:to:by:) to를 포함하지 않음 stride(from:throu.. 2024. 3. 11.
배열 Safe Index - 안전하게 배열 조회하기 배열은 인덱스를 통해 빠른 접근이 가능하다. 하지만 인덱스 범위를 넘게 되면 런타임 에러가 발생해 앱을 강제 종료 시킬 수 있어 치명적이다. 프로젝트 진행 중 인덱스를 접근할 일이 많았고, 이는 위험성을 가지고 있기 때문에 멘토님께서 safe Index를 사용하는 방법을 권유하셨다. 따라서 앱에서 인덱스를 통한 접근이 필요할 시 subscript를 사용하여 안전하게 접근할 수 있는 방법을 간단하게 정리해 보겠다. extension Array { subscript (safe index: Int) -> Element? { return indices ~= index ? self[index] : nil } } indices는 Collection 타입의 유효범위를 나타낸다. 예를 들어 arr = [1,2,3] 일.. 2024. 2. 29.
Struct VS Class 메모리 관점 고찰과 언제 써야할까? Struct VS Class 성능 비교 메모리 저장 Swift의 struct와 class의 차이는 메모리의 여러 영역 중 Stack과 Heap에 관련되어 있다. struct → Stack 할당 (정적 할당 : 컴파일 시 크기 결정) class → Heap 할당 (동적 할당 : 런타임 시 동적으로 할당됨) Stack은 정적 타입으로 간단한 자료구조 형태를 가지며 O(1)의 시간복잡도를 가지고 간단하게 할당 해제할 수 있는 반면에 Heap은 메모리에 연속적으로 존재하지 않아 복잡한 과정을 거쳐 할당 해제 시 비용이 스택보다 더 크다. Dispatch https://bang-tori.tistory.com/77 접근제한자 정리 및 성능 향상 이유 + final 제한자 프로젝트를 진행할 당시 적절한 접근제한자를 .. 2024. 2. 28.
접근제한자 정리 및 성능 향상 이유 + final 제한자 프로젝트를 진행할 당시 적절한 접근제한자를 설정하는 것이 성능 향상에 도움이 되니 외부 접근이 없다면 private 처리를 해보자라는 피드백을 받아 코드를 수정했던 경험이 있다. 그래서 접근제한자에 대해 간단히 정리하고 성능에 어떠한 영향을 주는지 정리를 해보았다. 접근 제어는 객체지향의 중요 특징 중 하나인 은닉화를 구현하기 위한 핵심기능이다. 파일 간 또는 모듈 간에 접근을 제한할 수 있는 기능이다. 접근 제한자는 open, public, internal, fileprivate, private 다섯 가지 존재 접근 제한자 정리 public - 공개 접근 수준 어디서든 접근 가능 (자신이 구현된 소스파일, 그 소스파일이 속해있는 모듈, 그 모듈을 가져다 쓰는 모듈 등 모든 곳 가능) open - 개방 .. 2024. 2. 23.