나의 기억 속의 Java

Java는 C/C++만 알고 있던 나에게는 새로운 언어라고 보다는 개념을 도입하는 언어였다. 이는 Java의 언어 형태가 C/C++과 매우 흡사하기 때문이다. 코드 일부만 보면, 어떤 언어인지 판단하기가 쉽지 않을 수도 있다. 처음 배울 때가 Java가 Public하게 처음 소개 될 때였다. 그 당시에는 Sun Microsystem에서 릴리즈 하였다. 대학원 당시 랩에서 Sun Spark 워크스테이션을 처음 접해 본 터라 컴퓨터를 만드는 회사에서 도입한 컴퓨터 언어라는 것이 신기하고 Object-Oriented 개념으로 만든 언어라는 것이 신기했다.


그리고는 , Java 1.2가 Java 2로 소개 되고, J2SE, J2ME와 같이 Profile을 가지고 소개되었다. 단말을 하였었기 때문에, 옆 부서에서 J2ME의 여러 모듈들을 포팅하는 것을 기억하고 있다. 이 당시는 J2ME라도 상당히 무겁고 응용도 많지 않은 상태여서 Mobile에는 적용이 어렵다는 생각을 많이 하였고, 심지어는 모바일에는 Java는 절대로 보편화 되지 못할 것이라는 나름대로의 판단이 있었ㄴ다.


다시 안드로이드를 시작하면서, Java로 어플리케이션을 작성하는 부분에 대해서 놀랐다. 그리고, 이야기 듣던 JNI로 C++단이나 커널과 연결되어 Platform을 구성하는 것에 대해서 많은 놀라울 수 밖에 없었다. 그리고도, 시간이 흘러 보니 내가 알고 있던 Java와는 많은 차이가 있었고 처음 부터 다시 다져봐야 할 이유가 충분하였다.


또 다시 시작.

Android를 하기 때문에, Java를 다시 봐야 하는 것은 자연 스러웠다. Python도 강좌를 통해서 익힌 터라 강좌를 찾았다[1]. 2가지 과정으로 되어 있었지만 첫번째 강좌만 들었다. 이후는 응용인데, Android에는 큰 도움이 되어 보이지 않아서였다. 전반적으로 IDE로 Eclipse를 쓰고 있어서 툴을 배우는데는 유용했다. 다른 언어와 유사한 데이터 타입, 연산자, 입출력, 루프 그리고 함수까지는 평이했고 C++을 했기 때무에 객체 지향관련 Class와 다형성까지 크게 문제가 없었다. Interface와 C++과 다른 부분들은도 예전과 크게 다르지 않았다고 느껴서 어렵지않았다. 하지만, 이 것을 마무리 하고나서는 많이 부족한 생각이 들었다.





책으로 보는 Java

결국은 책을 찾게 되었고, C++ 책의 같은 저자가 만든 책이 있는 것을 알고 그 책을 찾아 보았다. 이책은 Java 8기반으로 작성되어 있어서 Android를 기반으로 하고 있는 나도 더 도움이 되겠다 싶어 보게 되었다. 다 보고 난 후 총평은 새로운 개념들을 설명하면서는 정리가 좀 덜 된 듯 한 느낌을 들기는 하였다. 요리를 해야 하는 재로는 다 들어갔는데 잘 어울어지지 않는다는 느낌이었다. 물론, 내가 개념들을 깊이 이해하지 못해서이기도 하지만, 설명을 잘 하는 책이라면 충분히 그 느낌을 덜어주지는 않았을까 한다.


나의 관점에서 새로운 개념들은 Chapter 21부터 설명되는 Generic그리고 이를 활용한 Collection Framework였다. 이 후, Lambda와 Method 참조, 그리고 스트림까지이다. 특히, Android에서도 적용되는 Java 8의 신규 기능이라 할 수 있는 것은 Lambda와 Stream이다. 새로운 Android 코드들에는 이를 활용한 코드가 적용[3]되고 있으니, 반복해서 확인하고 몸에 익혀야 할 내용들이다.


Android와 Java

