[Swift] mutating 키워드란? (값 타입 인스턴스에서의 값 수정)
·
[Programming Language]/[Swift]
1. 값 타입 인스턴스 : 구조체(struct), 열거형(enum)Swift에서 구조체와 열거형은 값 타입이고, 클래스는 참조 타입이다. 1-1. class : 참조 타입참조 타입의 클래스의 인스턴스가 있을 때 값을 수정하는 메서드는 다른 프로그래밍 언어에서 했던 것처럼 하면 된다.class Account { private var balance: Int = 0 func getBalance() { print("잔고: \(balance)") } func deposit(_ amount: Int) { balance += amount } func withdraw(_ amount: Int) { balance -= amount..
[Swift] Queue 자료 구조 (removeFirst를 popLast로 대체하기)
·
[Programming Language]/[Swift]
[머릿말]Swift를 사용하여 Programmers에서 여러 코딩테스트를 풀고 있다. 어느덧 5천대 순위가 되었고 이전에는 Queue를 사용하여 문제를 풀어도 통과가 되었지만 이제는 시간 초과 오류를 가끔씩 접하곤 한다. 이는 removeFirst() 메서드의 시간 복잡도가 O(n)이기 때문인데, 이를 시간 복잡도가 O(1)인 popLast() 메서드로 대체하면 실행 시간을 훨씬 단축시킬 수 있다.1. 기존에 사용했던 QueuePython에는 Queue가 존재해서 좋았지만 Swift에는 존재하지 않는다. 따라서 배열을 사용하여 직접 Queue를 만들어 사용해야 한다. 기존에 문제를 풀 때 사용했던 Queue는 아래와 같이 그냥 배열 그 자체였다.// 기본 Queuevar queue: [Int] = []/..
[Swift] 메서드(Methods) [인스턴스•타입 메서드, mutating, self]
·
[Programming Language]/[Swift]
1. 인스턴스(Instance) 메서드, 타입(Type) 메서드Swift에서 메서드는 인스턴스 메서드와 타입 메서드로 나눠볼 수 있다. 인스턴스 메서드는 생성된 각각의 인스턴스에 대한 메서드라고 보면 되고 타입 메서드는 구조체나 클래스와 같은 타입 자체에 대한 메서드라고 보면 된다. 1-1. 인스턴스 메서드인스턴스 메서드란 구조체(Struct), 클래스(Class), 열거형(enum) 내에 선언되는 메서드를 말한다. class Person { var name: String var born: Int init(name: String, born: Int) { self.name = name self.born = born } func printAg..
[Swift] 프로퍼티 관찰자(Property Observers)
·
[Programming Language]/[Swift]
1. 프로퍼티 관찰자프로퍼티 관찰자란 프로퍼티의 값이 변경될 때 호출되는 것으로, 새로운 값이 기존 값과 동일하더라도 호출된다. 프로퍼티 관찰자에는 2가지 종류가 있다.willSet : 새로운 값으로 변경되기 전에 호출didSet : 새로운 값으로 변경되고 나서 호출1-1. willSetclass Asset { var totalMoney: Int = 0 { willSet(newTotalMoney) { print("새로운 잔액 : \(newTotalMoney)만원") } }}let asset = Asset()asset.totalMoney = 100 // 새로운 잔액 : 100만원위 예제에서 willSet은 asset.totalMoney = 100 부분..
[Swift] 프로퍼티(Property) [Stored •Computed, getter, setter, read-only]
·
[Programming Language]/[Swift]
1. 저장된 프로퍼티(Stored Property) vs 계산된 프로퍼티(Computed Property)프로퍼티는 저장하는 값에 따라 저장된 프로퍼티와 계산된 프로퍼티로 나뉜다. 1-1. 저장된 프로퍼티(Stored Property)먼저 저장된 프로퍼티란 우리가 다른 언어에서도 흔히 사용했던 멤버 변수의 개념으로, 다른 변수에 관계없이 스스로의 값을 갖는 변수 또는 상수를 말한다.struct Person { var name: String let age: Int}var p1 = Person(name: "John", age: 20)Person 구조체는 저장된 프로퍼티 변수(Variable Stored Property)인 name과 저장된 프로퍼티 상수(Constant Stored Property..
[Swift] 구조체(Structure) vs 클래스(Class) 차이점
·
[Programming Language]/[Swift]
1. 구조체(Structure)와 클래스(Class)의 공통점구조체와 클래스는 비슷하면서도 다르다. 둘다 아래와 같은 기능을 공통적으로 할 수 있다.Property(프로퍼티) 정의Method(메서드) 정의Subscript(서브스크립트) 정의init(초기화 함수) 정의extension(확장)Protocol(프로토콜) 준수 2. 구조체(Structure)와 클래스(Class)의 차이점2-1. 기본 초기화 함수구조체와 클래스 모두 프로퍼티의 기본값을 정의할 수 있다.struct PersonStructure { var name: String = "" var age: Int = 0}class PersonClass { var name: String = "" var age: Int = 0} 그러..
[Swift] ~= 연산자 : 범위 확인 연산자, 패턴 매치 연산자
·
[Programming Language]/[Swift]
[머릿말]프로그래머스에서 문제를 풀고 다른 사람의 풀이를 보던 중 새로운 연산자를 보게 되었다. 파이썬에서 바다 코끼리 연산자(:=)를 처음 보았을 때 느꼈던 기분이었다😀1. ~=(_:_:) 연산자  [범위 확인 연산자]공식 문서에서의 내용은 다음과 같다."값이 범위에 포함되는지를 나타내는 Boolean 타입 값을 반환한다." 범위에 값이 포함되어 있는지, 즉 contains 메서드와 같은 기능을 하는 연산자라고 보면 된다. 사용 방법은 아래 예제와 같다.print(1...10 ~= 5) // trueprint(1...10 ~= 11) // falseif 1..value가 pattern에 포함되면 true, 그렇지 않으면 false가 반환된다.  2. ~=(_:_:) 연산자  [패턴 매치 연산자]이 ..
[Swift] String.allSatisfy(_:) 함수란?
·
[Programming Language]/[Swift]
[머릿말]프로그래머스 문제를 풀던 중 처음 보는 함수를 발견했다. 함수 이름만 봐도 대충 어떤 역할을 하는지 알 것 같지만 까먹지 않기 위해 따로 정리해놓으려 한다.⦿ 공식 문서공식 문서에서의 설명은 다음과 같다.시퀀스의 모든 요소가 주어진 조건을 만족하는지 여부를 나타내는 부울 값을 반환한다. 함수의 반환 값은 Bool 타입이다. 모든 요소가 조건을 만족하면 true, 그렇지 않으면 false를 반환한다. 내가 이 함수를 접하게 된 것은 주어진 자료형이 String인 경우였는데 공식 문서를 보다 보니 배열(Array)이나 딕셔너리(Dictionary) 등에서도 사용이 가능한 것 같다.  ⦿ 사용 예시1) 문자열인 경우 - Stringvar text: String = "0123456789"print(te..
[Swift] SubSequence(ArraySlice)를 그냥 사용하는 것과 저장하고 사용하는 것의 속도 차이가 발생하는 이유는?
·
[Programming Language]/[Swift]
[머릿말]프로그래머스에서 햄버거 만들기 문제를 풀며 경험한 일이다. 분명 동일한 알고리즘으로 작성된 코드인데 suffix(_:) 함수의 결과를 저장하지 않고 사용하면 시간 초과가 발생하고, 저장하고 사용하면 통과가 되는 것이다..! 단순히 저장의 유무에 따라 결과가 달라지는 것이 궁금하여 관련 이유를 찾아보게 되었고 알게 된 내용을 정리하고자 한다.⦿ 코드import Foundationfunc solution(_ ingredient: [Int]) -> Int { var stack: [Int] = [] var count = 0 // 재료 배열을 하나씩 탐색 for item in ingredient { stack.append(item) //..
[Swift] ASCII Code 변환 방법(숫자 <-> 문자 변환 방법)
·
[Programming Language]/[Swift]
[머릿말]Python에서는 아스키 코드를 문자로 변환하거나 문자를 아스키 코드로 변환하는 것이 chr( ), ord( ) 함수만 사용하면 됐기에 매우 간단했었다. Swift에서 변환하는 방법은 아직 익숙하지 않음에 따라 계속 찾아보게 될 것 같아 따로 정리를 하게 되었다.1. 문자 -> ASCII Code(숫자) 변환1-1. (문자).asciiValuevar a: Character = "a"print(a.asciiValue) // Optional(97)print(a.asciiValue!) // 97String 타입에는 사용할 수 없고 오직 Character 타입에만 사용할 수 있다.특정 문자에 대한 ASCII Code가 없을 수도 있으므로 반환 타입은 Optional 이다.Optional을 Unwrap..