728x90
2021.10.20 Java Study
자바의 발전과정
분류
- Java SE
- 표준 에디션, Java의 핵심 API와 기능들을 제공
- Java EE
- 서버 페이지에 특화된 에디션
- JSP와 서블릿을 비롯한 웹 어플리케이션 서버에 관련된 기술
- Java ME
- PDA나 셋톱박스, 센서 등의 임베디드 시스템 환경에 특화
- JavaFX
- 데스크톱 애플리케이션 개발 및 배포를 위한 에디션
- 크로스플랫폼과 이식과 GUI 라이브러리 제공
JDK와 JRE
- JRE ( Java Runtime Environment) ?
- Java 어플리케이션을 실행하기 위한 Java Virtual Machine을 구현하는 환경
- JDK ( Java Development Kit )
- Java 기반의 애플리케이션을 개발하는데 필요한 번들
- Java 애플리케이션과 애플릿을 작성하는데 필요한 JRE, API 클래스 집합, Java 컴파일러 Web Start 및 추가 파일 제공
- JVM, JRE, JDK는 플랫폼에 의존적이지만 덕분에 JDK를 통해 작성된 프로그램은 플랫폼
독립적으로 실행
애플릿 ?
- 인터넷 상에서 전송되고, 자바를 지원하는 웹브라우저에서 실행될 수 있도록 설계된 프로그램
- 다른 언어로도 애플리케이션을 개발할 수 있지만 애플릿은 자바만으로 개발 할 수 있다.
- 보안성과 이식성
- 보안성 → 자바는 컴퓨터와 네트워크 사이에 방화벽을 제공하여 보안성을 해결
- 이식성 → 다양한 플랫폼에 동적으로 다운로드되는 프로그램을 위해서는 필요
- 보안성과 이식성
- 하지만 자바 가상 머신을 설치를 필수로 하여 범용성 하락
- 자바 가상 머신을 통한 실행으로 느린 속도와 꾸준함 패치에도 불구하고 뚫리는 보안성에 JAVA 9 이후 지원 종료 → Java Web Start 로 대체
스프링 프레임워크 (Spring Framework)
- 동적 웹을 개발하기 위한 어플리케이션 프레임워크
- JVM환경에서 작동하며 아파치 라이선스 2.0를 따른다.
- 특징
- POJO(Plain Old Java Object) 방식 : J2EE Framewrok에 비해 인터페이스를 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기에 용이하고 객체가 가볍다.
- 관점 지향 프로그래밍(Aspect Oriented Programming, AOP)
- 관심의 분리 → 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리할 수 있다.
- 중복 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용용이 등
- 의존성 주입(Dependency Injection, DI) : 구성요소간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일을 통해 정의한다.
- 두 객체 간의 결함도를 낮춤
- 객체의 유연성을 높임
- 테스트 작성을 용이하게 함
- 제어 반전( Inversion of Control, IoC) : 외부 라이브러리 코드가 개발자의 코드를 호출한다. 즉, 제어권이 프레임워크에게 있어 필요에 따라 스프링 프레임워크가 사용자의 코드를 호출
- 작업 구현 방식과 작업 수행을 분리
- 모듈 제작시 외부 프로그램의 결함에 대해 신경을 쓸 필요가 없다
- 미리 정해진 협약대로만 동작하면 다른 시스템 동작을 신경쓸 필요가 없다
- 모듈을 바꿔도 다른 시스템에서 부작용을 일으키지 않는다.
- MVC 패턴 (Model - View Controller pattern, MVC ) : 필수적인 디자인 패턴으로 불리는 MVC 패턴을 사용한다. DispatcherServlet이 Controller를 담당하며 @( Annotaion ) 으로 선언되어 있는 각 서비스로 분산시켜준다.
- 트랙잭션 관리 : 추상화된 트랙잭션을 XML 설정파일 등을 이용해 관리 할 수 있다.
- 생명주기 : 자바 객체의 생성, 소멸을 직접 관리하며 필요한 객체만 사용할 수 있다.
- myBatis와 같은 데이터베이스 처리 라이브러리 외에도 많은 것들을 지원하는 다양한 서비스 제공한다.
Java 주요 Release History
출시 주기와 LTS
- 원래 Java는 2년마다 크게 새로운 기능의 도입과 함께 새로운 버전을 출시 할 계획이였다
- Java 10부터는 6개월 단위로 출시되고 지원기간이 긴버전 (LTS)와 짧은 버전으로 나뉘어져있다.
- LTS는 8년간 보안 업데이트와 버그 수정이 지원되고, non-LTS는 6개월의 업데이트가 지원된다.
- LTS 버전은 3~4년 주기로 출시되고 현재까지 최신버전은 21년도에 나온Java SE 17이고 Java SE 21이 23년도에 출시예정이다.
1. JDK 1.0a
- 1994년
2. JDK 1.0a2
- 1995년 5월 23일
- 자바 언어의 발표
3. JDK 1.1
- 1997년 2월 19일
- Inner Class
- JavaBeans
- RMI
- Reflection
- Unicode
- 국제화
4. J2SE 1.2
- 1998년 12월 8일
- strictfp
- SWING CORBA
- Collections
- JDK → J2SE
5. J2SE 1.3
- 2000년 3월 8일
- HotSpot JVM
- JNDI
- JPDA
- JavaSound
- RMI → CORBA 지원
6. J2SE 1.4
- assert
- regular Expression
- NIO
- IPv6
- XML API
- JCE
- JSSE
- JAAS
- Java Web Start
7. J2SE 5
- 2004년 9월 30일
- generics
- annotaion
- auto boxing / unboxing
- enumeration
- 가변길이 파라미터
- static import
- concurrency API
- 1을 빼고 표시
8. Java SE 6
- 2006년 12월 11일
- interface에 @Override 추가
- JDBC 4.0
- Scripting Language Support
- Java Compiler API
- Pluggable annotation
- J2SE → Java SE 로 변경
9. Java SE 7
- 2011년 7월 7일
- diamond operator ( <> )
- try-resource
- multi-catch
- switch문에 String 사용
- concurrency API (new)
- File NIO (new)
- Java2D 지원
- dynamic Language 지원
10. Java SE 8
- 2014년 3월 18일
- lambda expression
- type annotaion
- stream api 추가
- repeating annotaion
- static link library
- interface default method
- unsigned integer 계산
- 날짜와 시간 API ( new ) → JodaTime
- rhino 대신 nashorn javascript 엔진 탑재
- 32비트 지원 마지막 공식 버전
11. Java SE 9
- 2017년 9월 21일
- Jingsaw 기반 런타임 모듈화
- JShell 추가
- private interface method
- immutable collection
- 통합 로깅
- HTTP/2
- HTML 5 JavaDoc
- 프로퍼티 파일에 UTF-8 지원
- 64비트 버전만 출시
12. Java SE 10
- 2018년 3월 20일
- var 키워드를 이용한 지역타입추론
- 병렬처리 가비지 컬렉터
- 개별 Thread 로 분리된 Stop-The World
13. Java SE 11
- 2018년 9월 25일
- lambda 파라미터에 대한 지역변수 문법
- 엡실론 가비지 컬렉터
- HTTP 클라이언트 표준화
- OracleJDK의 독점기능이 OpenJDK에 이식
14. Java SE 17
- 2021년 9월 17일
Java 외 JVM에서 작동하는 다양한 언어
- 최근에 대량의 데이터와 클라우드 환경에서 동시성의 문제가 중요하게 되었고 이러한 문제를 해결하기 위해서는 **불변(Immutable)**의 데이터의 활용을 핵심으로 접근하는게 중요해졌다.
- 함수형 패러다임의 접근 방법이나 메시징 기반 아키텍쳐가 빠르게 넓혀나갔고 스칼라와 같은 함수형 언어나 기술들이 대안으로 떠오르고 있다.
- JVM 플랫폼 자체와 그 위에서 돌아가는 여러 라이브러리는 그대로 두고, 컴파일을 통해 클래스 파일을 생성하는 원본 언어만 대체하는 접근이 널리 쓰이고 있다.
- 대표적인 언어
- Clojure
- Groovy
- Kotlin
- Scala
자바의 미래
- 자바는 새로운 발전과 새로운 기술을 충분한 시간동안 검토해 매끄럽게 작동하고 이해하고 사용하기 쉬우며 확장 가능한 상태로 만든 다음 최대한 폭넓은 사용자에게 제공하는 방식을 추구한다. 자바 8의 람다가 바로 이런 예다.
- 자바는 앞으로 JVM의 다양한 언어를 개발하는 사람들 사이에서 대화도 활발히 이뤄지는 만큼 흥미롭게 지켜볼 부분이라고 생각한다.
참고문서
https://www.holaxprogramming.com/2017/08/16/java-history/
https://en.wikipedia.org/wiki/Java_version_history
'자바 스터디' 카테고리의 다른 글
리플렉션(Reflection) ? (0) | 2021.11.17 |
---|---|
GC ( Garbage Collection ) ? (0) | 2021.11.10 |
자바의 컴파일 과정과 JVM에서 HEAP의 변화 (0) | 2021.11.03 |
JVM( Java Virtual Machine ) 이란 (0) | 2021.10.27 |
[Java] JVM과 자바의 버전별 변화 (0) | 2021.10.25 |