<김영한의 실전 자바: 중급 2편> - 수강 완료 (with 쉽배자)
7월 말에 익산에 갔다와서 그런지 살짝 늦게 수강 완료.
<쉽게 배우는 자료구조 with 자바>를 읽으면서 동시에 수강했다. 둘 다 자료구조를 다루지만 근본적인 접근 방식과 서술이 다르다. 두 개가 의외로 상호보완적이라 학습하는데 시너지가 있었다. 차이는 다음과 같다.
(아래 비교에서 실무적, 이론적으로 이분했지만 실제로 둘 다 실용적이면서 이론적이다. 김영한의 실전 자바도 프로그래밍을 하며 만나는 어려움에 대해 '왜?'를 물으며 충분한 이유를 학습한다. 대신 구체적인 알고리즘과 자료구조의 구현 방식을 얼마나 다루느냐에 따른 학습의 내용 차이가 있을 뿐이다.)
김영한의 실전 자바 | 쉽게 배우는 자료구조 with 자바 | |
접근 방식 | 실무적 관점으로 접근한다. 처음에 기본적인 구현으로 발생하는 문제점을 확인하고, 이를 해결하기 위한 추상적 방식을 도입한다. | 비교적 이론적으로 접근한다(기본적으로 실용적임). 자료 구조가 갖는 특성을 먼저 추상적으로 정의한 다음, 구체적인 구현을 계획하고 실행한다. |
예시 | ArrayList를 도입하기 전에 직접 Array를 통해 데이터를 구현한다. 여기서 발생하는 문제점을 해결하기 위해 직접 ArrayList를 구현하며 자바의 자료구조를 학습한다. | 리스트가 갖는 의미를 생각한 뒤, Abstract Data Type(추상 데이터 타입)을 먼저 정의한다. 이후 ADT에 맞게 구조를 계획하고 구체적으로 구현한다. |
두 가지 모두 이러한 구조가 생겨난 이유를 '필요'의 관점에서 바라본다. 그러나 그 과정이 약간 다른데, 김영한의 실전자바는 직접 간단한 구현을 하면서 맞닥뜨린 어려움을 해결하기 위해 새롭게 기능을 도입한다. 그런데 쉽배자에서는 리스트라는 구조가 현실적으로 어떻게 쓰이는지 생각하고, 이러한 쓰임새를 위해 어떤 기능들이 필요한지 추상적으로 정의한 다음 기능을 도입한다. 두 과정이 서로 완전히 상호보완적이다.
그러면서도 한 쪽에 없는 내용이 다른 한 쪽에는 있다. 김영한의 실전자는 실제로 정렬이나 트리 알고리즘 등에 대해 깊게 학습하지 않는다. 실무적으로 사용하는 게 중요하기 때문이다. 그러나 쉽배자에서는 전부 학습한다. 각각의 구조가 어떻게 이루어져있고, 또 어떤 성능을 보이는지 차근차근 확인한다. 쉽배자에서는 Generic을 학습할 때 new E(); 처럼 generic을 생성하지 못하는 상황에 대해 "컴파일러와 가상 머신 사이에 초기의 디자인 실수로 무언가 엉킨 것이 아닌가 싶다." 라고 쓰여있다. 그러나 김영한님 강의에는 왜 이런 상황이 생기는지 타입 이레이저를 다루며 컴파일할 때 generic이 쓰이는 원리를 보여주며 알려준다.
쉽배알 서문에 이런 말이 있다. 강의자의 흥분이 전달되지 않으면 일반적인 지식 전달이나 다름 없으며, 쉽게 설명하지 못하면 완전히 이해하지 못한 것이다. 크게 공감이 갔다. 지식 전달을 넘어서 '교육'에 닿기 위해 고민한 시간들이 느껴진 문장이었다. 김영한님 강의에서 비슷한 느낌을 받았다. 지식을 전달하는 걸 넘어서 이러한 내용들이 어떤 의미를 담고있는지 본인의 감정과 함께 전달하고, 또 그 내용들을 차근차근 쉽게 알려주려고 노력한다. 듣는 입장에서는 편하지만 준비한 입장에서는 얼마나 수고로울지 감이 안 잡힐 만큼 완성도가 높은 강의다.
앞으로는 스프링 입문에 대해 살짝 배운 뒤 고급 1편을 수강할 예정이다. 2~3일 정도 배운 내용들을 복습하는 시간을 가질 예정. 학기가 시작되고 나면 어떻게 할지 좀 더 고민해봐야겠다.