티스토리 뷰

Java

java - 1

kingsubin 2020. 7. 5. 12:11
  • 자바란 ? 

Java는 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다.

자바는 자바 가상 머신 (Java Virtual Machine)을 사용하여, 운영체제와는 독립적으로 동작 가능하다.

따라서 자바는 어느 운영체제에서나 같은 형태로 실행 가능하다.

 


 

  • 자바의 특징

장점)

1. 운영체제와는 독립적으로 실행 할 수 있다.

2. 불필요한 기능을 제거해 다른 언어에 비해 배우기 쉽다.

3. 자동 메모리 관리 등을 지원하여 안정성이 높다.

4. 연산자 오버로딩을 금지하고 제네릭을 도입함으로써 코드의 가독성 상승

 

단점)

1. 실행을 위해서는 JVM을 거쳐야 하므로 , 다른 언어에 비해 실행 속도가 느리다.

2. 예외 처리가 잘 되어 있지만, 개발자가 일일이 처리를 지정해 줘야 한다는 불편하다.

3. 코드의 길이가 다른 언어에 비해 긴 편이다.

 


  • 자바 프로그램의 실행 과정


  • 자바 컴파일러

 자바로 작성한 자바 소스 코드를 JVM이 이해할 수 있는 자바 바이트 코드로 변환시켜준다.

컴파일러는 자바 설치시 javac.exe라는 실행 파일 형태로 설치된다.

 


  • 자바 바이트 코드

JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미한다.

자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1byte라서 자바 바이트 코드라고 불리운다.

이러한 자바 바이트 코드의 확장자는 .class이다.

JVM이 설치 되어 있다면, 어떤 운영체제에서라도 실행 될수 있다.

 


  • 자바 가상 머신 (JVM)

자바 바이트 코드를 실행시키기 위한 가상의 기계이다.

자바로 작성된 모든 프로그램은 자바 가상 머신에서만 실행 될 수 있으므로, 실행하기 위해서는 반드시 JVM이 필요하다.

따라서 오라클은 대부분의 주요 운영체제뿐만 아니라 웹,스마트폰,가전기기 등에서도 손쉽게 설치할 수 있도록 지원한다.

 

서로 다른 운영체제라도 JVM만 설치되어 있다면, 같은 자바 프로그램이 아무런 추가 조치 없이 동작 가능하다.

따라서 한 번만 프로그램을 작성하면, 모든 운영체제에서 같이 사용할 수 있는 장점이 있다.

 

단, JVM은 운영체제에 종속적이므로, 각 운영체제에 맞는 JVM을 설치해야 한다.

또한, 자바 프로그램은 일반 프로그램보다 JVM을 한 단계 더 거쳐야 하므로, 상대적으로 실행 속도가 느리다는 단점이 있다.

 


  • JVM의 구성

1. 자바 인터프리터 (interpreter)

2. 클래스 로더 (class loader)

3. JIT 컴파일러 (Just-In-Time compiler)

4. 가비지 커렉터 (garbage collect)

 

1) 자바 인터프리터

컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 역할을 하는것이 자바 인터프리터 (interpreter)이다.

 

2) 클래스 로더

자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 JVM과 연결된다.

이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 바로 클래스 로더 (class loader)이다.

 

3) JIT 컴파일러

프로그램이 실행 중인 런타임에 실제 기계어로 변환해주는 컴파일러를 의미한다.

동작 번역 (dynamic translation)이라고도 불리는 이 기법은 프로그램의 실행 속도를 향상시키기 위해 개발되었다.

즉, JIT 컴파일러는 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 바로 기계어로 변환하는데 사용한다.

 

4) 가비지 컬렉터

JVM은 가비지 컬렉터(garbage collector)를 이용하여 더는 사용하지 않는 메모리를 자동으로 회수해준다.

따라서, 개발자가 따로 메모리를 관리하지 않아도 되므로, 더욱 손쉽게 프로그래밍을 할 수 있도록 도와준다.

 


  • JAVA8 변경사항

1. 람다 표현식 (lambda expresssion) : 함수형 프로그래밍

2. 스트림 API (stream API) : 데이터의 추상화

3. java.time 패키지 : Joda-Time 을 이용한 새로운 날짜와 시간 API

4. 나즈혼 (Nashorn) : 자바스크립트의 새로운 엔진

 


  • 람다 표현식 (Lambda Expression)

람다 표현식 (lambda expression)이란 간단히 말해 메소드를 하나의 식으로 표현한 것 이다.

즉, 식별자 없이 실행할 수 있는 함수 표현식을 의미하며, 따라서 익명 함수 (annoymous function)라고도 부른다.

 

메소드를 이렇게 람다 표현식으로 표현하면 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용할 수 있다.

또한, 람다 표현식은 메소드의 매개변수로 전달될 수도 있고, 메소드의 결괏값으로 반한될 수도 있다.

이러한 람다 표현식은 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높이는데 목적이 있다.

 


  • 스트림 API (Stream API)

자바에서는 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용한다.

또한, 이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자를 사용하며 매번 코드를 작성해야 했다.

하지만 이렇게 작성된 코드는 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 불가능하다.

 

이러한 문제점을 극복하기 위해서 도입된 방법이 바로 Stream API 이다.

스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공한다.

따라서, 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있다.


 

  • java.time 패키지

1. Calendar 인스턴스는 불변 객체가 아니라서 값이 수정될 수 있다.

2. 윤초(leap second)와 같은 특별한 상황을 고려하지 않는다.

3. Calender 클래스에서는 월을 나타낼 때 1월부터 12월을 0부터 11까지로 표현하는 불편함이 있다.

 

JAVA SE 8 버전에서는 발전된 java.time 패키지를 제공한다.

 


  • 나즈혼(Nashorn)

지금까지 자바스크립트의 기본 엔진으로는 모질라의 리노(Rhino)가 사용되어 왔다.

하지만 세월이 흐르면서 자바의 최신 개선 사항 등을 제대로 활용하지 못하는 등 노후화된 모습을 보여주었다.

 

따라서 JAVA SE8 버전부터는 새로운 엔진으로 오라클의 나즈혼 (Nashorn)을 도입하였다.

나즈혼은 기존에 사용되어 온 리노에 비해 성능과 메모리 관리 면에서 크게 개선된 스크립트 엔진이다.

 

 

 

※출처

tcpschool.com/java/java_intro_programming

'Java' 카테고리의 다른 글

JPA - 6. 프록시와 연관관계 관리  (0) 2020.07.25
JPA - 5. 상속관계 매핑  (0) 2020.07.25
java - 6) 클래스  (0) 2020.07.20
java - 5) 배열  (0) 2020.07.19
java -2) 타입  (0) 2020.07.08