전자정부 표준 프레임워크로 대변되는 SI 시장에서 애용되어 일각에서는 부정적인 시각으로 바라보기도 하지만, 그만큼 대용량 서비스에서는 없어서는 안 될 강력한 언어다. 정부 표준 프레임워크에 들 정도로 안정적이라는 반증이다. 자바 8 이후에 몇 차례 업데이트가 있었지만 모던 언어로서 핵심 변화는 자바 8에서 일어났다. 자바를 안다라는 개념이 자바 8에서 갈릴 정도다.
자바를 찾아서
자바를 만든 제임스 아서 고슬링
1955년에 캐나다에서 태어난 자바의 아버지 제임스 아서 고슬링은 썬 마이크로시스템즈 근무 시절 다른 연구원들과 객체 지향적 프로그래밍 언어 자바를 개발했다. 자바는 1991년 시작해 1995년에 발표됐다. 여담이지만 자바가 얼마나 대유행했는지 한 때 마이크로소프트는 자바를 본뜬 비주얼 J++이라는 언어를 만들어 대응했다(https://en.wikipedia.org/wiki/Visual_J%2B%2B). 2004년 J++을 버리고 C#으로 새출발 한 건 잊혀진 흑역사(오늘날 C#은 서버, 게임 등에서 많이 쓰임).
자바와 JVM, 한 번 컴파일해서 어디서든 돌아간다
자바 코드는 JVM 위에서 돌아간다. 자바 가상 머신인 JVM에 돌면 어떤 장점이 있을까? JVM이 깔린 어디에서든 코드가 동작한다. 즉 운영체제나 CPU에 따라서 다시 컴파일하지 않아도 되므로 한 번 컴파일해서 JVM이 있는 모든 시스템에서 사용할 수 있다. 운영체제나 CPU에 맞추는 일은 JVM에서 한다. 결과적으로 JVM을 사용한 자바의 모델은 성공했다. JVM이 너무 성공한 탓에 자바 외에도 스칼라, 코틀린, 구루비 등의 많은 언어가 JVM에 올라탔다(https://digital.com/best-web-hosting/java/jvm-programming/)
컴파일과 JVM 아키텍처
자바 코드는 .java 형식으로 저장된다(파일명은 클래스명과 같아야 한다). JVM 위에서 동작하는 바이트 코드로 컴파일되면 .class 파일로 저장된다. 이 클래스 파일이 JVM 위에서 동작한다.
JSM은 클래스 로더, 런타임 데이터 영역, 실행 엔진으로 구성된다. 클래스 로더는 클래스를 읽어와 필요한 조치(링킹, 초기화)를 한다. 런타임 데이터 영역에는 메서드, 힙, 스택, PC(실행되는 코드 위치를 가리키는 특수한 메모리 영역, 스레드별로 있다) 등으로 구성되어 있다. 마지막으로 실행 엔진은 인터프린터, JIT 컴파일러, 가비지 컬렉션으로 구성된다(인터프린터, JIT 컴파일러는 시스템에 맞게 자바 바이트 코드를 변환해주는 역할을 한다. 가비지 컬렉션은 쓰지 않는 메모리를 관리하는 영역이다). 자세한 내용은 다음 글을 참고하면 된다.
자바는 안드로이드 앱과 서버 개발에 특히 많이 쓰인다. 자바를 배우고 나서 서버 영역 개발을 희망한다면 JSP, 스프링을 배우면 된다. 빅데이터 분석 및 관리는 하둡으로, 안드로이드 모바일 앱 개발을 희망한다면 안드로이드 앱 개발에 도전하자.
원티드와 잡코리아에서 자바를 검색해보라. 자바는 쌀이다. 밥상에 쌀은 필수다. 왜 나라에서 국비를 들여 무료로 자바 개발자를 양성하겠는가? 그만큼 산업 전반에서 수요가 많기 때문이다. 정부에서 표준 프레임워크에 넣어버린 영향도 있겠지만, 닭이 먼저냐? 달걀이 먼저냐는 의미 없다. 구직자 입장에서는 현시점에 실제 수요가 있다는 게 중요하지.
2. 폴리글랏 프로그래밍 시대라고 한다.
자바로 입문하면 다른 언어를 배우는 데 유리한가?
뭐든 한 언어만 정통하게 알면 다른 언어를 새로 배우기가 수월해진다. 특히나 자바는 객체지향 기반으로 애초부터 설계되어 있기 때문에 적어도 객체지향이라는 프로그래밍 패러다임을 충분히 익히는 데 전혀 모자람이 없다. 코드를 검증(TDD)하고, 깨끗하게 만들고(클린 코드), 시스템에 알맞은 방식(디자인 패턴) 관련한 연구가 굉장히 많고 명저도 많다. 게다가 자바 8에 함수형 프로그래밍 개념이 덧붙어 그야말로 모던 언어로서 손색 없는 스팩(?)을 갖췄다.
특히 주목하는 바는, 복잡한 행사 코드다. "hello world" 문자 하나 찍는데 필요한 코드양이 많다. 이렇게 행사 코드가 많은 언어를 사용하다가 다른 언어를 사용하면 다른 언어가 쉬워보이는 의도하지 않은 효과를 얻을 수 있다(물론 자바보다 행사 코드가 많거나 배우기 어려운 언어는 많다). 자바는 배우기 쉽다와 어렵다 중간 어디쯤이다. 감히 평하자면 '균형이 잘 잡힌 언어다'.
자바 코드
classHelloWorld {
publicstaticvoid main(String args[]) {
System.out.println("Hello World");
}
}
파이썬 코드
print "Hello World"
고로 폴리글랏 프로그래밍의 시발점으로 적합하다.
3. 자바로 개발할 수 있는 분야
자바는 전통적으로 서버 영역 강자다. 안드로이드 덕분에 프론트엔드에서 강자가 되었다. 분산 파일시스템인 하둡에서 빅데이터를 분석하는 데도 사용된다. 자바 통합 개발 환경으로 애용되는 이클립스도 자바로 만들었다. 사실 자바는 범용 언어이기 때문에 안 쓰이는 곳이 없을 정도다. 적합하지 않은 곳을 꼭 꼽으라고 하면 실시간 처리를 하는 임베디드 장비나 고성능 콘솔 게임 프론트 정도가 대표적일 거다.
나에게 적합한 방법이 남에게도 적합하지는 않는다. 그럼에게 입문 방법을 살짝 추천해보자면, 강의와 책을 겸하자. 그중에서 하나만 택하라면 책이다. 온라인 강의는 두 가지 문제가 있다. 강사가 실시간으로 말하면서 잘못 이야기하게 되는 문제, 청자가 듣고 나서 나중에 다시 찾기 어려운 휘발성 문제. 책은 강의보다 정제된 정보다, 그리고 다시 찾아보기 쉽다.
그럼 어떤 책을 선택해야 할까?
눈높이에 맞아야 한다. 본인이 천천히 깊게 파고들며 가는 스타일이면 정석류, 그게 아니면 가벼운 입문서다. 나는 가벼운 입문서를 추천한다. 아래 3가지를 꼭 챙기자.
1. 완독이 중요하다.
입문서는 완독이 중요하다. 내가 도전해도 되는 언어인지 아닌지 파악하는데 팔만대장정을 첫 경전으로 선택할 필요는 없다. 완독 가능한 가벼운 책이면 된다. 완독이 가능한 수준이면 내용이 너무 없는 게 아닌지 싶을 거다. 시장에 입문서 많다. 목차를 잘 살펴보자. 이도저도 모르겠으면 그냥 금토끼 로고가 있는 책을 고르자(입문자에게 딱맞을 정도로 담아두었다. 필자가 만들어서 추천하는 거임, [Must Have] 이재환의 자바 프로그래밍 입문https://bit.ly/3xoPGWc )
2. 직접 타이핑이 중요하다.
눈으로 보면 다 아는 것 같은 착각이 든다. 수학 문제 풀 때를 떠올려보자. '아하~~ 어렵지 않아~~~' 생각이 들지만 실제로 문제를 풀 때는 늘 막힌다. 막히면 어떻게? 직접 손으로 푸는 수밖에! 프로그래밍도 마찬가지다.
3. 이론도 실습으로 확인하는지?
이론을 이론으로만 배우면 실제로는 모르는 거다. 눈으로 보고 확인해야 비로소 내것이 된다. 이론을 설명할 때 적절한 실습이 병행되는지 확인하기 바란다.
마치며
프로그래머는 평생 공부하는 직업이다. 첫 프로그래밍 언어로 자바를 입문할 때 중요한 선택지로 내가 하고 싶은 분야인가를 꼭 확인하자. 자바로 할 수 있는 영역은, 서버, 모바일, 빅데이터가 주다(물론 범용 언어이므로 뭐든 할 수 있다).
그리고 자바 책은 최소 2권 가지고 있는 게 좋다. 나는 C 언어를 익힐 때 5권도 넘게 봤다. 같은 내용이지만 저자마다 주안점이 달라서 각자 배울 게 있더라(그러니 저자가 다른 책으로 두 권). 빠르게 자바에 입문하는 책 한 권, 두고 두고 사전처럼 찾아보는 책 한 권. 이렇게 두 권이 있어야 빠르게 문법을 익히고, 깊이 있게 자바를 알 수 있다. 그 후에는 문법을 뛰어넘는 활용서를 읽으면 된다.