Java 적응기 01

Posted by 엘키의 주절 주절 on July 27, 2017

개요

사실 여러 번 밝힌대로, 나는 Java를 싫어했다.

내가 프로그래밍을 배우던 시기에 Java는 느려도 너무 느린 존재였다. 그렇다고 여타 스크립트 언어들 만큼 가볍게 쓰기에도 적합하지도 않았고.

내 뇌리에 박힌 어중간한 언어라는 인식이 꽤나 오랜 시간 Java를 선택하지 않게 했다.

이제와 고백하자면, C++ 부심도 상당했다.

C++의 학습 허들은 꽤나 높은편이다.

실제로 포인터 개념의 허들이 주를 이루는 C언어보다, C를 하위호환하며 C++로 구현하면서 생긴 복잡한 문제와 메모리를 직접 다루는 문제에 연관되어 사이드 이펙트로 이어질 수 있는 몇가지 구현 (가상 함수 테이블 이라던지, delete와 delete []의 차이 라던지, memcpy나 raw pointer를 다루다 생기는 커럽션 문제 라던지) 은 끔찍하다.

이런 문제는 많은 공부에도 경험 할 수 있는 재앙이며, 경험으로 인해 줄어들 뿐, 사라지지 않는다.

또한 수많은 레거시가 여전히 현역 코드로 사용되고 있음에서 발생하는 리스크 (매크로 함수 라던지, goto 지옥, n차 pointer의 향연, 모호한 메모리 제어권) 는 끔찍하다.

그럼에도 그렇게 어렵고 문제가 많은 언어를 집중해서 잘 썼을 때의 쾌감을 즐겼다. (혹자는 기술 변태라는 표현을 썼고, 나도 가끔씩 쓰게 됐다.)

나는 어려운 문제를 쉽게 푸는 것을 즐기는데, 그 방식 중 하나가 C++을 나의 제어권 하에 치밀한 계산 하에 안정성을 갖추는 일이었다.

생각의 폭을 넓은 계기

그런 생각이 ruby on rails를 익히면서, 많이 변해갔다.

생산성이 좋은 언어를 접하고, 만들어진 것들을 활용 하는 것에 익숙해질 무렵, 나의 결론은 C#이었다.

Ruby나 python은 너무 느렸고, node.js는 철학이 부족했다.

node.js에 대해선 특히나 이견이 많이 있을거라고 생각하지만, 표준화가 많이 이뤄진 지금에서야 방향성과 아이덴티티가 생겼지, 3~4년 전만해도 adhoc 언어였다고 생각한다.

그럼 남는 것은 Java와 C#인데 이 중 C#은 unity3D를 쓰게되면서 익힌 것도 있지만, 언어 자체의 발전 속도나 완성도, MS가 관리하고 있는 정재된 사용 방식과, 일관성이 나에겐 큰 장점이었다.

유일한 단점이던 리눅스 환경 지원도, .NET CORE와 함께 해소되었다. (이전 글에서 언급했듯 아직 문제가 많은 .NET CORE의 부족한 라이브러리 풀과 이식률, 안정성에 대해서까지 옹호함은 아님을 밝힌다.)

(사심을 가득 담아) 머지 않아 C#이 더 인기를 얻게 될거라고 보지만, 아직은 그리고 국내는 더더욱 Java 천국임은 인정한다.

그러나 나는 그 것이 선점 효과라고만 생각했다.

다른 장점들을 크게 둘러보고 싶지 않아했음도 인정한다.

그렇기에 Java의 장점을 잘 알아보려하지 않았다.

사용해보고 난 후

그러던 차에 Java를 반쯤은 강요된 사용 기회를 갖게 됐고, 그래서 진지하게 Java를 사용하고 살펴보게 됐다.

그 결과 내가 얻은 결론은 다음과 같다.

내가 느낀 Java의 장점

  • Java의 과도기를 딛고 안정성과 최적화를 많이 이뤄낸 JVM 환경.
    • JVM 기반의 수 많은 언어들이 이를 증명.
  • Java의 안정적이고, 생산성이 뛰어난 수많은 라이브러리.
    • Netty
    • Akka
    • Spring
  • 다른 언어에 없는 것은 있어도, 다른 언어에 있는 것은 다 있다고 볼 수 있는 라이브러리 풀.
  • C++과 다르게 예외 처리에 강한 점.
    • 메모리 커럽션이 없어서 최악의 케이스가 덜 발생함.
  • 개발자 풀이 압도적으로 많은 점.

이런 장점들이 메인 언어로써 Java가 선택되게 된 계기 아닌가 싶다. 그 중에서도 나는 Netty와 Akka가 인상 깊었다.

위에 언급한 이런 장점에 비해 아쉬움도 많았다.

내가 느낀 Java의 단점이자 아쉬움

  • 생각보다 환경 설정에서 이슈가 많았는데, 이에 대한 원인 파악이 굉장히 어려운 편이었음.
    • 구글링해도 잘 안나옴.
    • 버전별로 다른 해결책이 필요한 경우가 많아 무의미해진 해결책을 시도해보느라 시간 소요가 되는 일이 비일 비재 했음.
  • 언어 발전 속도가 느려도 너무 느림.
    • 하위호환과 안정성 때문이란 얘기도 듣긴 했지만, 그걸 감안해도 너무 느리다.
    • 어설프게 지원된 Generic도 불만 요소.
  • Visual Studio 보다 아쉬운 개발 툴.
    • Eclipse는 물론이고, Intellij Idea도 Visual Studio 보단 많이 아쉽다.
  • 내가 경험한 다른 언어들보다 한두가지 아쉬움.
    • C#
      • LINQ
    • C++
      • multi_index

이런 몇가지 아쉬움이 있긴했으나, 그걸 감안하고도 학습 허들이 낮고 큰 어려움이 없이 비즈니스 로직에 집중 할 수 있었다. (이는 C#도 동일했다.)

무엇보다 가장 큰 아쉬움은 자바 개발 속도가 빠르지 못해, multi_index나 LINQ가 근 시일 내에는 추가되지 못할 것 같은 불안감이었다.

RxJava나, Akka를 보면 그렇지 않을 수 도 있을 것 같긴한데… 의지의 부족이 아닌가 싶은 생각도 든다.

마치며

적어도 내가 느낀 결론은 Java가 가장 널리 사용되고 있지만, 개선하거나 나아질 요소가 충분하다. 그에 비해 지나치게 느린 변화의 속도는 안정성을 위한 선택이라고만 느껴지진 않는다. 내 생각은 앞서 있는 진영의 여유? 그게 아니면 자만??

그럼에도 불구하고 Java에서 느낀 여러가지 장점과 감상, 또 이미 다른 언어에 있지만 Java로 사용하게 되며 느끼게 되는 여러가지 장단점을 느꼈다.

음 아마도 앞으로 더 많이 사용하게 될 Java에 대해 익숙해져가는 과정에서의 감상과 경험담을 주제별로 다뤄보겠다.