Language
-
UUID.randomUUID()Language/Java 2023. 12. 1. 00:01
보고 배운 곳 : offbyone.tistory UUID 클래스를 사용해서 유일한 식별자를 생성할 수 있다. 숫자 일련번호를 사용한 식별자도 각각의 데이터를 구분하는데 충분하지만, 다른 데이터를 유추하기 쉽다는 단점이 있다. UUID는 아래 3가지 경우에 사용 될 수 있다. 업로드된 파일명의 중복을 방지하기 위해 파일명을 변경할 때 사용. 첨부파일 파일 다운로드시 다른 파일을 예측하여 다운로드하는것을 방지하는데 사용. 일련번호 대신 유추하기 힘든 식별자를 사용하여 다른 컨텐츠의 임의 접근을 방지하는데 사용. UUID 클래스의 randomUUID() 메서드를 호출해야 하고, 이 때 반환값이 객체이기 때문에, 문자열 값만 필요할 경우 toString() 메서드를 활용해주어야 한다. UUID.randomUUI..
-
StreamLanguage/Java 2023. 12. 1. 00:01
스트림이란? 배열, 컬렉션 대상으로 연산을 수행 컬렉션은 기본으로 stream()을 호출할 수 있다. 배열은 Arrays 이용! 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 한다. 자료 처리에 대한 추상화가 구현되었다고 한다. 한번 생성하고 사용한 스트림은 재사용 할 수 없음 스트림 연산은 기존 자료를 변경하지 않는다. 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성되므로 연산이 수행되도 기존 자료에 대한 변경은 발생하지 않는다. 스트림 연산은 중간 연산과 최종 연산으로 구분된다. 중간 연산은 여러 개의 연산이 적용될 수 있지만, 마지막 연산은 단 하나만 적용할 수 있다. 최종 연산이 호출되어야 중간 연산에 대한 수행이 이루어 지고 , 그 결과가 만들어진다. 이런 연산을 ..
-
함수형 인터페이스Language/Java 2023. 12. 1. 00:01
Functional Interface java 8에서 도입된 개념으로 정확히 하나의 추상 메서드를 가진 인터페이스를 말한다. 이 함수형 인터페이스는 람다 표현식으로 잘 활용된다. 자바에는 여러가지 내장된 함수형 인터페이스가 있지만, 특히 자바 공부할 때 기능 설명 부분에서 자주 볼 수 있었던 몇 가지 인터페이스에 대해서 정리 ✏️ Function 매개변수 : T Return 타입 : R 추상 메서드 : apply() 기능 : T 타입의 인자를 받으며, R 타입의 결과를 반환한다. 사용 예시 기본 표현 방식 사용 public static void getLastIndex(String text) { Function getBasicLastIndex = new Function() { @Override public..
-
enum 클래스Language/Java 2023. 11. 30. 00:01
열거형 클래스 enum enum 키워드를 사용하는 열거형 클래스에는, 상수값을 나열하여 사용하는 방법 외에도 다양한 사용 방법이 있다. 일반적인 클래스와 마찬가지로, 생성자, 필드, 메서드를 가질 수 있다. 이 주제를 정리하게 된 이유는 강의 실습 중에 아래와 같은 사용을 경험했고 전혀 이해하지 못했기 때문이다. 🔻 실습 중 사용된 코드들 // 1. Enum 클래스 정의 @Getter @AllArgsConstructor public enum ErrorCode { USER_NOT_FOUND("사용자가 없습니다."); private final String description; } // 2. 1에서 정의한 Enum 클래스를 사용하기 위한 AccountException 클래스 작성 @Getter @Setter..
-
OptionalLanguage/Java 2023. 11. 30. 00:01
Optional java.util.Optional Java8에서 등장! null이 나올수 있는 객체를 감싸서 null이 나올 수 있는 객체를 더욱 안전하게 사용할 수 있게 해주는 클래스이다. Optional 형태로 사용하는데 , 이것은 T 객체가 null을 반환할 가능성이 있음을 명확하게 나타낸다. Optional 클래스를 사용함으로써 NullPointerException 에러를 방어할 수 있다. Optional 생성 1. Optional 반환하는 메서드 정의 public interface AccountRepository { Optional findFirstByOrderByIdDesc(); } 2. Optional.of(T value) T 자료형인 value가 null이 아닌 경우 반환 값 : Optin..
-
싱글톤 패턴Language/Java 2023. 11. 30. 00:01
책을 보다가 싱글톤 패턴에 대한 코드를 봤는데, 내가 사용하는 코드와 다른 방식으로 설명을 해서 챗봇에게 책에서 본 코드와 내가 사용하는 코드를 비교해서 설명해달라고 부탁했다. 결론부터 얘기해보자면 두개는 다른 패턴의 싱글톤 구현 코드였고, 내가 사용하던 코드에는 심지어 문제가 있었다. 🙊 스레드 안전성이 없다고 한다, 관련해서 두 가지 문제점을 지적받았는데, 첫 번째로 synchronized 블록을 사용하지 않았기 때문에 여러 스레드가 동시에 getInstance()에 접근하게 된다면 Hello 인스턴스가 여러번 생성될 수 있는 문제가 있었고, 두 번째로는 멀티스레드 환경에서 Hello 인스턴스를 생성한 후 다른 스레드가 이것을 볼 수 없는 경우가 발생할 수 있다고 한다. 인스턴스 생성 과정에서 컴파일..
-
자바 메모리 모델 Java Memory ModelLanguage/Java 2023. 11. 30. 00:01
자바 메모리 모델은 자바 프로그램의 동시성을 다루는 메모리 동작에 대한 명세 = JVM이 동시에 실행되는 스레드 간의 메모리 접근을 어떻게 조정하는지에 대한 설명 이다. 🙈;; 아직은 너무 어려운 내용이었다. 일단 기록! 1. 메모리 배치 Memory Layout 요약 저장 영역 종류 Stack 로컬 변수 Stack 메소드 반환 값 Stack 메소드 호출 완료 후 실행이 이어질 위치 주소 - - Heap 객체 Heap 인스턴스 변수 = 멤버 변수 Heap static 변수 - - Method 영역 Metaspace 상수 풀 (클래스 및 인터페이스의 상수, 리터럴, 심볼릭 참조 등) Method 영역 Metaspace 클래스 메타데이터 (클래스 이름, 접근 제어자, 인터페이스, 슈퍼클래스 등 클래스와 관련..