소개
iOS개발자 앨런입니다.
https://www.youtube.com/@allen_ios
제가 공부하면서 겪었던 시행착오를 쉽게 풀어내어
지식을 공유할 수있는 개발자가 되고싶습니다.
쉬운 주제로 빠른 시간 안에 겉핥기 식으로 쉽게만 가르치는 강의를 만드는 것에는 관심이 없습니다.
그런 강의는 얼마든지 빠르게 찍어내듯 만들 수 있겠지만, 결국 "좋은 개발자로 성장"하는 것은 그만큼 이론적인 기반의 밑거름이 탄탄해야 한다고 믿고 있기 때문입니다.
쉬운 강의보다는, 좋은 개발자(끝임없이 성장할 수 있는 개발자)가 되기 위해
반드시 알아야 하는 어려운 내용까지를 최대한 쉽게, 그리고 직관적으로 알려드리는 것.
그래서 제가 아닌 여러분 스스로 고민/생각할 수 있는 밑거름을 만들어 드리는 것을 저의 강의 목표로 삼고 있습니다.
저 스스로도 내일은 더 좋은 개발자가 되자는 모토를 가지고 있는 만큼
제가 고민 했던 내용들을 깊이있게 전달 드리고 싶습니다.
👇🏻문의는 아래의 이메일로 주시면 됩니다.
we.love.code.allen@gmail.com
언어: Swift(스위프트), Python, Java, C#
강의
전체5수강평
게시글
질문&답변
2024.03.28
layoutSubviews와 layoutIfneeded() 메서드 차이
네 듀듀 님, 직접 호출하면 안된다는 의미는.. 아래 처럼, layoutSubViews함수를 직접 실행(호출) 시키면 안된다 는 의미예요. self.layoutSubViews() // 함수 호출 당연히, 아래처럼 함수 내부의 원하는 구현 내용은, 함수 내부에서 구현하셔야 하고.. override func layoutSubviews() { super.layoutSubviews() // 구현 내용 넣기 } 아래처럼 layoutIfneeded()를 호출(실행)만 하시면, self.view.layoutIfneeded() 내부적인 메커니즘에 의해서 self.layoutSubViews() 이걸 자동으로 호출시킨다는 의미 입니다. 그러면? 우리가 layoutSubViews() 함수에서 구현했던 내용이 자동으로 실행되겠죠? 감사합니다. :)
- 0
- 2
- 26
질문&답변
2024.03.25
테이블뷰(커스텀델리게이트) - 2 (MVVM으로 바꾸기) (업데이트-13강) 질문있습니다.
안녕하세요 훈 님! 앱의 아키텍처에는 정답이 없습니다. (저는 학습하는 과정에서의 예시 코드를 가지고 최대한 쉽게 설명드리기 위한 예제를 만들었을 뿐이라고 보시면 될 것 같아요.) 나중에 더 여러가지 MVP, MVVM-C (MVVM+코디네이터 패턴 적용), MVI 등등... 많이 경험해 보시면 제가 강의에서 다루고 있는 코드에도 당연히 훨씬 더 개선할 수 있는 점들이 많습니다. :) (제 코드는.. 단계별로 학습자들의 학습을 위한 커리큘럼을 만들었을 뿐이지, 일반적으로 실무에서는 사용하지 않는 방법으로 구현한 부분들 (그냥 해당 아키텍처를 처음배운다고 생각하고) 최대한 설명을 쉽게 드리기 위한 코드의 예시로 보여드리는 것도 많습니다.) 저는 여기서는 한/두페이지 정도에서 참고하려는 별도 관리 객체를 만드니.. 굳이 싱글톤 패턴이 필요 없다고 생각한 것 뿐이고.. 만약에 실무(실제) 정말 여러 페이지에서 해당 객체를 참조해야 한다면.. 저도 싱글톤으로 만들면 편할 것이라고 생각돼요! 훈 님께서 싱글톤이 더 관리하기 편하다고 생각하시면 그렇게 구현하시면 된다고 생각합니다. 싱글톤으로 구현하면, 어디서든 접근하기 쉬워지니 코드를 짜는 것도 / 관리하기 쉬워지는 반면, (제 개인적으로는) 학습자들에게는 그리 좋은 방법은 아니라고 생각되는 부분들도 있습니다. (객체를 참조로 전달하는 그런 구조를 짜는 연습을 굳이 안하게 될테니까요^^;) 아키텍처에는 정답이 없고, 제가 정답을 제시해드릴 수 있는 부분도 아니라고 생각합니다.^^; 제 코드도 더 좋은 코드로 개선해보시는 건 당연히 훈 님의 숙제라고 생각합니다. :) 감사합니다 !
- 0
- 1
- 41
질문&답변
2024.03.12
MVVM 아키텍처 설명 1 (MVC부터 다시 설명) (업데이트-3강) 강의 질문있습니다.
네 훈 님. MVC에서 뷰와 컨트롤러를 분리하셨다면, 가급적이면 뷰는 뷰와 관련된 처리만 하도록 구현하고, 이벤트는 뷰 컨트롤러에서 다루도록 처리해야겠죠. (뷰컨트롤러가 중재자의 역할을 하는 것이니까요.) (뷰의 프로퍼티에 연결된 함수를 뺀다는게..) 구체적으로 어떤 고민을 하고 계신지 잘 모르겠으나, (예시를 들어주시면 더 좋았긴 하겠지만) 일반적으로는 뷰에서 일어난 액션을 뷰컨트롤러로 전달하면 되겠죠. (직접연결, 델리게이트, 노티피케이션, 클로저 등... 전달할 수 있는 방법도 많이 있고요.) 간단한 예시로 보자면.. 뷰에 올려져 있는 버튼의 addTarget을 (뷰컨트롤러 코드에서) 직접 연결할 수도 있겠죠. 뷰.button.addTarget(self, action: #selector(동작할함수), for: .touchUpInside) 기본적으로는 위에 말씀드린 대로 뷰컨트롤러에서 처리하면 된다고 생각이 드나, 솔직히.. 학습하시는 입장에서 두 방법으로 다 구현해보시는 것이 좋다고 생각이 들긴 합니다. 직접 구현된 내용을 눈으로 보시고 장/단점을 비교해서 알고 있다면.. (다음에 어떠한 상황, 코드에서든) 본인의 관점을 제시할 수 있으시지 않을까 합니다. (아키텍처/디자인 패턴 이란 건 무조건적인 정답이 있는게 아니라, 조금 더 구조화 시킬 수 있는 일반적인 해결책에 가까운 것이니까요.) 감사합니다. :)
- 0
- 1
- 76
질문&답변
2024.03.12
활용-10 앱 / 클로저 방식으로 셀에서 일어난 동작의 전달 (활용 앱85강) 질문있습니다.
네 hoon 님! 다음 코드는 테이블뷰의 델리게이트 메서드 중에 자주 사용하는 didSelectRowAt 메서드 입니다. func tableView( _ tableView: UITableView, didSelectRowAt indexPath: IndexPath ) 테이블뷰의 셀을 터치했을때, 일반적으로 다음 디테일화면 등으로 넘어가는 동작을 구현하려고 할때, 이 델리게이트 메서드를 구현하죠. 첫번째 파라미터가 tableView: UITableView 로 구현되어 있는데, (일반적으로 tableView 파라미터를 잘 사용하는 일이 많이는 없는데) 왜 함수 설계를 이렇게 해놨을까요? (지금 주신 질문하고, 아주 비슷한 컨셉의 질문이라고 생각합니다.) 결론적으로 말씀하신대로 ToDoCell 파라미터 부분을 없애도 당연히 동작은 합니다. (이 코드에서는 굳이 ToDoCell을 사용하는 일이 없기 때문에요.) var updateButtonPressed: (ToDoCell) -> Void = { (sender) in } 다만, ToDoCell까지 넘기는 방식으로 미리 구현해 놓으면.. 혹시나 나중에 추가적인 기능이 필요해져서.. 앱을 업데이트를 하는 경우.. (ToDoCell을 이용할 일이 생기면..) 수고가 줄어듭니다. 그리고 또한 일반적으로 동작이 일어나는 객체(여기서는 ToDoCell)까지 전달하는 방식으로 델리게이트 등의 메서드를 설계하는 방식이 (위에서 보여드린대로) 주로 애플의 구현 방식입니다. 애플이 미리 구현해놓은 여러가지 (테이블뷰, 텍스트필드, 컬렉션뷰, 피커뷰 등) 모든 델리게이트 메서드들을 살펴보시면, 항상 첫번째 파라미터는 그 동작이 일어나는 객체를 전달합니다. (향후 여러가지 가능성을 고려해서, 미리 그렇게 설계해 놓은 것이겠지요.) 여기서는 ToDoCell 파라미터 부분을 없애도 동작은 하는데, (1) 일반적으로 애플 구현 방식을 많이 따르기도 하고 (2) 향후 업데이트 등을 고려했을때 미리 그렇게 만들어 놓으면 리팩토링 등의 상황에서 더 자유롭기 때문에 그런 방식을 미리 보여드린 것 뿐입니다. 이 코드에서는 지우셔도 무방하긴 하니, 선택적으로 적용하시면 됩니다. 감사합니다. :)
- 0
- 1
- 60
질문&답변
2024.03.12
swift 버전, 공식 문서 읽는 방법
네 안녕하세요. Lee 님 Swift 5 이면 충분합니다. Swift 3 또는 Swift 4에서 버전 5로 넘어올때 큰 변화가 있었지만, 5 이후에 중요한 내용들은 크게 변화가 없습니다. (Swift 5 이후에 조금 업데이트된 디테일한 부분은 초보자 입장에서 크게 영향을 미치는 부분이 아니기도 해서 그렇게 말씀드리는 것입니다.) 만약에 열의가 있고 열심히 하시고 싶으시면.. 저는 가급적 제 문법 강의를 추천드리지만 (비싼 만큼 시간을 줄일 수 있다고 생각하지만) 비싸다고 느끼시면 아래의 강좌들로 일단 접근을 해보셔요! ======================================= 유튜브 - Smile Han (교수님) Swift강좌, iOS프로그래밍의 기초 - 무료 강의 https://www.youtube.com/playlist?list=PLJqaIeuL7nuFbWKMhG8-xLzF1T7gIPr8Z KX코딩 - Essential Swift (무료 스위프트 강의) https://www.kxcoding.com/course/essential-swift 인프런 - "야곰의 스위프트 기본 문법 강좌" https://bit.ly/3PCtFwT 인프런 - "개발하는 정대리 스위프트 기초 문법" https://bit.ly/3zcOB6t ======================================= 책으로 공부하시길 선호하시면 야곰님의 "스위프트 프로그래밍: Swift 5" https://product.kyobobook.co.kr/detail/S000001810190 보시면 됩니다. (초보자에게 쉽지는 않지만, 사실 대체제가 없어서.. 추천 드릴 책이 이것 밖에 없습니다.) 추가적인 질문 관련 ================================ 그렇다면 목표로 해야할 개발자의 모습은 예를들어 A라는 기능이 필요 -> A를 구글링해봄 -> 예시로 들어준 코드를 보고 '아 이런 식으로 쓰는건가보다' 하고 내가 필요한 대로 코드를 수정해서 사용해 구현 -> 코드만 보고선 잘 모르겠다 or 왜 이런 식으로 구현했나 이론적으로 알고싶을 때는 공식 문서 활용(공식 문서를 반드시 봐야하는 것은 아님) 이게 맞나요? 맞다면 (CS지식같은 외적인 부분을 제외하고 코드를 쓰는 측면에서만 봤을 때) 실력 있는 개발자는 '예시를 들어준 코드를 보고 이 기능을 이해하고, 나한테 필요한대로 코드를 잘 수정해서 적절하게 쓰는 사람' 인건가요? ================================ "실력있는 개발자"의 모습에... 모든 부분에 있어 완벽한 청사진은 아닙니다. 제가 말씀드린 건.. 초보자 입장에서, 초기 접근 방법에 대해서 (조금 삽질을 덜 할 수 있는 접근법 측면에 대해서) 말씀드린 것이라고 생각하시면 좋을 것 같아요. (1) A라는 기능이 필요 ► (2) A를 구글링해봄 ► (3) 예시로 들어준 코드를 보고 '아 이런 식으로 쓰는건가보다' ► (4) 코드 수정해서 사용 ► (5) (필요한 경우) 공식문서 학습 ► (6) 추후에 여러가지 추가적인 이론 학습 (블로그 / WWDC / 추가 적인 이론 / CS개념 등) 이런 부분이 앱의 기능 구현에 있어서 대부분을 차지하는 것은 맞지만, 말씀하신.. "실력있는 개발자" 가 되기 위해서는 (제가 많은 학생들의 실제 성장을 지켜본 결과) (1) CS적인 기본기 도 필요하고, (2) 문법 기본기 도 잘되어 있어야 하고 (3) 본인 분야에 있어 (예를 들어, iOS개발) 기본기도 필요 하고 (필수적인 구현 기본기) (4) 그리고 저는 개인적으로 "왜(Why)"를 생각해서, 문제 해결 할 수 있는 능력이 가장 중요 하다고 생각합니다. (생각하고 코딩할 수 있는 능력이요. 왜 이렇게 짰는지.. 자신의 코드에 대한 이론적인 근거 등) (물론 이런 생각할 수 있는 능력이 되려면 위의 기본기가 잘되어 있으면.. 자연스럽게 생기는 능력이긴 합니다.) 결국, '예시를 들어준 코드를 보고 이 기능을 이해하고, 나한테 필요한대로 코드를 잘 수정해서 적절하게 쓰는 사람' 은 일반적인 수준의 개발자(기본은 하는 개발자)를 통칭하는 표현인 것 같고, 또는 개발자로써 취업을 할 수 있는 수준의 최소한의 수준을 말하는 것이고.. 여기서 조금 더 나아가.. 기본기(CS + 문법 + 앱개발) 가 잘 되어 있고 왜(Why)? 라는 측면 을 잘 생각해서.. 여러가지 관점에서 충분한 문제 해결 능력까지 갖추고 있어야 실력있는 개발자 라고 생각합니다. (예를 들어 단순히 구현을 잘하는 것을 넘어, 때로는 어떤 구현이 CS적인 부분에서 성능저하 라던지.. 이런 여러 영향을 미칠 수 있는 부분이 있는데.. 이런 내용들은 사실 CS가 잘 되어 있지 않으면.. 전혀 파악이 불가능한 부분도 있다고 생각합니다.) (그래서 물론 한번에 또는 빠른 시간 내에 실력있는 개발자가 될 수 있는 건 아니고, 취업 이후에도 꾸준한 노력을 통해 실력있는 개발자의 모습에 가까워질 수 있다고 생각합니다.) 감사합니다. :)
- 0
- 1
- 50