jb.log

..loading

JAVA - 01. 자바 시작하기

June 21, 2019

자바(JAVA)란 무엇인가?

오늘부터 자바에 대해서 포스팅을 시작하겠다. 자바는 수많은 프로그래밍 언어중 하나이다. 먼저 프로그래밍 언어에 대한 정의를 하려고 한다.

프로그래밍 언어 프로그래밍 언어는 컴퓨터를 이용하여 특정 문제를 해결하기 위한 프로그램을 작성하기 위해 사용되는 언어이다. 프로그래밍 언어는 일반적으로 저급언어(기계어, 어셈블리어)와 고급 언어(컴파일 언어) 로 분류할 수 있다.

저급언어(Low Level Language)

기계어

컴퓨터가 직접 이해할 수 있는 언어 0과 1의 2진수 형태로 표현되며 수행시간이 빠르다. 기종마다 기계어가 다르므로 언어의 호환성이 없다.

어셈블리어

기계어와 1:1로 대응되는 기호로 이루어진 언어로, 니모닉(Mnemonic) 언어 라고도 한다. 하드웨어 제어에 주로 사용되며, 언어의 호환성이 없다. 컴퓨터가 직접 이해할 수 없으므로 어셈블리어로 작성된 프로그램은 어셈블러를 사용하여 기계어로 번역해주어야 한다.

고급 언어(High Level Language)

인간이 실생활에서 사용하는 자연어와 비슷한 형태 및 구조를 가지고 있다. 하드웨어에 대한 깊은 지식이 없어도 프로그램 작성과 수정이 용이하다. 컴퓨터가 이해할 수 있는 기계어로 번역하기 위해 컴파일러나 인터프리터가 사용된다. 기계어와 어셈블리어를 제외한 C, JAVA, Python등의 언어가 고급언어에 해당된다. 자바의 탄생과 배경 자바는 1991년에 썬 마이크로시스템즈(Sun Microsystems)사 에서 제임스 고슬링(James Gosling)이 고안하였고 그때 당시엔 오크(Oak), 또는 그린(Green) 이라고 불렸다.

오크는 최조에 가전제품에 쓰일 목적으로 개발이 되었지만 인터넷과 웹의 출현으로 오크의 초점은 가전제춤에서 인터넷으로 옮겨지게 되었다고 한다. 이후 1995년 이름을 자바(Java)로 변경하였다.

이전에 C, C++ 등의 언어가 존재했는데, 이 언어들은 직접 메모리를 핸들링하는 특징이 있다. 개발자가 컴퓨터의 메모리를 직접 관리하니 프로그램이 비정상적으로 다운되는 일 등이 생겼다. 그래서 자바는 위와 같은 언어들의 단점을 보안하려고 만들어졌고, 타 언어들과 다르게 자체적으로 메모리를 관리해준다.

2009년 썬 마이크로시스템즈는 오라클에 인수 합병되었고 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다.

JVM(Java virtual machine)

자바는 운영체제에 독립적이다. 이것을 가능하게 하는 것은 JVM이 운영체제 위에서 돌아가기때문이다.

예를 들어 Example.java 파일을 작성하면 javac Example.java 라는 명령어를 통해 Example.class(바이트코드) 파일로 변환할 수 있다. class 확장자 파일은 JVM이 읽을 수 있는 파일이다. 그리고 변환된 Example.class 파일을 java Example(여기서 확장자명은 생략한다) 명령어로 실행할 수 있게 되는 것이다. 이 과정을 다음과 같이 표현할 수 있다.

자바 소스코드(Example.java) -> 자바 컴파일러 -> 바이트코드(Example.class) -> 가상머신(JVM) -> 운영체제(윈도우 or 리눅스) 에서 실행 가능

컴파일이란?

프로그래밍 언어를 컴퓨터가 알 수 있는 기계어로 바꾸는 행위. 컴파일러(Compiler)는 기계어로 바꾸어주는 프로그램을 말한다.(자바를 설치하면 기본적으로 자바 컴파일러도 설치된다)

자바의 특징

이식성이 높은 언어이다 이식성이란 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것을 말한다. 자바 언어로 개발된 프로그램은 소스 파일을 수정하지 않아도, 자바 실행 환경(JRE)이 설치되어 있는 모든 운영 체제에서 실행 가능하다.

