소개
iOS개발자 앨런입니다.
https://www.youtube.com/@allen_ios
제가 공부하면서 겪었던 시행착오를 쉽게 풀어내어
지식을 공유할 수있는 개발자가 되고싶습니다.
쉬운 주제로 빠른 시간 안에 겉핥기 식으로 쉽게만 가르치는 강의를 만드는 것에는 관심이 없습니다.
그런 강의는 얼마든지 빠르게 찍어내듯 만들 수 있겠지만, 결국 "좋은 개발자로 성장"하는 것은 그만큼 이론적인 기반의 밑거름이 탄탄해야 한다고 믿고 있기 때문입니다.
쉬운 강의보다는, 좋은 개발자(끝임없이 성장할 수 있는 개발자)가 되기 위해
반드시 알아야 하는 어려운 내용까지를 최대한 쉽게, 그리고 직관적으로 알려드리는 것.
그래서 제가 아닌 여러분 스스로 고민/생각할 수 있는 밑거름을 만들어 드리는 것을 저의 강의 목표로 삼고 있습니다.
저 스스로도 내일은 더 좋은 개발자가 되자는 모토를 가지고 있는 만큼
제가 고민 했던 내용들을 깊이있게 전달 드리고 싶습니다.
👇🏻문의는 아래의 이메일로 주시면 됩니다.
we.love.code.allen@gmail.com
언어: Swift(스위프트), Python, Java, C#
강의
전체 6수강평
- 앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정)
- 앨런 Swift Concurrency for Swift 6 (Part-1)
- 앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정)
- 앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정)
- 앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정)
게시글
질문&답변
2024.10.29
warning 뜸
네네 미래 님!그런 에러 메세지가 뜨는게 정상입니다 ! 잘못 구현되어 있기 때문에(?) (즉, 쓰레드 세이프하지 않게 구현되어 있기 때문에) 그 것을 아래의 changeNameSafelyPrintRightly() 코드로 고치면 되는 내용이기 때문에, 에러 메세지가 뜰 수 있어요. 궁금하신게 있으시면 또 언제든지 질문 주세요 ! 고맙습니다 :)
- 0
- 1
- 26
질문&답변
2024.10.23
강의자료 관련 질문
안녕하세요 Hamp 님.죄송하지만... 강의 자료만 필요하고, 교재는 필요하지 않다는 말씀이 무슨 말인지 제가 잘 이해하지 못했어요. ㅠ강의자료(코드자료)는 있으면 좋지만, 굳이 교재(강의 요약정리PDF)는 필요하지 않다는 말씀이신가요? 저도 아직 Part-2를 어떻게 해야할지 여전히 고민중이긴 하지만 ㅠㅠ, 현재로써는 교재(강의 요약정리 PDF) 파일은 따로 교재로 판매하고, Part-2 수업에서는 코드 자료만 제공할 생각이긴 합니다.(Part-2 강의를 구매하시면, 반드시 교재 자료 (PDF정리자료)는 구매할 필요가 없긴 합니다. 코드 자료는 드리니까요.) 궁금하신 부분이 해결 되셨는지 모르겠네요.. 🥲 고맙습니다. :)
- 0
- 2
- 82
질문&답변
2024.10.21
Task.sleep Non-blocking 추가 질문
안녕하세요. ekth020216 님.약간 내용을 다른 관점에서 잘 못 생각하신 것 같은데, 쓰레드가 비어있는 동안 다른 일처리를 우리가 직접적으로 시키는 것은 불가능해요. 예를 들어 2번 쓰레드에서 try await Task.sleep(for: .seconds(5)) 함수를 통해 5초동안 쓰레드를 양보한다고 말씀드렸는데, 해당 2번 쓰레드는 비어있는 동안 시스템(운영체제)이 알아서 비어있는 동안의 쓰레드를 사용한다는 의미이기 때문에.. 직접적으로 비어있는 동안 어떤 일처리를 시키겠다?는 이런식의 예제는 당연히 불가능합니다.쓰레드를 양보해서, 운영체제에게 맡겼으니.. (다른 처리해야할 작업들이 있다면) 운영체제가 알아서 처리한다는 게 핵심이예요. 그래서 큰 의미는 없지만, 예시로 한번 말씀드려보면,func performAsyncWork() async { print("작업 시작") Task { // 작업 생성 try await Task.sleep(for: .seconds(5)) // 5초 sleep print("Sleep 작업 완료 후 실행됨") } for i in 1...100000 { Task { // 또다른 작업 100,000개 생성 ⭐️ print("비동기 작업 중: \(i)") } } print("작업 종료") } Task { await performAsyncWork() }이런 코드가 있다고 치면, performAsyncWork라는 비동기 함수를 실행하면, 이 비동기 함수 안에서 작업을 생성하고 (제가 “작업 생성”이라고 주석해 놓은 부분) 5초동안 멈췄다가 그 다음 중 코드인 “Sleep 작업 완료 후 실행됨”을 출력할꺼예요. 그런데 작업(Task)을 생성하는 하단에 보시면, 반복문이 있는데, 반복문 내부에서 10만번의 비동기 작업을 또 생성하면서 출력을 합니다. (반복문 안에서 비동기 작업을 생성한다는 것은.. 뒤에 강의에서도 자세하게 또 말씀드리지만, 병렬적인 작업의 생성이죠.) 따라서 Task.sleep은 Non-blocking방식으로 실행된다고 말씀드렸는데, 예를 들어 만약에 2번 쓰레드 였다고 가정하면, (5초동안) 2번쓰레드를 양보한 동안에.. (2번 쓰레드는 지금 당장 할 일이 없으니) 아래 있는 반복문의 10만개의 여러 작업이니.. 반복문의 코드들이 2번 쓰레드를 사용할 수 있다는 것이죠. 결국, 이 Task(비동기 작업)를 생성하고 그 내부에서 동작하는 Non-blocking 방식은.. GCD와 마찬가지로 우리가 직접적으로 쓰레드를 사용하는 방식이 아니고, 추상화 되어 있어서.. 우리는 내부적으로 한차원 높은 관점에서 비동기적인 일처리를 Task로 보내면, Task내부에서 알아서 쓰레드를 양보하기도 하고, 사용하기도 하면서 운영체제와 알아서 소통하면서 처리해준다는 것이예요. 잘 생각해보시고, 이해가 안되시면 다시 질문 주세요 ! 고맙습니다. :)
- 0
- 2
- 86
질문&답변
2024.10.18
(기초-3) 가위바위보 앱 만들기 / 코드 설정하기 - 2 (기초 앱 12강)
네 안녕하세요! 민경님!아, 리셋버튼을 누르셨을때 viewDidLoad() 자체를 호출하시면 안됩니다.왜냐면, 내부적인 메커니즘 때문에.. 보시면 아시겠지만.. 또 상위 클래스의 super.viewDidLoad( ) 도 호출하고 있죠? (내부적으로 viewDidLoad의 경우.. 화면에 진입했을때 앱 내부에서 자동으로 알아서 한번만 호출되게 되어있고, 직접 호출하는 것은 (동작할지라도) 금지되어 있습니다.따라서, 아래처럼 셋팅 관련 코드들을 묶어서 메서드를 만들어 주시고,func reset() { mainLabel.text = "선택하세요" comImageView.image = UIImage(named: "ready.png") myImageView.image = UIImage(named: "ready.png") comLabel.text = "준비" myLabel.text = "준비" }viewDidLoad에서도 호출되게 만들고..override func viewDidLoad() { super.viewDidLoad() reset() }RESET 버튼을 눌렀을 때도 reset( )을 따로 호출해주는 것이 맞습니다. :) 고맙습니다. :)
- 0
- 1
- 36
질문&답변
2024.09.20
(기초-3)가위바위보 앱 만들기 - 기초 앱 강의 12강 질문입니다!
아, 네 HanMa_Man 님.아마, UIButton 스타일 때문에 문제가 발생하실꺼예요! (엑스코드 기본 설정이 바뀌어서요. 아마 이 내용을 제가 자주하는 질문에 넣어놓긴 했어요.)스토리보드에서 UIButton 스타일을 Default로 바꾸시면.. currentTitle 속성을 잘 가지고 오실 수 있으실 꺼예요. 버튼 스타일의 문제로 보여요.혹시 안되시면 다시 남겨주세요. 감사합니다 :)
- 0
- 2
- 44