Java GC & Equality & Override/Overload
·
📘 Backend/Java
📘 Garbage Collector 힙 영역에서 사용하지 않는 객체들을 제거하는 작업 이 작업이 필요한 이유는 개발자가 메모리를 직접 해제할 수 없는 언어이기 떄문 동작 방식 간단한 Serial GC 방식으로 설명함 좀 더 진보된 GC는 G1 GC, ZGC가 있으며 이 문서에선 다루지 않음 Garbage Collection Minor GC, Major GC로 구분된다 Minor GC는 young 영역, Major GC는 old 영역에서 일어난다고 정의함 GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지함 이를 Stop-the-world 라고 한다 Minor GC는 Eden 영역이 가득 참으로부터 시작된다 Eden 영역에서 참조가 남아있는 객체를 Mark하고 Survivor 영역으로 복..
Java Object Mapper & Type Casting
·
📘 Backend/Java
📘 ObjectMapper Jackson 라이브러리의 클래스 JSON - > Java 객체로 Deserialization Java 객체 -> JSON으로 Serialization ObjectMapper는 생성 비용이 비싸기 때문에 Bean & Static으로 처리하는걸 권장 Serialization // Object Mapper를 이용한 직렬화 try { Question question = Question.builder() .questionId(1L) .title("제목") .content("내용") .build(); objectMapper.writeValue(new File("src/question.json"), question); } catch (IOException e) { e.printStackT..
Java Stream
·
📘 Backend/Java
📘 Stream 많은 수의 데이터를 다룰 때 컬렉션이나 배열에 데이터를 담고 원하는 결고를 얻기 위해 for문이나 iterator를 사용해서 코드를 작성해왔다. 그러나 이런 방식으로 작성된 코드는 너무 길고 가독성과 재사용성이 떨어진다. 또 다른 문제는 데이터 소스마다 다른 방식으로 다뤄야 한다는 단점이 있다. 예를 들면 List를 정렬할 때는 Collections.sort()를 사용하고, 배열을 정렬할 때는 Arrays.sort()를 사용해야 한다. 이러한 문제를 해결하기 위해 만든것이 Stream이다. 스트림은 데이터 소스를 추상화하고 데이터를 다루는데 자주 사용되는 메서드들을 정의 해놓았다. 스트림의 특징 데이터 소스(원본)을 변경하지 않는다. Iterator처럼 일회용이다. 작업을 내부 반복으로 ..
Java Lambda Expression
·
📘 Backend/Java
📘 Lambda 함수형 프로그래밍을 지원하는 문법요소 메소드를 하나의 식(expression)으로 표현한 것으로 코드의 간결성,명확성을 목표로 함 익명의 객체이기 때문에 java의 문법요소를 해치지 않으면서 함수형 인터페이스를 사용가능함 기본적으로 반환타입과 이름을 생략 가능하며, 익명 함수(anonymous function) 라고 불림 Lambda의 기본형식 //기존 메서드 표현 방식 void sayhello() { System.out.println("HELLO!") } //위의 코드를 람다식으로 표현한 식 () -> System.out.println("HELLO!") 메소드를 Lambda식으로 만드는 예시 int sum(int num1, int num2) { return num1 + num2; } ↓..
Java Annotation
·
📘 Backend/Java
📘 Annotation 컴파일러에게 문법 에러를 체크하도록 정보 제공 프로그램 빌드 시 코드 자동 생성할수 있도록 정보 제공 런타임에 특정 기능 실행하도록 정보 제공 표준 Annotation 자바에서 기본적으로 제공하는 애너테이션입니다. Annotation Name Description @Override 컴파일러에게 메서드를 오버라이딩하는 것이라고 알림 @Deprecated 앞으로 사용하지 않을 대상을 알릴 때 사용 @FunctionalInterface 함수형 인터페이스라는 것을 알 @SuppressWarning 컴파일러가 경고메세지를 나타내지 않음 메타 Annotation 애너테이션에 붙이는 애너테이션으로, 애너테이션을 정의하는 데에 사용됩니다. Annotation Name Description @Ta..