Java 개발 지식

DokBak·2022년 6월 22일
0

Java

목록 보기
1/3

Java 개발 지식

1. SDK JDK JRE JVM 비교

SDK ⊃ JDK

JDK = JRE + Development Tools

JRE = JVM + Library

  • SDK(Software Development Kit)

    • 소프트웨어 개발하는데 있어서 필요한 개발 도구를 의미
    • Java 개발시 SDK라고 하면, Java EE를 말하는 경우가 많다고 한다.
  • JDK(Java Development Kit)

    • SDK중에서도 Java개발에 특화되어 있는 개발 도구를 의미 한다.
    • Java 개발시, JDK라고 하면, Java SE를 말하는 경우가 많다고 한다.
  • JRE(Java Runtime Environment)

    • 컴파일된 자바 프로그램을 실행시킬 수 있는 환경으로 만들어주는 프로그램
    • JRE는 각 프로그램에 내장되어 배포되며, JDK에도 포함되어있다.
  • Development Tools

    • 자바 프로그램 개발에 도움이 되는 기능을 모아둔 도구 모음
    • 빌드, 디버거등 다양한 기능을 포함하고 있다.
  • JVM(Java Virtual Machine)

    • 자바로 만들어진 애플리케이션이 각 환경에서 실행되는 데 필요한 리소스를 확보하도록 보장하는 역할
  • Library

    • Java class Library와 Java class loader(OS Dynamic Library)가 있는데, 자바 프로그램을 킴에 있어서 필요한 모든 클래스를 로드하는 등의 역할을 한다.

2. Java Versions

2-1. Java8

2-1-1. 람다식 표현(Lamda expression)

람다식은 함수의 이름이 없기 때문에 익명함수로 부른다. 메소드를 가진 객체를 형성하는 형식

// 기존 처리 로직 
for (String value : collection){ 
    System.out.println(value); 
} 

// 람다식표현 로직 
collection.forEach(value -> System.out.println(value)); 

2-1-2 참조

참조의 경우, 기존 람다식 대신 매개체::메소드명 으로 표현 가능하다.

  • 메소드 참조

    • 메소드 참조는 클래스::메소드명으로 사용
      // 람다식표현 기본 로직 
      boolean isCheck = list.stream().anyMatch(u -> User.isCheckUser(u)); 

      // 메소드 참조로직 
      boolean isCheck = list.stream().anyMatch(User::isCheckUser); 
  • 인스턴스 메소드 참조

    • 인스턴스 참조는 인스턴스::메소드명으로 사용
    User user = new User(); 
    boolean isUserName = list.stream().anyMatch(user::isUserName); 
  • 생성자 참조

    • 생성자 참조는 클래스명::new로 사용
	Stream<User> stream = list.stream().map(User::new); 

2-1-3 스트림API (stream API)

컬렉션(배열)의 요소를 하나식 참조하여 람다식으로 처리할 수 있도록 해주는 반복자.
기존에는 컬렉션에 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하였는데 코드도 길고 가독성이 떨어졌던 것을 개선한 것이 스트림API

String[] arr = new String[]{"넷", "둘", "셋", "하나"}; 

// 배열에서 스트림 생성 
Stream<String> stream1 = Arrays.stream(arr); 
stream1.forEach(e -> System.out.print(e + " ")); 
System.out.println(); 

// 배열의 특정 부분만을 이용한 스트림 생성 
Stream<String> stream2 = Arrays.stream(arr, 1, 3); // 1< x <=3  
stream2.forEach(e -> System.out.print(e + " ")); 

결과 
: 넷 둘 셋 하나  
둘 셋 

2-1-4 Java.time 패키지 추가

Calendar 클래스(JDK제공, 초기 날짜 계산 클래스)

Calendar클래스
특징 1너무 복잡한 Calendar 클래스(월의 시작은 0부터, 요일계산도 복잡)
특징 2윤초(leap second)와 같은 상황이 고려되지 않았다.
특징 3Calendar인스턴스가 불변객체가 아니라서 수정될 가능성도 있었다.

Joda-Time

Joda-Time클래스
특징 1클래스에서 문제가 되었던 내용에 대해서 대부분 개선

Java.time(날짜나 시간을 변경시 변경되는 새 객체를 반환하여 멀티 쓰레드 환경에서 안정적)

Java.time클래스
핵심 클래스명내용
LocalTime시간 표현
LocalDate날짜 표현
LocalDateTime날짜 시간 표현
ZoneDateTime시간대까지 표현

객체 사용방법
클래스명.now()
클래스명.of(년, 월, 일)
클래스명.of(시, 분, 초)

2-1-5. 나즈혼(Nashorn)

자바스크립트의 엔진 Rhino -> Nashorn

  • 성능과 메모리 관리면에서 크게 개선되었다.

2-1-6. 32bit를 지원하는 마지막 공식 버전

상위 버전들은 모두 서드파티를 통해서만 지원

2-1-7. Paralle GC

Default GC (Garbage Collector)로 Paralle GC를 사용

2-2. Java11

2-2-1. 새로운 String 클래스의 메소드 추가

String 클래스
strip() 문자열 앞, 뒤의 공백 제거
stripLeading() 문자열 앞의 공백 제거
stripTrailing() 문자열 뒤의 공백 제거
IsBlank() 문자열이 비어있거나, 공백만 있는 경우 True 반환
String.trim().isEmpty()와 결과 동일
Repeat(n) n개의 문자열을 반복하여 붙여 반환

2-2-2. Java.nio.file.Files 클래스에 새로운 메소드 추가

메소드명설명
Path writeString(Path, String, Charset, OpenOption)파일(Path)에 문자열(String)을 작성하고 Path로 반환. 파일 오픈 옵션에 따라 작동 방식을 다르게함. charset은 기본 UTF-8
Path readString(Path, Charset)파일 전체 내용을 읽어서 String으로 반환하고, 파일 내용을 모두 읽거나 예외가 발생시 자동 close, charset은 기본 UTF-8
boolean isSameFIle(Path, Path)두 Path가 같은 파일을 가르키면 True, 다르면 False

2-2-3. 람다에서 로컬 변수 var 사용 가능

2-2-4. Javac를 통해 컴파일 하지 않고도 Java파일을 실행 가능

2-2-5. G1 GC

Default GC (Garbage Collector)로 G1 GC를 사용

참조 사이트

0개의 댓글