객체 지향 언어이다

객체 지향 프로그래밍(Object Oriented Programming, OOP)이란 프로그램을 개발하는 방법론중 하나이다. 말 그대로 객체를 만들어 상호작용하는 방식으로 프로그래밍을 한다. 또한 객체 지향 언어가 가져야 할 캡슐화, 상속, 다형성 기능을 완벽하게 지원한다.

메모리를 자동으로 관리한다

위의 자바의 탄생과 배경에서 설명했듯이 C 또는 C++이 메모리 관리를 위해 개발자가 직접 코드를 작성해야 하는 반면, 자바는 개발자가 메모리에 직접 접근할 수 없으며 자바가 직접 메모리를 관리한다.

멀티스레드를 쉽게 구현할 수 있다

자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 상관없이 멀티 스레드를 쉽게 구현할 수 있다.

함수 지향적인 코딩을 지원한다

함수적 프로그래밍은 대용량의 데이터 병렬 처리와 이벤트 지향 프로그래밍을 위해 적합하기 때문에 최근 들어 다시 주목받고 있다. 자바는 이 함수적 프로그래밍을 위해 람다식을 자바 8부터 지원한다. 람다식을 사용하면 컬렉션 요소를 필터링, 매핑, 집계 처리하는게 쉬워지고, 코드가 매우 간결해진다는 장점이 있다.

동적 로딩(Dynamic Loading)을 지원한다

애플리케이션이 실행될 때 모든 객체가 생성되지 않고, 각 객체가 필요한 시점에 클래스를 동적 로딩해서 생성한다. 또한 유지보수 시 해당 클래스만 수정하면 되기 때문에 전체 애플리케이션을 다시 컴파일할 필요가 없다. 따라서 유지보수가 쉽고 빠르다.

오픈소스 라이브러리가 풍부하다

자바는 오픈소스 언어이기 때문에 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스가 많다. 오픈소스 라이브러리를 사용하면 개발 시간을 단축하면서 안정성이 높은 애플리케이션을 쉽게 개발할 수 있다.

C나 C++에 비해 속도가 느리다

자바는 한 번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 C나 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다는 속도가 느리다. 그러나 바이트 코드를 기계어로 변환해주는 JIT 컴파일러 같은 기술 적용으로 JVM의 기능이 향상되어 속도의 격차가 많이 줄어들었다.

예외처리가 불편하다

자바는 다른 언어들과 달리 프로그램 실행 시 발생할 수 있는 예외(Exception)들을 개발자가 직접 선언하여 처리해야 한다. 그렇지 않으면 아예 컴파일이 되지 않는다.

Other Posts

October 1, 2019
jsp 프로젝트 만들기 - mvc1, mvc2
이전에 만든 `board-detail.jsp`은 DB와 잘 연결되어 화면에 데이터를 잘 출력하는 것을 볼 수 있다. 하지만 jsp 파일 내의 코드를 보면 자바코드와 html코드가 뒤엉켜 있는 것을 볼 수 있다. 이것을 스파게티 코드라 한다.
September 29, 2019
jsp 프로젝트 만들기 - 시작
본격적으로 jsp를 이용한 servlet 프로젝트를 만들어보겠다. jsp와 servlet의 활용 목적이 주된 내용이기 html/css 는 가급적 손대지 않고 비즈니스 로직에 집중하도록 하겠다.
September 25, 2019
jsp 프로그래밍
jsp란 `Java Server Pages` 의 약자이며 HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
September 24, 2019
Servlet 상태관리
서블릿은 요청이 오면 응답을 주고 메모리에서 사라지기 때문에 서블릿들 간의 연결이 불가능하다. 만약 기존의 데이터를 저장할 일이 생겼다고 하면 서블릿 스스로 저장할 수 있는 것은 아니다. 이것은 ServletContext로 해결할 수 있다.
September 22, 2019
한글 인코딩
servlet 클래스에서 한글을 출력하면 한글이 깨지는 것을 볼 수 있다. 해당 문제점은 다음과 같이 해결할 수 있다.
September 20, 2019
Servlet 다루기
기존의 html 문서만으로는 동적인 내용을 전달할 수 없다. 때문에 WAS(web application server) 에서 동작하는 프로그래밍 언어를 사용하면 가능하다.