Java GC & Equality & Override/Overload
📘 Backend/Java2023. 4. 2. 09:06Java GC & Equality & Override/Overload

📘 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/Java2023. 4. 2. 09:03Java Object Mapper & Type Casting

📘 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/Java2023. 4. 2. 08:34Java Stream

📘 Stream 많은 수의 데이터를 다룰 때 컬렉션이나 배열에 데이터를 담고 원하는 결고를 얻기 위해 for문이나 iterator를 사용해서 코드를 작성해왔다. 그러나 이런 방식으로 작성된 코드는 너무 길고 가독성과 재사용성이 떨어진다. 또 다른 문제는 데이터 소스마다 다른 방식으로 다뤄야 한다는 단점이 있다. 예를 들면 List를 정렬할 때는 Collections.sort()를 사용하고, 배열을 정렬할 때는 Arrays.sort()를 사용해야 한다. 이러한 문제를 해결하기 위해 만든것이 Stream이다. 스트림은 데이터 소스를 추상화하고 데이터를 다루는데 자주 사용되는 메서드들을 정의 해놓았다. 스트림의 특징 데이터 소스(원본)을 변경하지 않는다. Iterator처럼 일회용이다. 작업을 내부 반복으로 ..

Java Lambda Expression
📘 Backend/Java2023. 4. 1. 12:12Java Lambda Expression

📘 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/Java2023. 4. 1. 12:03Java Annotation

📘 Annotation 컴파일러에게 문법 에러를 체크하도록 정보 제공 프로그램 빌드 시 코드 자동 생성할수 있도록 정보 제공 런타임에 특정 기능 실행하도록 정보 제공 표준 Annotation 자바에서 기본적으로 제공하는 애너테이션입니다. Annotation Name Description @Override 컴파일러에게 메서드를 오버라이딩하는 것이라고 알림 @Deprecated 앞으로 사용하지 않을 대상을 알릴 때 사용 @FunctionalInterface 함수형 인터페이스라는 것을 알 @SuppressWarning 컴파일러가 경고메세지를 나타내지 않음 메타 Annotation 애너테이션에 붙이는 애너테이션으로, 애너테이션을 정의하는 데에 사용됩니다. Annotation Name Description @Ta..

Java Collection
📘 Backend/Java2023. 4. 1. 11:58Java Collection

📘 Collection FrameWork 여러 데이터들의 집합,메소드들을 미리 정의해놓은 것 특정 자료구조에 데이터를 추가&삭제&수정&검색 등의 동작을 수행하는 메소드 제공 컬렉션 프레임워크의 구조 컬렉션의 주요 인터페이스 3가지 list와 set은 공통점이 많아 공통점을 추출하여 추상화한것이 Collection 이라는 인터페이스임 List List는 데이터의 순서가 유지되며, 중복 저장이 가능한 컬렉션을 구현하는 데에 사용됩니다. ArrayList, Vector, Stack, LinkedList 등이 List 인터페이스를 구현합니다. Set Set은 데이터의 순서가 유지되지 않으며, 중복 저장이 불가능한 컬렉션을 구현하는 데에 사용됩니다. HashSet, TreeSet 등이 Set 인터페이스를 구현합니..

Java Try-with-Resource & Multi Catch
📘 Backend/Java2023. 4. 1. 11:41Java Try-with-Resource & Multi Catch

📘 Try-With-Resource JDK 1.7 부터 try-catch의 변형인 try-with-resources가 추가되었다. 주로 입출력에 필요한 클래스들 중 사용 후 닫아줘야 하는것들을 자동으로 닫아준다. 그래야 사용했던 자원(resources)가 반환되기 때문이다. 아래 예시는 DataInputStream을 이용해 파일로부터 데이터를 읽는 코드이다. 데이터를 읽는 도중 예외가 발생하더라도 Stream이 닫히도록 finnaly 안에 close()를 넣었다. 별 문제가 없어 보이는 코드지만 진짜 문제는, close()가 예외를 발생시킬 수 있다는데 있다. try { fis = new FileInputStream("score.dat"); dis = new DataInputStream(fis); } c..

image