- 現어비스 대표 및 리드개발자
- 前 네이버 개발자
- 5년차 알고리즘 강사(네이버 / 카카오 / 라인 / 삼성 코딩테스트합격자 배출)
- 19, 20 IT 대기업 코딩테스트 합격자(All Solved)
- 2024 Meta HackerCup 알고리즘 대회 R1 상위 12%
- 자바스크립트 테스트 프레임워크 Mocha.js contributor
- 저서 《 면접을 위한 CS전공지식노트 》 2022 / 국내IT도서 1위 베스트 셀러
- 저서 《 실시간 모니터링 시스템을 만들면서 정복하는 MEVN》 2021 / 국내IT도서 63위 베스트셀러
講義
受講レビュー
- CS知識の正典 | デザインパターン ネットワーク オペレーティングシステム データベース データ構造
- 10週間完成 C++ コーディングテスト | アルゴリズムコーディングテスト
- 10週間完成 C++ コーディングテスト | アルゴリズムコーディングテスト
- 10週間完成 C++ コーディングテスト | アルゴリズムコーディングテスト
投稿
Q&A
디자인패턴 질문
안녕하세요 지훈님 ㅎㅎ 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점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 27
Q&A
코딩살구클럽 가입부탁드립니다
안녕하세요 ㅎㅎ 등록해드렸습니다. 감사합니다.
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 29
Q&A
코딩살구클럽 가입 요청 확인부탁드립니다
안녕하세요 ㅎㅎ 등록해드렸습니다 감사합니다!
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 31
Q&A
팩토리 패턴
안녕하세요 지훈님 ㅎㅎ팩토리는 그냥 다양한 클래스의 객체를 생성하기 쉬운 추상화된 형태의 클래스 정도-> 네 맞습니다.+팩토리 패턴에서 팩토리가 생성하는 객체들이 반드시 상속 관계일 필요는 없습니다.핵심은 상속 관계가 아니라 객체 생성 책임을 분리하고, 생성 과정을 사용하는 쪽에서 감추는 것 이라고 보시면 됩니다.또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 45
Q&A
5-S 테스트 케이스 질문
안녕하세요 ㅎㅎ해당 부분 확인하고 수정작업 진행하도록 하겠습니다. ㅎㅎ항상 피드백 주셔서 감사합니다. :)
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 36
Q&A
싱글톤 패턴 구현방법
안녕하세요 지훈님 ㅎㅎ런타임이 아니라 클래스 로딩시점에 미리 생성해 두는게 자원낭비-> 보통 싱글턴은 앱 실행시 반드시 사용되는 객체의 경우 싱글턴을 걸기 때문에 자원낭비라 볼 수 없습니다. 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 51
Q&A
라이브러리 프레임워크 차이 질문
안녕하세요 지훈님 ㅎㅎ정해진게 아니라 관점에 따라서 대답이 달라질 수 있는-> 아닙니다. 이 경우 공식문서 기반으로 답변하면 됩니다. 제가 느끼기엔 nestjs, spring같이 정해진 틀 안에서 사용을 하게되는 프레임워크의 성격-> 리액트의 경우 리엑트쿼리나 상태관리 등이 해당 라이브러리 안에 넣어져있지 않습니다. 리액트 생태계 기반으로 import 해서 쓰는 형태기 때문에 라이브러리가 더 맞습니다. 그 기준이 모호하긴하지만요 ㅎㅎ또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- いいね数
- 0
- コメント数
- 1
- 閲覧数
- 51
Q&A
2 - T 오큰수 문제가 있는 것 같습니다.
안녕하세요 효재님 ㅎㅎ저는 맞았다고 뜨는데요 ㅎㅎ혹시 새로고침 + 채점서버 git pull 해서 최신 서버로 실행해보시겠어요? (사진)
- いいね数
- 0
- コメント数
- 1
- 閲覧数
- 43
Q&A
코살 문제풀이 환경
안녕하세요 현섭님 ㅎㅎ실제 회사에서 코테 칠때랑 동일하게 (예를들면 프로그래머스 환경) 조성해 주실 수 있을까요?->코살의 환경은 여러 회사에서 코테 칠때랑 동일합니다.코딩테스트 섹션을 통해 보다 더 코테 칠 때와 동일하게 연습할 수 있습니다. 프로그래머스 환경과 동일하게는 불가능합니다. 참고로 저번 현섭님이 요구하신 문제수 추가는 완료되었습니다 350여개의 문제를 추가했습니다.또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 49
Q&A
추천 추가문제들
안녕하세요 현섭님 ㅎㅎ지금부터 코살 사이트에 추천 추가문제들-> 현섭님이 요청하신대로 이부분은 아마 8월중에 마무리 될 거 같습니다. 지금부터 대비해서 내년 상반기에 600솔은 한 상태로 가고자 합니다.=> 코살에 있는 것을 다 푸셨다면 프로그래머스나 리트코드, 코드포스를 추천드립니다. 또 질문 있으시면 언제든지 질문 부탁드립니다.좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)감사합니다.강사 큰돌 올림.
- いいね数
- 0
- コメント数
- 2
- 閲覧数
- 43






