1. 자바언어 시작하기
이번 강좌에서는 현재 가장 대표적인 프로그래밍언어로 손꼽히는 자바언어에 대해 가상머신 개념에서 부터 JDK, 자바언어의 활용 분야에 대해 알아 봅니다.
이 강의를 통해 자바언어의 특징을 이해하고 자바언어를 왜 배워야 하는지 알 수 있게 됩니다.
01: 자바(Java)란?
자바는 현재 가장 대표적인 프로그래밍 언어 입니다. 조사 목적이나 관점에 따라 다른 결과가 있을 수 있지만 매년 조사를 진행하고 있으며 신뢰성 있게 인용되는 tiobe index 의 결과에 따르면 지난 수년동안 자바는 계속 가장 인기있는 프로그래밍언어 1위 입니다.
자바언어의 특징
자바언어의 대표적인 특징은 다음과 같습니다.
- 자바는 간결하면서도 강력한 객체지향 프로그램 언어.
- 플랫폼에 독립적으로 여러 운영체제나 하드웨어에서도 동일하게 실행.
- 많은 오픈소스 라이브러리를 통해 생산성 향성과 유지보수 비용 절감이 가능.
- GUI 기반의 응용 프로그램 개발에는 그다지 적합하지 않음.
- 정밀하게 하드웨어를 제어해야 하는 프로그램 개발역시 적합하지 않음.(JNI로 해결은 가능)
- 최신 Modern Programming Language 들에 비해 간결함이 떨어지고 코드가 복잡하고 불필요한 코드가 많음. -> Java8 ~ Java11까지 변화를 거쳐 많이 보완됨.
자바언어의 과거-현재-그리고 미래
자바는 어떤 배경에서 처음 만들어 졌는지, 또한 시대의 흐름에 따라 어떻게 변화해 왔는지, 어떤 요구사항들로 인해 새로운 기술들이 개발되었는지 살펴보는 것은 자바를 보다 잘 이해하는데 도움이 됩니다.
다음은 시대별 중요 이벤트로 살펴본 자바의 간략한 변천사 입니다.
자바의 탄생
- 1995년 썬 마이크로시스템즈의 제임스고슬링에 의해 개발 되어 처음 공개.
- 가상머신 이라는 개념으로 플랫폼 독립적인 구현이라는 당시로는 참신한 접근.
- 객체지향 개념과 개발 문화의 확산에 기여.
- 인터넷과 웹의 발전과 함께 하게 됨.
서블릿과 JSP
- 1997년 공식 발표 되었으며 자바에서 웹프로그램 개발을 지원.
- 인터넷의 폭팔적인 성장과 함께 서블릿은 자바의 대표적인 구현 분야가 됨.
- JSP는 서블릿 응용 기술로 웹화면(HTML)에 자바코드를 사용해 웹 프로그램 개발 효율을 높임.
- 오랜동안 웹개발의 기본 기술이었으나 수년전부터는 프론트엔드 기반 개발과 백엔드 개발환경의 변화 등으로 인해 예전 보다 직접적인 사용 비율은 낮아짐.
이클립스
- 1999년 IBM이 개발해 오픈소스로 기증한 자바 기반의 통합 개발도구 플랫폼.
- 자바 성장에 크게 기여했으며 자바의 기본 통합 개발도구로 자리 잡음.
- 이클립스 자체는 자바 이외의 언어 개발도 지원하는 개발 플랫폼 개념임.
- 최근에는 상용 제품인 IntelliJ로 많은 사용자들이 이동(안드로이드 스튜디오 영향도 있음).
모바일 인터넷
- 2000년대 초중반 휴대폰 보급 확산과 함께 모바일 인터넷 적용 시도.
- 휴대폰에 자바 가상머신을 탑재해 자바 프로그램을 실행시키고자 함.
- 휴대폰의 낮은 사양과 느린 인터넷 속도등으로 크게 성장하지는 못함.
안드로이드
- 2007년 구글이 스마트폰 운영체제인 안드로이드를 발표.
- OS 커널은 리눅스 기반이지만 응용 프로그램 개발의 기본을 자바로 채택.
- 오라클과의 자바 라이센스 문제 등으로 인해 내장 가상머신 변화 및 Kotlin 으로의 이동 가속화.
스프링프레임워크
- 2002년 로드존슨 출판한 Expert One-on-One J2EE Design and Developement 책에 기반.
- 2004년 1.0 발표 2019년 현재 5.x 버전이며 스프링부트로 인해 개발이 간소화 됨.
- 대규모 시스템 개발(엔터프라이즈 환경)에 적합한 오픈소스 프레임워크로 자바의 성장에 큰 역할을 함.
- 많은 백엔드 시스템 구현에 스프링프레임워크가 사용되고 특히 우리나라의 경우 활용도가 높음.
- 공공 개발에 요구되는 전자정부 프레임워크도 스프링 기반.
상용화
- 2019년 부터 자바의 상용화가 시작 되었지만 일반적인 목적의 경우 계속 무료로 사용할 수 있음.
- 임베디드, 상업용, 업무용 목적의 경우 별도 라이센스 필요.
- 기업에서 무료로 자바를 사용하려면 OpenJDK를 사용해야 함.
- 현재 자바 공식 버전은 11 이며 LTS(Long Term Support)의 첫버전으로 2023년 9월까지 지원됨.
02: 가상머신과 JDK
자바 바이트코드(Java Bitecode)
바이트코드는 자바 컴파일러가 생성하는 코드로 특정 하드웨어에서 직접 실행할 수 있는 기계어가 아니라 자바가상머신에 의해 해석될 수 있는 일종의 중간 코드 개념 입니다.
컴파일을 거쳐 다음과 같은 소스는 아래와 같은 바이트 코드로 변환 됩니다.
for (int i = 2; i < 1000; i++) {
...
}
0: iconst_2
1: istore_1
2: iload_1
3: sipush 1000
...
자바 가상머신(JVM: Java Virtual Machine)
자바의 가장큰 특징은 가상머신이라는 개념 입니다. 가상머신은 말 그대로 물리적인 기계장치가 아닌 가상의 기계장치 즉 소프트웨어로 구현된 기계장치를 말하는 것으로 자바 이전에 시작된 OAK라는 프로젝트에서 다양한 가전제품에서 구동될 수 있는 소프트웨어 개발을 위해 고안된 아이디어 입니다.
가상머신이라는 개념을 자바가 만든것은 아니지만 당시에 실제 성공한 프로젝트로는 자바가 대표적입니다. 이러한 가상머신의 특징으로 인해 특정 하드웨어나 운영체제에 영향을 받지 않고 동일한 프로그램의 개발이 가능해진 것입니다.
초기 자바의 모토(Moto)는 바로 WORA:Write Once Run Anywhere 였습니다.
- JVM은 자바의 가장 큰 특징으로 특정 하드웨어나 운영체제에 종속되지 않고 동일한 프로그램 개발과 실행이 가능한 기술.
- 자바소스는 컴파일후 바이트코드가 생성되며 JVM은 바이트코드를 해석해 운영체제에서 실행할 수 있도록 번역해 주는 역할을 담당 합니다.
- 가상머신의 개념은 윈도우 .Net 플랫폼에도 영향을 미쳤으며 최근에는 Kotlin, Scala, Clojure, Groovy 등 JVM기반의 언어들도 유행하고 있습니다. -> 언어의 문법구조는 다르지만 모두 자바와 같은 바이트코드를 생성해 JVM에서 실행이 가능.
자바 플랫폼
- 플랫폼은 API와 가상머신으로 구성되며 특정 자바 프로그램이 실행되는 환경으로 Java SE, Java EE, Java ME, Java Card, Java TV등이 있음.
- 실행환경에 따라 API 구성등이 달라짐.
- 일반적인 목적으로 사용하는 자바 플랫폼은 JAVA SE(Standard Edition).
- 대규모 개발을 위한 기업수준의 요구사항을 포함한 플랫폼은 JAVA EE(Java Enterprise Edition).
- JAVA EE의 경우 GlassFish 라고 하는 참조구현(Reference Implementation)만 제공되고 실제 제품은 오라클, IBM, JBOSS 등 관련 기업에 의해 구현되어 배포/판매 되는 형식임.
- 스프링 프레임워크등 오픈소스 프레임워크의 성장으로 인해 JAVA EE 시장은 축소 되었고 오라클은 JAVA EE를 이클립스 재단으로 이관함.
JDK(Java Development Kit)
- 자바 프로그램을 개발하기 위한 개발킷으로 컴파일러와 디버거등이 포함됨.
- 단순히 자바 프로그램을 실행하기 위해서는 JRE(Java Runtime Environment)만으로도 가능.
- Eclipse, IntelliJ 등 통합개발환경을 사용해도 JDK는 필요함.
03: 자바 활용 분야
많은 웹서비스의 백엔드 개발에 주로 사용되고 있습니다. 앞에서 언급한 서블릿, JSP, 스프링프레임워크등이 대표적입니다. 국내에서는 드물지만 외국에서는 PC기반의 프로그램이나 임베디드 장치에 들어가는 UI 프로그램 개발에도 종종 사용 됩니다. 전세계적으로 유명한 마인크래프트 라는 게임은 원래 자바로 만들어졌습니다.
이외에도 많은 영역에서 자바가 사용되지만 단적으로 이야기 하면 PC용 GUI프로그램 개발에는 적합하지 않으며 주로 서버측에서 돌아가는 프로그램 개발에 많이 사용되고 있다고 이해하면 되겠습니다.
- 네이버와 같은 인터넷 포탈, 인터넷 뱅킹, 쇼핑몰, SNS 플랫폼 등의 백엔드 서비스 개발.
- 강력한 Spring Framework 의 도움으로 고도의 성능과 안정성, 보안, 트랜잭션등이 요구되는 기업 시스템 개발에 널리 사용.
- 안드로이드의 대표 개발 언어로 모바일 분야에서 널리 사용되고 있으나 Kotlin, Go lang 등으로 인해 향후 다양한 변화가 예상.
- 빅데이터, 머신러닝 등 인공지능 기반 기술들에 자바 기반 소프트웨어들이 널리 사용되고 있음.
참고 자료
- 오라클 자바 홈페이지: http://java.oracle.com
- Introduction to Java Programming-IBM : https://www.ibm.com/developerworks
- Java Tutorial for Complete Beginners: https://www.udemy.com