전체 글
-
Z-Index 그동안 iOS 개발을 하면서 Z-Index는 신경쓰지 않고 단순하게 autoLayout만 잡으면서 앱을 개발했는데 이번에는 Z-Index를 신경써서 개발을 해야했기 때문에 Z-Index와 친해지게 되었다. 각 뷰의 Z-Index를 바꾸는 방법들도 알게되었고 stackView는 arrangedSubviews를 사용해야한다는 것도 알게되었다. 다양한 제스처 iOS가 다양한 제스처를 지원해주는 줄 알고있었지만 이렇게까지 간단하고 많은 제스처를 지원해주는 줄은 몰랐다. 생각해보면 저번주의 애니메이션도 많은 것들이 있었으니 제스처가 많은 것이 이상하지는 않다. 맨날 사용하는 제스처만 사용하였는데 이번 기회에 다양한 제스처를 접해볼 수 있어서 좋았다. Gestures | Apple Developer ..
부스트캠프 웹·모바일 8기 멤버십 4주차 회고Z-Index 그동안 iOS 개발을 하면서 Z-Index는 신경쓰지 않고 단순하게 autoLayout만 잡으면서 앱을 개발했는데 이번에는 Z-Index를 신경써서 개발을 해야했기 때문에 Z-Index와 친해지게 되었다. 각 뷰의 Z-Index를 바꾸는 방법들도 알게되었고 stackView는 arrangedSubviews를 사용해야한다는 것도 알게되었다. 다양한 제스처 iOS가 다양한 제스처를 지원해주는 줄 알고있었지만 이렇게까지 간단하고 많은 제스처를 지원해주는 줄은 몰랐다. 생각해보면 저번주의 애니메이션도 많은 것들이 있었으니 제스처가 많은 것이 이상하지는 않다. 맨날 사용하는 제스처만 사용하였는데 이번 기회에 다양한 제스처를 접해볼 수 있어서 좋았다. Gestures | Apple Developer ..
2024.01.26 -
다형성 이번주도 정신없이 개발하다보니 한주가 끝나있었다. 뷰 프로그래밍, OOP, POP, 터치이벤트 등등 정말 많은 것들을 학습했다. 그 중 iOS에서 가장 활발하게 토론했던것은 프로토콜 VS 상속이였다. 마스터클래스에서 다형성에 대한 강의를 해주시기도 했고 이번주차의 미션 요구사항을 보면 다형성을 잘 구현해 놓고 확장에 대해 열려있어야 다음주차의 개선 요구사항을 쉽게 구현할 수 있을것이라는 생각이 들었기 때문이다. 상속 VS 프로토콜 캠퍼들과 정말 많은 이야기를 했다. 피어세션, 그룹세션 뿐만 아니라 마스터클래스에서도 질문을 올리면서 끊임 없이 각자의 생각들을 정리하고 발전시켜나갔다. 단순히 상속이 맞다, 프로토콜이 맞다 라는 이유로 토론하는 것이 아니라 어느 상황에 어떤 것을 써야 더 좋을까?? 이..
부스트캠프 웹·모바일 8기 멤버십 3주차 회고다형성 이번주도 정신없이 개발하다보니 한주가 끝나있었다. 뷰 프로그래밍, OOP, POP, 터치이벤트 등등 정말 많은 것들을 학습했다. 그 중 iOS에서 가장 활발하게 토론했던것은 프로토콜 VS 상속이였다. 마스터클래스에서 다형성에 대한 강의를 해주시기도 했고 이번주차의 미션 요구사항을 보면 다형성을 잘 구현해 놓고 확장에 대해 열려있어야 다음주차의 개선 요구사항을 쉽게 구현할 수 있을것이라는 생각이 들었기 때문이다. 상속 VS 프로토콜 캠퍼들과 정말 많은 이야기를 했다. 피어세션, 그룹세션 뿐만 아니라 마스터클래스에서도 질문을 올리면서 끊임 없이 각자의 생각들을 정리하고 발전시켜나갔다. 단순히 상속이 맞다, 프로토콜이 맞다 라는 이유로 토론하는 것이 아니라 어느 상황에 어떤 것을 써야 더 좋을까?? 이..
2024.01.26 -
애니메이션 미션 요구사항 중 애니메이션을 활용하는 요구사항이 있었다. 애니메이션을 한번도 써보지 못했는데 생각보다 어렵지 않았다. Swift가 간단한 애니메이션을 잘 지원해주었는데 확실히 애니메이션의 유무에 따라 사용자가 느끼는 앱의 완성도 차이가 많이 났다. 다른 캠퍼들이 완성한 애니메이션들을 보면서 많이 배웠다. 애니메이션을 잘 사용하려면 디자인적인 관점이 많이 필요할 것 같다. 테스트 코드 이번주 마스터 클래스 주제 중 테스트 코드에 대한 이야기가 있었다. 가장 기억에 남는것은 “테스트 하지 않아야 할것들을 테스트 하고 있지는 않은지 ??” 였다. 그 동안에는 테스트 코드를 작성하는 기준이 명확하지 않았는데 저 말을 들은 후에는 보다 쉽게 구분할 수 있었다. 또 리팩토링과 TDD에 대한 이야기를 해..
부스트캠프 웹·모바일 8기 멤버십 2주차 회고애니메이션 미션 요구사항 중 애니메이션을 활용하는 요구사항이 있었다. 애니메이션을 한번도 써보지 못했는데 생각보다 어렵지 않았다. Swift가 간단한 애니메이션을 잘 지원해주었는데 확실히 애니메이션의 유무에 따라 사용자가 느끼는 앱의 완성도 차이가 많이 났다. 다른 캠퍼들이 완성한 애니메이션들을 보면서 많이 배웠다. 애니메이션을 잘 사용하려면 디자인적인 관점이 많이 필요할 것 같다. 테스트 코드 이번주 마스터 클래스 주제 중 테스트 코드에 대한 이야기가 있었다. 가장 기억에 남는것은 “테스트 하지 않아야 할것들을 테스트 하고 있지는 않은지 ??” 였다. 그 동안에는 테스트 코드를 작성하는 기준이 명확하지 않았는데 저 말을 들은 후에는 보다 쉽게 구분할 수 있었다. 또 리팩토링과 TDD에 대한 이야기를 해..
2024.01.26 -
Concurrency(동시성) 프로그래밍 왜 동시성 프로그래밍인가 ?? 우리가 은행을 갔다고 해보자. 아래와 같이 은행원1에게만 고객이 줄을 선다고 하면 대기중인 고객은 자신의 앞에 있는 고객이 끝나기 전까지는 계속해서 기다려야 한다. 하지만 옆에 있는 은행원들 에게 고객을 분산시켜주면 아주 빠르게 고객들의 업무를 볼 수 있다. 즉 은행원1에게 쌓인 일을 분산시킨다면 고객들이 아무리 은행에 많이 와도 아주 빠르게 업무를 해결할 수 있는것이다. 즉 우리는 지금까지 작성한 코드들은 위와 같이 은행원1(메인스레드) 에게만 일을 맡겼던 것이다. func Task1() { ... } func Task2() { ... } func Task3() { ... } Task1() Task2() Task3() Task를 어..
[Swift] GCD, Async/Sync 알아보기 비동기(Asynchronous)란 말과 Concurrency(동시성)란 말이 같은 말인가?Concurrency(동시성) 프로그래밍 왜 동시성 프로그래밍인가 ?? 우리가 은행을 갔다고 해보자. 아래와 같이 은행원1에게만 고객이 줄을 선다고 하면 대기중인 고객은 자신의 앞에 있는 고객이 끝나기 전까지는 계속해서 기다려야 한다. 하지만 옆에 있는 은행원들 에게 고객을 분산시켜주면 아주 빠르게 고객들의 업무를 볼 수 있다. 즉 은행원1에게 쌓인 일을 분산시킨다면 고객들이 아무리 은행에 많이 와도 아주 빠르게 업무를 해결할 수 있는것이다. 즉 우리는 지금까지 작성한 코드들은 위와 같이 은행원1(메인스레드) 에게만 일을 맡겼던 것이다. func Task1() { ... } func Task2() { ... } func Task3() { ... } Task1() Task2() Task3() Task를 어..
2024.01.22 -
왜 RxSwift가 나오게 되었는지 또 RxSwift가 어떤 원리인지 알아봅시다.비동기 함수의 콜백지옥아래는 swift에서 json을 다운로드 하는 함수입니다.func downloadJson(_ url: String, _ completion: ((String?) -> Void)?) { DispatchQueue.global().async { let url = URL(string: url)! let data = try! Data(contentsOf: url) let json = String(data: data, encoding: .utf8) DispatchQueue.main.async { completion?(json) ..
[Swift] RxSwift, Combine 원리 이해하기왜 RxSwift가 나오게 되었는지 또 RxSwift가 어떤 원리인지 알아봅시다.비동기 함수의 콜백지옥아래는 swift에서 json을 다운로드 하는 함수입니다.func downloadJson(_ url: String, _ completion: ((String?) -> Void)?) { DispatchQueue.global().async { let url = URL(string: url)! let data = try! Data(contentsOf: url) let json = String(data: data, encoding: .utf8) DispatchQueue.main.async { completion?(json) ..
2024.01.20 -
for문으로 풀면 시간초과가 걸려서 stack으로 풀었습니다. 문제에선 오른쪽에서 왼쪽으로 진행되어서 입력받는 역순으로 풀었었는데 반대로 생각해보면 입력받았을 때 왼쪽에 수신을 받는 친구가 없다면 입력받은 탑이 현재 가장 높은 탑이되어버리니 다음 입력에서는 현재 입력받은 탑을 기준으로 왼쪽에 있는 탑들은 필요가 없어지는 것입니다 import Foundation let n = Int(readLine()!)! let arr = readLine()!.components(separatedBy: " ").compactMap { Int($0) } var stack: [(height: Int, index: Int)] = [(100000001, 0)] for index in 0..
[Swift] 2493번 : 탑for문으로 풀면 시간초과가 걸려서 stack으로 풀었습니다. 문제에선 오른쪽에서 왼쪽으로 진행되어서 입력받는 역순으로 풀었었는데 반대로 생각해보면 입력받았을 때 왼쪽에 수신을 받는 친구가 없다면 입력받은 탑이 현재 가장 높은 탑이되어버리니 다음 입력에서는 현재 입력받은 탑을 기준으로 왼쪽에 있는 탑들은 필요가 없어지는 것입니다 import Foundation let n = Int(readLine()!)! let arr = readLine()!.components(separatedBy: " ").compactMap { Int($0) } var stack: [(height: Int, index: Int)] = [(100000001, 0)] for index in 0..
2024.01.12 -
import Foundation let k = Int(readLine()!)! var stack: [Int] = [] for _ in 0..
[Swift] 10773번 : 제로import Foundation let k = Int(readLine()!)! var stack: [Int] = [] for _ in 0..
2024.01.12 -
정규 표현식 규칙 숫자 [0-9] \d 숫자가 아닌 문자 \D 문자(숫자, 글자 모두 포함) \w 한글 [가-힣] : 한글 모두 영어 [A-Z] : 대문자 [a-z] : 소문자 [A-Za-z] : 대소문자 모두 문자매칭 : 앞의 문자가 0번 이상 반복 : 앞의 문자가 1번 이상 반복 ? : 0 or 1개의 문자 매칭 . : 1개의 문자 매칭 시작과 끝 ^* : *로 시작 *$ : *로 끝난다 공백 \r\n : 줄바꿈 \s : 공백(space) \t : tab \f : form feed 특수문자 [!@#$%^&*()-=+] = 특수문자 특수기호 swift에서는 특수기호 앞에 **\**가 붙어야한다 \. == . \\ == \ 조건문 | : or 정규표현식 예시 [0-9]* : 숫자가 1개 이상 0, 01,..
[Swift] 정규표현식정규 표현식 규칙 숫자 [0-9] \d 숫자가 아닌 문자 \D 문자(숫자, 글자 모두 포함) \w 한글 [가-힣] : 한글 모두 영어 [A-Z] : 대문자 [a-z] : 소문자 [A-Za-z] : 대소문자 모두 문자매칭 : 앞의 문자가 0번 이상 반복 : 앞의 문자가 1번 이상 반복 ? : 0 or 1개의 문자 매칭 . : 1개의 문자 매칭 시작과 끝 ^* : *로 시작 *$ : *로 끝난다 공백 \r\n : 줄바꿈 \s : 공백(space) \t : tab \f : form feed 특수문자 [!@#$%^&*()-=+] = 특수문자 특수기호 swift에서는 특수기호 앞에 **\**가 붙어야한다 \. == . \\ == \ 조건문 | : or 정규표현식 예시 [0-9]* : 숫자가 1개 이상 0, 01,..
2024.01.12