DEV/JAVA
-
[JAVA] Java Record 란?DEV/JAVA 2024. 6. 5. 01:41
Record란?변경이 불가한 데이터 객체를 쉽게 만들 수 있도록 해준다. 클래스보다 간결하고 효율적으로 데이터 객체를 생성할 수 있도록 설계되었다. Java14에서 preview로 나왔고 Java16에서 정식기능으로 포함되었다. 목표데이터를 간결하게 표현하기 위한 방법 제공개발자가 불변 데이터를 모델링하는데 집중하도록 함데이터 지향 메서드를 자동으로 구현특징간결성 : 필드를 정의하면 해당 필드를 기반으로 자동으로 메서드가 생성되어 코드의 양을 줄일 수 있고, 불필요한 보일러플레이트 코드를 줄여 가독성을 높여준다.메서드 자동 생성 : 필드를 기반으로 equals(), hashCode(), toString() 메서드를 자동으로 생성한다.생성자 자동 생성 : 필드를 기반으로 자동으로 생성자를 생성한다. (기본..
-
[JAVA] 자바 스터디 이모저모 OOP / POJO / JVM 메모리 구조 / GC / GC 알고리즘DEV/JAVA 2024. 5. 4. 18:09
스터디 주제java 에서 객체의 의미, OOP 란?POJO 가 무엇이고 왜 필요한가요?jvm 구조관점에서 메모리 영역에 객체와 메소드, 변수들이 어떻게 저장 되나요?상수와 static 의 필요성최신 자바 메모리 모델 소개gc 란?gc 는 어떻게 객체를 수집하나요? ( how do? )gc 대표 알고리즘 소개* OOP란?객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 약자로, 현실세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말한다. 현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍하는 것이다. 이것을 추상화라한다. 주요 특징1. 캡슐화 (은닉화) : 객체의 속성과 행위를 하나로 묶는 것. 목적은 구현 코..
-
[JAVA] 직렬화(Serialization) / ObjectInputStream, ObjectOutputStream / Serializable, transientDEV/JAVA 2024. 4. 23. 20:39
객체를 데이터 스트림으로 만드는것. = 객체에 저장된 데이터를 스트림에 쓰기(write)위해 연속적인(serial) 데이터로 변환하는 것 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 변환하는 기술이다. 🌟 역직렬화 : 반대로 스트림으로부터 데이터를 읽어 객체를 만드는것 ObjectInputStream, ObjectOutputStream 스트림에 객체를 출력하는 직렬화는 ObjectOutputStream을 사용하고, 스트림으로부터 객체를 입력하는 역직렬화는 ObjectInputStream을 사용한다. 각각 InputStream과 OutputStream을 직접 상속받지만 기반 스트림을 필요로하는 보조스트림이다. //파일에 객체 저장(직..
-
[JAVA] 쓰레드(Thread)의 동기화 / synchronized / Lock과 Condition / fork & join 프레임워크DEV/JAVA 2024. 4. 23. 20:27
멀티쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게된다. 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는것이 필요한데, 그래서 도입된 개념이 '임계 영역'과 '잠금(락,lock)'이다. - 공유데이터(객체)를 사용하는 코드 영역 : 임계 영역으로 지정 - 공유데이터(객체)가 가지고 있는 lock을 획득한 단 하나의 쓰레드만 임계영역 내 코드를 수행, 임계영역에서 벗어나서 lock을 반납해야 다른 쓰레드가 반납된 lock을 획득하여 임계영역 내 코드 수행 가능 → 즉, 쓰레드의 동기화란 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는것 방법 synchronized 블럭 사용 Lock과 C..
-
[JAVA] 쓰레드 (Thread)의 구현 / 싱글쓰레드, 멀티쓰레드 / 우선순위 / 쓰레드 그룹 / 데몬 쓰레드DEV/JAVA 2024. 4. 5. 00:37
1) 프로세스(Process)와 쓰레드(Thread)의 차이 - 프로세스 : ‘실행중인 프로그램’ → 작업관리자에서 실행중인 프로그램의 프로세스 확인 가능 - 쓰레드 : 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것 따라서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재. 둘 이상의 쓰레드를 가진 프로세스를 ‘멀티쓰레드 프로세스’라고 함 2) 쓰레드의 구현방법 : Thread클래스를 상속받는 방법과 Runnable인터페이스를 구현하는 방법이 있다. //1. Thread 클래스 상속 class MyThread extends Thread { public void run() { .. } //Thread 클래스의 run()을 Overriding } //2. Runnable 인터페이스 구현 class ..
-
[JAVA] 제네릭스(Generics) / 열거형 (Enum)DEV/JAVA 2024. 4. 3. 18:36
1) 제네릭스란? : 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시 타입 체크를 해주는 기능 → 의도하지 않은 타입의 객체가 저장되는것을 막아주고, 저장된 객체를 꺼낼때 원래 타입과 다른 타입으로 잘못 형변환 되어 발생할 수 있는 오류를 줄여준다. 장점 타입 안정성 제공 타입체크와 형변환을 생략하여 코드가 간결해짐 2) 사용 방법 : 클래스와 메서드에 선언 가능 지네릭 클래스 예시 //일반 클래스 class Box { Object item; void setItem(Object itme) { this.item = item; } Object getItem() { return item; } } //지네릭 클래스로 변경 class Box { //지네릭 타입 T 선언 T item; void s..
-
[JAVA] 스트림(Stream) 생성 / 중간연산 map,flatMap / 최종연산 reduce, collect / Optional (2)DEV/JAVA 2024. 3. 26. 16:16
1. 스트림 만들기 컬렉션 : Stream Collection.stream() ex : Stream intStream = list.stream(); 배열 Stream Stream.of(val) Stream Arrays.stream(val) ex 1 : Stream strStream = Stream.of( "a","b","c" ); ex 2 : Stream strStream = Arrays.stream(new String[]{ "a","b","c" }); 특정 범위의 정수 : 지정된 범위의 연속된 정수를 스트림으로 생성해서 반환 IntStream.range(int begin, int end) : end가 범위에 포함 X IntStream.rangeClosed(int begin, int end): end가 ..
-
[JAVA] 스트림(Stream) 기본 / 특징 / 연산 (1)DEV/JAVA 2024. 3. 20. 17:29
(1) 등장배경 컬렉션이나 배열에 데이터를 담고 원하는 결과를 얻기 위해 for문과 Iterator를 이용해 코드를 작성해왔으나, 이러한 코드는 가독성이 떨어지고 재사용성도 떨어진다. 또한 데이터 소스마다 다른 방식으로 다뤄야한다는 문제점과 컬렉션 클래스에 같은 기능의 메서드들이 중복해서 정의되어있다. 이러한 문제점들을 해결하기 위해 만들어진 것이 ‘스트림’ 이다. 스트림은 데이터소스를 추상화하고, 자주 사용되는 메서드를 정의해 놓았다. → 데이터 소스가 무엇이던 간에 같은 방식으로 다룰 수 있게 됨. → 코드의 재사용성이 높아짐 ex) 다음과 같은 배열과 리스트가 존재할때, String[] strArr = { “aaa”, “bbb”, “ccc” }; List strList = Arrays.asList(..