안녕하세요 ㅎㅎ 10월초쯤이면 충분합니다. 6주차까지 하는 걸 목표로 진행해주시면 될 거 같습니다 . 그리디라니 ㅎㅎ 많이 하고 계시는 군요 ㅎㅎ 이정도면 완강 목표도 가능할거 같습니다. 문제도 일단 계속 풀다보니 어느순간 패턴 암기가 되어버려서 이 접근법이 맞나 궁금하기도 합니다.. -> 아마 4주차까지는 암기 수준으로 개념을 학습하는게 일반적이라 그 접근법이 맞습니다. 알고리즘이라는 개념 + 문제해결능력입니다. 개념을 어느정도 "암기" 하고 있어야 문제 해결도 가능하다는 것을 이해해주시면 될거같아요 ㅎㅎ 너무 잘하고 계십니다. 지금 이렇게 질문하신것만으로도 상위 10%안에 드는 직장인 코테준비자라고 보시면 됩니다. 굿굿요 ㅎㅎ 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
안녕하세요 ㅎㅎ 제가 윈도우에서 좀 더 쉽게 실행할 수 있도록 리드미를 수정했습니다. 프로젝트 폴더의 start-windows.cmd 더블클릭 이거를 누르셔도 되구요 ㅎㅎ 자세한건 리드미 한번 더 참고 부탁드립니다. 또 안되시면 문의주세요!! https://github.com/wnghdcjfe/zagabi
안녕하세요 현섭님 ㅎㅎ 삼성이 올해를 끝으로 sw직무에 대해 코테가 없어진다던데, 혹시 어떤 프로세스로 대체되는지 아실까요? -> 그렇지 않습니다. 내부적으로 pro, ex에 대한 코딩테스트가 사라질 뿐이지 입사시의 코딩테스트는 사라지지 않는다고 들었습니다. 이는 내부 직원으로 부터 들은 정보입니다. 또한, 전체적으로 코테는 사라지지 않는다라는 생각을 가지고 있습니다. 값싸게 개발자의 똑똑함을 보기위한 것으로 코테말고 가성비가 높은게 없으니까요. 염치가 없지만, 강사님의 강의/책으로 다 대비 끝낼 수 있게 만들어주시면 -> 추후에 AI 활용능력에 대한 부분으로 다 바뀐다면 그부분도 대비할 수 있도록 강의를 만들 계획입니다. 또한 이런것도 하고 있으니 참고부탁드려요 ㅎㅎ 이번에 1등한 클로드코드 제대로 시작하기 입니다! https://inf.run/TW3ir 염치가 없지만, 강사님의 강의/책으로 다 대비 끝낼 수 있게 만들어주시면 비싸게 사겠습니다! -> 넵 ㅎㅎ 감사합니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.
안녕하세요 지훈님 ㅎㅎ MVC "요청 받는 것, 데이터 처리 및 CRUD, 화면에 표시하는 것을 구분" -> 이건 Spring MVC(Model 2) 설명입니다. 사실 MVC는 세 갈래인데요 — Smalltalk MVC(V가 M을 구독) / Model 2(Spring·Rails, 구독 없음) / Cocoa MVC(Controller가 M·V 중재). 이 셋이 이름만 같고 다른 물건입니다. Spring MVC엔 "Model이 변하면 View가 갱신된다"가 아예 없습니다. 상태 변화에 반응할 화면 자체가 없으니까요. "M과 V가 서로 직접 참조할 수 있는 구조" -> 맞습니다 단, Smalltalk MVC 한정입니다. Cocoa MVC는 V가 M을 직접 참조 안 합니다. class TodoView { constructor(model) { this.model = model; // ← View가 Model을 안다 model.subscribe(() => this.render()); } render() { const left = this.model.items.filter(i => !i.done).length; // 도메인 규칙이 뷰로 샘 } } "단위 테스트도 어려워짐" 정확합니다. 저 filter 한 줄 때문에 뷰를 띄워야만 테스트 가능해집니다. "컨트롤러 안에서 다 다루니 점점 커짐" 문제 자체는 실재합니다. 다만 이건 Cocoa MVC에서 터지는 현상이고, iOS에서는 Massive View Controller 라고 부릅니다. MVP "M과 V가 서로 직접 참조할 수 없게 만듦" -> 맞습니다. View를 인터페이스로 추상화해서 진행한다고 보면 됩니다. interface TodoView { fun showTodos(items: List ) fun showLoading(); fun hideLoading(); fun showError(msg: String) } class TodoPresenter(private val view: TodoView, private val repo: TodoRepo) { fun onSubmit(text: String) { view.showLoading() repo.add(text) view.showTodos(repo.all()) // 갱신 view.hideLoading() } } 백엔드 예시로는 헥사고날의 Port/Adapter 그 자체라고 보시면 됩니다. Activity가 Adapter, 테스트할 땐 FakeView 주입 = Mock Repository 주입. "MVP에서도 비대해지는 문제는 해결 어려움" 정확히는 MVP의 비대화는 "다 떠안아서"가 아니라 갱신을 일일이 명령해야 해서입니다. "화면 상태" 하나 늘 때마다 view.xxx() 메서드가 늘어납니다. MVVM "그래서 등장한 것이 MVVM" -> 아닙니다. MVVM은 MVP를 고치려고 나온 게 아닙니다. 2005년 MS의 John Gossman이 만들었고, 이유는 WPF에 이미 강력한 선언형 바인딩 엔진이 있었기 때문입니다. 기술이 먼저 있었고 패턴이 따라온 것이지, 순차 진화가 아닙니다. "데이터 바인딩으로 뷰가 자동 업데이트, 코드가 줄어듦" -> 정확합니다. class TodoViewModel(private val repo: TodoRepository) : ViewModel() { private val _uiState = MutableStateFlow(TodoUiState()) val uiState = _uiState.asStateFlow() // ← View 타입이 등장조차 안 함 fun add(text: String) = viewModelScope.launch { _uiState.update { it.copy(isLoading = true) } runCatching { repo.add(text) } .onSuccess { _uiState.update { s -> s.copy(items = repo.all(), isLoading = false) } } .onFailure { e -> _uiState.update { s -> s.copy(error = e.message, isLoading = false) } } } } @Composable fun TodoScreen(vm: TodoViewModel) { val state by vm.uiState.collectAsStateWithLifecycle() if (state.isLoading) CircularProgressIndicator() Text("남은 일: ${state.items.count { !it.done }}") } MVP는 Presenter가 View를 알았지만, MVVM은 ViewModel이 View를 아예 모릅니다. 상태만 노출하고 뷰가 알아서 구독합니다. "'컨트롤러 비대화'와 '직접 참조' 두 가지를 모두 잡음" -> 절반만 맞습니다. 직접 참조 → 맞습니다. 비대화 → 안 잡힙니다. MVVM 써도 ViewModel은 똑같이 뚱뚱해집니다. 비대화의 근본 해법은 패턴 교체가 아니라 계층 분리(Service·UseCase)입니다. "단점으로는.. 그냥 구조가 복잡해졌다?" -> 구체적으로 얘기하는 게 중요한데요. 바인딩이 암묵적 의존이라 추적이 안 됩니다. 값이 왜 안 바뀌는지 콜스택을 못 따라가고, 불필요한 리컴포지션/리렌더 성능 이슈가 생기는 단점이 있습니다. 반면 MVP는 view.showLoading() 이 코드에 박혀 있어 눈으로 따라갈 수 있다고 보면 됩니다. 또 질문 있으시면 언제든지 질문 부탁드립니다. 좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :) 감사합니다. 강사 큰돌 올림.