Backend/Java 16

Java 버전별 특징

시대가 변함에 따라 Java는 많은 문법들이 생기고 성능 개선이 되었다. 키워드만 정리하고 필요 부분은 찾아서 보자. ... Java 7 Language: try-resource, String in switch, generics내 타입추론, 숫자에서 underscore 사용 가능 정식으로 G1 GC사용 Java FX 기본으로 포함 그 외 JVM 등 성능 보완 Java 8 JDK가 2개의 버전으로 나뉨. 하나는 폐쇄적인 상업코드 기반의 Oracle JDK, 하나는 오픈소스 기반의 Open JDK Oracle JDK는 존재하고 Open JDK에는 존재하지 않는 대표적인 기능으로 글꼴 라이브러리, Java Web Start가 있다. Lambda 및 함수형 프로그래밍 new Date and Time API(ja..

Backend/Java 2021.04.27

Stream

Java에서 말하는 stream은 2가지로 분류된다. Stream 운영체제에 의해 생성되는 가상의 연결고리로 실제 데이터의 입력, 출력에 관여하는 매개자의 역할을 한다. 이렇게만 읽으면 무슨 뜻인지 느낌이 오지 않는다. 다른 표현을 빌려본다. 한 번의 읽기 또는 쓰기 동작으로 전송되는 정보 한 장치에서 다른 장치로 보내지는 모든 정보 데이터가 열을 지어 차례대로 입력되는 것 입,출력 스트림은 단방향며 입,출력을 동시에 처리할 수 없다. 따라서, 사용목적에 따라 입력스트림, 출력스트림으로 나눌 수 있다. Java에서는 java.io package에서 InputStream, OutputStream class를 제공하여 스트림을 다룰 수 있다.(read(), write()) Java에서 기본적으로 Byte단위..

Backend/Java 2021.04.27

Optional

Optional은 null값을 다룰 수 있는 class로 주로 null과 관련된 로직에 사용하면 편리하고 좋다. (Java는 8버전부터 도입) NPE(Null Pointer Exception) 방지 null이 나올 수 있다는 것을 명시적으로 알려줌 null을 직접 다루지 않아 코드가 간결해지고 가독성이 좋아진다. 예를 들어 보자. Order class에 name이라는 변수가 있고 그 값을 정하지 않은 상태라고 하자. public class OptioanlTest { public static void main(String[] args) { Order order = new Order(); String name = order.getName(); => name에는 null값 String comp = “test”..

Backend/Java 2021.04.27

Thread 생성방식과 동작원리

Thread 생성방식 기본적으로 Thread는 생성할 때 Runnable Interface의 run을 구현해야한다. Thread 만드는 것을 여러 예시를 통해 볼텐데 결국에는 Runnable Interface의 run을 구현하는 것이다. Thread class는 껍데기이고 Runnable Interface를 구현하는 곳에 로직이 들어간다. 1.Runnable Interface를 구현한 class를 이용하여 만든 Thread 2.Thread를 상속하여 만든 class를 이용해 만든 Thread 3.익명 객체를 이용하는 방법 4.Daemon Thread Thread를 10개를 만들어서 1부터 10까지 찍는 예시를 한번 보자. Runnable Interface를 구현한 class를 이용하여 만든 Thread ..

Backend/Java 2021.04.23

String, StringBuilder, StringBuffer

String vs StringBuilder/StringBuffer String은 불변 객체이기 때문에 문자열 연산을 했을 때 원래 있던 문자열은 힙 메모리에 그대로 남겨진 채로 새 객체가 생성된다. 따라서, 남겨진 객체(Unreachble)는 GC의 대상이 된다. 문자열 연산이 빈번한 경우 성능에 영향을 끼치게 되는 요인이다. 반면, StringBuilder/StringBuffer는 가변성을 가지고 있기 때문에 객체 그대로 변경이 가능하다. 그래서 String보다 문자열 연산에 더 유리하다. StringBuilder와 StringBuffer의 차이는 동기화 유무이다. 멀티스레드에서 안전한 클래스는 StringBuffer, String이다. StringBuilder는 동기화 체크를 하지 않으므로 싱글 스레..

Backend/Java 2021.04.21

GC(Garbage Collection)

Garbage Collection이란? => Head영역의 메모리에 unrechable한 object들을 Garbage Collector가 메모리에서 제거시키는 것. (Heap 영역의 오브젝트 중 stack 에서 도달 불가능한 (Unreachable) 오브젝트들은 가비지 컬렉션의 대상이 된다.) C나 C++같은 경우는 OS레벨의 메모리에 직접 접근하여 명시적으로 해제해줄 수 있다. 그러나, 자바에서는 OS의 메모리 영역에 직접 접근하지 않고 JVM이라는 가상머신을 이용해서 간접적으로 접근한다. (JVM은 C로 만들어서 free를 호출한다고 한다) 예를 들어보자. String url = “https://”; url += “yaboong.github.io”; 위와 같이 문자열 더하기 연산에서 문자열이 합쳐지..

Backend/Java 2021.04.17