Backend 39

try-with-resources

Java 7에서 try-with-resources 구문을 소개했다. 이 구문은 try블럭을 시작함과 동시에 자원을 할당하며 try블럭이 끝나면 자동으로 자원을 해제한다. 우리는 보통 try-catch-finally에서 finally에 자원을 해제하곤 했다. FileInputStream fis; try { fis = new FileInputStream(“file.txt”); } catch(Exception e) { ... } finally { fis.close(); }Java 7부터는 자동으로 자원을 해제해주는 방법이 생겼다. try(FileInputStream fis = new FileInputStream(“file.txt”)) { // do something } catch(Exception e) {}물..

Backend/Java 2021.06.08

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

매개변수(Parameter)와 전달인자(Argument)

필자는 매개변수(Parameter)와 전달인자(Argument)를 무분별하게 사용했었다. 그런데 이 둘은 쓰임이 다르다는 사실을 알게 되었다. 간단한 개념이긴하나 용어를 정확히 알고 지나가도록 하자. Parameter: 함수의 input으로 제공되는 변수를 의미한다. ex) int sum(int a, int b) { return a+b; }a와 b는 parameter이다. Argument: 함수를 호출할 때 실제 값들을 의미한다. ex) int result = sum(3, 5);여기서 3과 5는 전달인자이다. ko.wikipedia.org/wiki/매개변수_(컴퓨터_프로그래밍) https://wowon.tistory.com/101

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

인증과 세션(예전 방식부터 OAuth2.0 포함)

세션/쿠키 -> JWT -> Access Token/Refresh Token -> OAuth2.0의 서사를 잘 담고 있다. tansfil.tistory.com/58?category=475681 쉽게 알아보는 서버 인증 1편(세션/쿠키 , JWT) 앱 개발을 처음 배우게 됐을 때, 각종 화면을 디자인해보면서 프론트엔드 개발에 큰 흥미가 생겼습니다. 한때 프론트엔드 개발자를 꿈꾸기도 했었죠(현실은 ...) 그러나 서버와 통신을 처음 배 tansfil.tistory.com tansfil.tistory.com/59?category=475681 쉽게 알아보는 서버 인증 2편(Access Token + Refresh Token) 안녕하세요! 이전 포스팅에는 크게 세션/쿠키 인증, 토큰 기반 인증(대표적으로 JWT)..

String, StringBuilder, StringBuffer

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

Backend/Java 2021.04.21