본문 바로가기

Swift10

[Swift] Equatable, Hashable Equatable과 Hashable 프로토콜에 관해 기록합니다. Equatable protocol Equatable { static func == (lhs: Self, rhs: Self) -> Bool } - 값이 동일한 지 비교할 수 있는 타입 - 이 프로토콜을 준수하는 타입은 == 혹은 !=를 사용하여 비교할 수 있음. - 기본 데이터 타입 Int, String, Double 등 Hashable 프로토콜을 준수하고 있어 값을 비교할 수 있음. Hashable protocol Hashable: Equatable { var hashValue: Int { get } } - 정수 hash 값을 제공하는 타입 - hash → 해시 함수에 의해 얻어지는 값 → 해시값, 해시코드, 해시 체크섬 - 해시 함수: 임.. 2023. 1. 3.
[Swift] @discardableResult @discardableResult에 관해 기록합니다. Return value가 있어 호출했을 때 "_" 나 변수에 할당해주지 않으면 'Result of call to ~~~ is unused' warning이 뜨게 된다. 하지만 return value가 있는데 이 값을 사용하지 않을 때가 있다. 그 때 @discardableResult를 함수 앞에 선언해서 warning이 뜨는 것을 예방할 수 있다. @discardableResult func discardableInfo() -> String { let infoString = "Info" return infoString } discardableInfo() // Result unused warning이 뜨지 않는 것을 확인할 수 있음. 참고: https:/.. 2021. 7. 18.
[Swift] split vs components String을 분리하는 함수 split과 components의 차이에 관해 기록합니다. split func split(separator: Character, maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true) -> [Substring] separator: 문자열을 분리하려는 문자 기준 maxSplits: 문자열을 분리하는 횟수 omittingEmptySubsequences: 빈 시퀀스의 포함 유무 return type: [Substring] time Complextiy: O(n), n은 Collection의 길이 예제: let str = "Hello Swift" let arr = str.split(separator: " ") // ["He.. 2021. 6. 5.
[Swift] Optional Swift의 특징 중 하나인 안정성의 중요한 요소인 Optional에 대한 내용을 기록합니다. Optional (옵셔널) 값이 있을 수도 없을 수도 있음을 나타내는 표현이다. nil로 반환해서 오류가 있음을 알리거나 매개변수를 굳이 넘기지 않아도 된다는 뜻으로 매개변수의 타입을 옵셔널로 정의할 수 있다. nil은 옵셔널로 선언된 곳에서만 사용할 수 있다. -> 옵셔널이 선언된 변수와 아닌 변수를 아예 다른 타입으로 인식해서 옵셔널이 아닌 변수에 nil이 할당되면 컴파일할 때 바로 오류가 발생한다. 옵셔널은 제네릭이 적용된 열거형으로 구현되어 있다. public enum Optional: ExpressibleByNilLiteral { case none case some(Wrapped) @_transpare.. 2021. 5. 22.
[Swift] ARC (1) ARC에 관한 내용을 정리한 것을 기록합니다. ARC(Automatic Reference Counting) 참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근하기 때문에 언제 메모리에서 해제되는지가 중요하다. why ? 인스턴스가 적절한 시점에 해제되지 않으면 한정적인 메모리 자원을 낭비하게 되고 성능 저하로 이어지게 된다. → 그래서 스위프트는 프로그램의 메모리 사용을 관리하기 위해 메모리 사용을 추적하고 관리하는 ARC를 사용한다. 참조 횟수 계산은 클래스 타입에만 적용된다. 컴파일 시 인스턴스를 메모리에서 해제되는 시점을 예측할 수 있다.→ 인스턴스를 메모리에 유지시키려면 명분이 필요하다. → 인스턴스가 더 이상 필요없다고 판단하면 자동으로 인스턴스의 메모리를 해제한다. 그리고 인스턴스에 .. 2021. 5. 12.
[Swift] popLast() vs removeLast() 배열의 마지막 요소를 제거하는 2가지 방법에 관한 내용을 기록합니다. 배열의 마지막 요소를 제거하고 값을 리턴하는 popLast()와 removeLast()가 있습니다. Swift를 사용하여 PS를 하다가 popLast()와 removeLast()의 차이점이 궁금해서 찾아봤습니다. removeLast()는 배열의 마지막 요소를 제거히고 리턴합니다. popLast() 또한 배열의 마지막 요소를 제거하고 리턴합니다. 하지만 popLast()의 리턴 값이 아래의 그림처럼 옵셔널인 것을 확인할 수 있었습니다. 코드를 통해 직접 실행하여 비교한 결과, 빈 배열에 removeLast()를 실행하면 컴파일 에러가 발생합니다. 반면에, 빈 배열에 popLast()를 실행하면 nil이 리턴됩니다. var nums = [.. 2021. 5. 11.
[Swift] Instance, Static, Class Method 스위프트의 메서드에 관해 기록하겠습니다. 스위프트의 메서드로는 Instance, Static, Class가 있습니다. instance 메서드 우선, instance 메서드는 클래스를 만들고 해당 클래스의 인스턴스 생성을 통해 호출할 수 있습니다. class ExClass { func instanceMethod() { print("Instance") } } let ex = ExClass() ex.instanceMethod() // Instance 위 코드처럼 ExClass의 ex 인스턴스를 생성하고 ex를 통해 instacneMethod()를 호출할 수 있습니다. static 메서드와 class 메서드의 공통점 static 메서드와 class 메서드는 타입 메서드라고 합니다. 또한, static 메서드와 .. 2021. 5. 8.
[Swift] 구조체와 클래스 구조체와 클래스에 관해 기록합니다. 구조체와 클래스 객체지향 프로그래밍(OOP)를 위한 필수 요소로 프로그램의 코드를 추상화하기 위해 사용함 Swift에서는 다른 프로그래밍 언어와 달리, 구조체와 클래스를 위한 별도의 인터페이스와 파일을 만들 필요가 없음 구조체와 클래스의 공통점 여러 변수를 담을 수 있는 컨테이너 데이터를 용도에 맞게 묶어 표현하고자 할 때 용이 프로퍼티와 메서드를 사용하여 구조화된 데이터와 기능을 가짐 하나의 새로운 사용자정의 데이터 타입을 만들어 주는 것 초기화를 정의하여 초기 상태(이니셜라이저) 설정 기능 추가를 위한 확장(extension)이 가능함 특정 기능을 위한 프로토콜(protocol) 사용이 가능함 서브스크립트(subscript) 사용하여 프로퍼티에 접근하도록 정의 가능.. 2021. 5. 6.
[Swift] flatMap & compactMap flatMap과 compactMap의 차이에 대해 기록해보겠습니다. 아래 그림과 같이, Swift 4.1부터는 원래 사용되었던 flatMap이 deprecated되고 새로운 flatMap과 compactMap으로 바뀝니다. 새롭게 바뀐 flatMap은 2차원 배열에서 1차원 배열로 flatten하게 만들어주는 역할로 쓰입니다. 즉, 내부의 컨텍스트를 같은 위상으로 만들어줍니다. var nums = [[1,2,3],[4,5],[6]] let flatten = nums.flatMap { $0 } // [1,2,3,4,5,6] let compacted = nums.compactMap { $0 } // [[1,2,3],[4,5],[6]] compactMap은 nil을 제거하고 옵셔널 바인딩이 필요할 때 사용합니.. 2021. 1. 23.
[Swift] 알고리즘에 필요한 Tip 정리 스위프트 알고리즘을 시작하면서 필요한 내용을 정리한 것을 올립니다! 시간 날 때마다 계속 추가할 예정..! 기본 입력 받기 (input의 타입은 String) var input = readLine()! Int형 한 개의 숫자 입력 받기 var num = Int(readLine()!)! "1 2 3 4 5"와 같은 공백 있는 숫자 입력 받기 // split - ReturnType: [SubString] var nums = readLine()!.split(separator: " ").map {Int($0)!} // components - ReturnType: [String] var nums = readLine()!.components(separatedBy: " "). map {Int($0)!} "12345".. 2021. 1. 22.