전체 글 83

[Swift] split과 components의 차이점

[머릿말]Swift를 사용하여 코딩 테스트를 준비하던 중 입력을 받는 과정에서 split과 components를 사용하는 것을 보았다. 두 가지 모두 설정한 문자를 기준으로 입력받은 문자열을 구분한다는 점은 같아 보이는데 어떤 차이점이 있는지 궁금하여 찾아보게되었다.1. split(separator:maxSplits:ommittingEmptySubsequences:)split에 대한 Apple Developer Document의 내용은 아래와 같다.❗️func split(separator: Character, maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true) -> [Substring]func split( separator: Self..

[Swift] 반복문(for~in, stride, while, repeat~while), 조건문(if, if~else if ~else, defer, switch, fallthrough, binding, where, guard), break, continue, defer, 라벨(label)

1. 반복문Swift에서 반복문은 for ~ in, while, repeat ~ while이 있다.1-1. for ~ in배열, 집합, 딕셔너리과 같은 콜렉션의 모든 요소에 접근하거나 문자열의 각 문자에 대한 접근, 범위 내 모든 값의 접근이 필요할 때 사용하는 반복문이다.// 1. 배열for i in [1, 2, 3, 4] { print(i, terminator: " ") // 1 2 3 4}print()// 2. 집합let mySet: Set = ["A", "B", "C"]for i in mySet { print(i, terminator: " ") // A B C}print()// 3. 딕셔너리let myDict = ["name": "Semin", "location": "Won-Ju"]fo..

[Swift] 딕셔너리(Dictionary), 선언, count, isEmpty, 추가, 수정, 삭제, for ~ in, keys, values

1. 딕셔너리 (Dictionary)딕셔너리(Dictionary)는 집합과 동일하게 순서를 갖지 않는 콜렉션이다. 이는 키(key), 값(value) 쌍으로 이뤄지고 딕셔너리 내에 키 값은 고유하다.1-1. 딕셔너리 선언(생성)var myDict1 = [타입: 타입]( )var myDict2 = [key1: value1, key2: value2, key3: value3...]var myDict3: Dictionary = [:]var myDict4: [타입: 타입] = [:]var myDict5 = Dictionary( )let myDict1 = [String: String]()let myDict2 = ["name": "Semin", "location": "Won-Ju"]let myDict3: Dictio..

[Swift] 집합(Set), 집합 선언, count, isEmpty, 추가(insert), 삭제(remove), contain, for ~ in, 집합 연산, isSuperset, isSubset, isDisjoint

1. 집합(Set)집합이란 배열과는 달리 순서를 갖지 않는 콜렉션이다. 이러한 특성으로 인해 집합에는 중복되는 값을 저장할 수 없다.1-1. 집합 선언let set1: Set = []print(type(of: set1), set1) // Set []let set2 = Set()print(type(of: set2), set2) // Set []let set3: Set = [1, 2, 3, 3] // -> 3은 하나만 남고 나머지는 삭제됨print(type(of: set3), set3) // Set [3, 2, 1]집합은 위와 같은 방법을 사용하여 선언할 수 있다. set3의 방법을 가장 많이 사용하며, set3 집합에 3이 2개 들어가있는걸 볼 수 있는데 집합은 중복되는 값을 가질 수 없으므로 하나는 삭제..

[Swift] 배열(Array), 배열 선언 방법, 추가, 수정, 삭제, count, isEmpty, for ~ in

[머릿말]Swift에도 배열이 존재하는데 다른 프로그래밍 언어에서 보았던 것과 전반적으로 비슷비슷 한 것 같다.1. 배열(Array)  배열은 특정 타입의 값을 순서대로 저장한다. 즉, 배열에 저장된 각 값은 각각의 Index 값을 갖는다. 그러므로 중복되는 값도 얼마든지 저장할 수 있다. 1-1. 배열 선언 방법  배열은 다양한 방법을 사용하여 선언할 수 있다.let arr1 = [Int]() // 가장 많이 사용되는 형식let arr2: [Int] = []let arr3: Array = []let arr4 = [1, 2, 3, 4, 5]위 방법을 사용하여 배열을 선언할 수 있고, arr1을 선언하는 방법이 제일 많이 사용되는 방법이다. arr3은 거의 사용되지 않는 방법이다. Swift는 type-..

[Swift] 문자열(Strings), 문자열 내에 변수 출력 방법, 여러줄 문자열, 문자열 결합

1. 문자열 (Strings)  문자열이란 큰따옴표("")로 둘러쌓인 문자의 연속으로 "Hello, Swift!" 같은 것들을 뜻한다. Swift에서는 큰 따옴표만 사용할 수 있고 작은 따옴표를 사용하면 오류가 발생한다.let str = "Hello Swift!" // 'Hello Swift!'처럼 작은 따옴표를 사용하면 오류 발생 문자열은 String()를 사용해서도 만들 수 있다.let str = String("Hello, Swift!") 1-1. 문자열 결합  Swift도 Python과 동일하게 + 연산자를 사용하여 문자열을 결합할 수 있다. 또한 += 연산자 역시도 당연히 사용할 수 있다.var str1 = "Hello"var str2 = ", Swift!"print(str1 + str2) // ..

[Swift] assert와 precondition의 차이점

[머릿말]이제 본격적으로 Swift 공부를 시작하였다. 전체 요약 부분을 보다가 assert와 precondition을 보게 되었다. 이 둘은 조건을 확인해서 조건이 거짓이라면 해당 부분에서 오류 메시지를 띄우고 프로그램을 종료시키는 역할을 한다. 목적 또는 역할이 분명 차이가 있으므로 각각이 존재하는 것일텐데 어떤 점이 다른 건지 궁금해졌다. 그래서 관련 내용을 찾아보았고 이해한 내용을 기록하려 한다.1. Assert? Precondition?1-1. Assert  Assert(역설)은 실행 중 발생하는 조건의 결과에 따른 진행 방향을 설정하는 것이다. 조건이 참이라면 코드는 계속 실행되지만 조건이 거짓이라면 프로그램은 종료되고 해당 줄 번호와 함께 미리 정의해둔 오류 메시지가 콘솔에 출력된다. 형태는..

[Swift] 연산자(대입, 산술, 복합 대입, 비교, 삼항, Nil 결합, 범위, 논리)

[머릿말]  새로운 언어를 공부할 때마다 느끼는 것이지만 프로그래밍 언어는 대부분 비슷한 것 같다. 구조, 연산자 등 공부를 하면 할수록 비슷한 부분을 많이 느낀다. 이러한 이유 때문인지 이제 새로운 언어를 공부해야 할 일이 생겨도 대학교 1학년 때처럼 두렵지는 않은 것 같다..ㅎ1. 산술 연산자 (Arithmetic Operators)Swift는 type-safe 언어이기 때문에 같은 자료형에 대해서만 연산이 가능하다. 즉, Int형과 Double형의 변수는 서로 연산할 수 없다는 것이다. 그러나 변수로 저장되지 않은 수 자체에 대해서는 연산이 가능하다.print(3 + 0.5)let v1: Int = 3let v2: Double = 0.5print(v1 + v2) // binary operator '..

[Swift] iOS 개발자로의 첫 걸음

고학년이 될수록 '뭘 하는 것이 내가 가장 재밌게 할 수 있을까' 라는 고민을 정말 자주 했다. 이것저것 조금씩 발은 담가보았지만 딥하게 파고 들어본 적은 딱히 없는 것 같고 한 학기가 끝나버리면 모든 것이 다 리셋되는 것 같았다. 마냥 "컴퓨터공학과는 취직이 잘 되겠지" 라고 생각하며 안일하게 살아갈 순 없는 노릇이 아닌가. 엑셀 하나만 잘하더라도 굶어 죽을 일은 없다는 말이 있는 것처럼 나도 일단 뭐 하나만큼은 기가 막히게 잘하는 수준에 도달하고 싶다는 생각이 들었다.   지금까지 학교를 다니며 경험한 것들 중 내가 가장 재미를 느꼈거나 딥하게 다뤄보고 싶은 것이 있었는지 생각해보는 시간을 가져보기로 했다. 여러 경험을 되짚어보며 생각하던 중 23년 2학기에 모바일 프로그래밍을 들으며 안드로이드 공유..

[Unity] 장애물과 충돌한 캐릭터 밀려나게(튕겨나가게) 하는 방법

[개요]  상자를 밟으며 점프하던 캐릭터가 장애물과 충돌하게 되면 튕겨나가게끔 구현해야 한다. 이때 장애물의 오른쪽에 충돌하면 캐릭터도 오른쪽으로 튕겨나가고 왼쪽에 충돌하면 왼쪽으로 튕겨나가도록 설정하는 것이 일반적인 경우이다.[해결 방법]  1. 장애물에 태그를 설정해야 하는데 나는 `Obstacle`이라는 태그를 만들어서 설정해주었다. 그리고 `Collider2D`를 적용해줘야 하는데 내가 적용할 장애물은 톱니 모양이라 `Circle Collider 2D`를 적용해주었다.   2. 캐릭터에 적용할 `Player.cs` 스크립트에 `OnCollisionEnter2D` 메서드를 구현해준다. `dirX`는 캐릭터의 x축 방향과 충돌한 장애물의 x축 방향을 비교해서 왼쪽에서 충돌하면 왼쪽으로 튕겨나가게 하고..