Android는 Java와 때려고 해도 때기 어렵다. Google이 Android 작성하는 언어으로 Kotlin을 발표하였다. 또한, Java의 현재 주인인 Oracle과 Android의 주인인 Google의 전쟁의 승자가 Oracle로 결정이 되어 더욱 암울해 보인다[4]. 하지만, 나는 여전히 처음 시작하는 언어로서 Java를 추천한다. 아직도 Java가 Android에서 계속 사용되어야만할 이유가 충분해 보이기 때문이다.

우선 Android 개발자 입장에서는 Java를 버릴 이유가 없다. 왜냐하면, 이미 Java를 기반으로 한 Android Phone들이 많이 팔렸고, 여기에 App들을 Java로 만들어서 배포한다. 극단적인 가정으로, Google이 Java를 포기하고 새롭게 Android2를 만든다고 하더라도 새로운 폰들이 바뀌는데는 상당한 시간이 걸린다. 아직까지 5년전 발표된 Kitkat까지 해야 94%휴대폰 커버(2018년도 1월 18일 기준)되니까. 비슷한 논리로 내년에 완전 Java를 사용하지 않는 플랫폼 만들어서 배포해서 유사한 시간이 걸린다고 하더라도 5년은 걸릴 것이다. 추가 참고 자료로 [5]를 보면, 시간 상으로 어떤 Version의 안드로이드 플랫폼들이 변화 하는지 볼 수 있다. 또한, 사람들의 스마트폰 교체 주기도 점점 길어 지고 있다. 이렇게 보면, 지금 Android가 가지고 있는 Market과 사용자들이 그렇게 쉽게 Java에서 다른 언어로 넘어갈까? 이 부분에 판단은 글을 읽으시는 분께 맏긴다.

공부라는 측면에서의 의견도 나는 Java를 계속 권한다. 위에서도 설명했듯이 Object Oriented Programming Paradigm을 근간으로 하고 있는 언어로서 이를 배우기 위한 최적의 언어이다. 그렇기 때문에 Java가 가지고 있는 여러 툴이나 도구이 아주 많다. 뿐만 아니라, 언어를 배우시고 배워야 할 Architecture 관련된 분야들이 Java를 기반으로 시작된 것들이 상당히 많다. Refactoring, Design Pattern 그리고 Unit Testing 등이 그 예이다. 그렇기 때문에, 이를 가장 잘 설명하는 책 및 Practice들이 Java를 기준으로 한 것이 차고 넘친다. 그리고, 사족으로 컴퓨터 언어 한두가지 정도는 더 하야 한다. 그렇기 때문에, Java로 시작해서 Java로 끝난다고 생각해서는 안되고, 여기서 필요에 따라 여기서 발전된 언어를 적어도 한 두개는 더 한다고 생각해야 한다.

그럼, Java는 없어질 언어인가요?

개인적으로는 C를 주로 사용했고, 거기서 C++, Java, Python 등의 다른 언어로 가지치기를 하고 있다. Java는 현재 정말 Popular하게 전개 되어 있는 프로그래밍 패러다임인 Object-Orient를 기반으로 만들어진 언어이다. 그리고, Android의 기반이 되고 있는 언어이다. 위에서도 이야기 했지만, 이를 바꾼다고 해도 시간이 소요된다. 그런 의미에서 Java는 위의 여러 사실을 바탕으로 Programmer의 First Language로 적극 추천할만한 언어이다. 물론 이것은 현재의 내 판단이고, 이는 또 바뀔 수 있다. 하지만, 적어도 5년 길면 10년까까지도 이 의견은 유효하리라고 판단한다.


[1] Java 배우기 Part 1(기본), http://www.credu.com/main/credu/user/course/zu_course_detail_R.jsp?p_subj=C69401

[2] 윤성우, "윤성우의 열헐 Java 프로그래밍", 2017년 7월

[3] Android Java 8 Support, https://developer.android.com/studio/write/java8-support

[4] 8년 전장 오크랄 웃고, 구글 울었다. http://www.zdnet.co.kr/news/news_view.asp?artice_id=20180328141031

[5] Android version history, https://en.wikipedia.org/wiki/Android_version_history


+ Recent posts