java
-
함수형 인터페이스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..
-
자바 메모리 모델 Java Memory ModelLanguage/Java 2023. 11. 30. 00:01
자바 메모리 모델은 자바 프로그램의 동시성을 다루는 메모리 동작에 대한 명세 = JVM이 동시에 실행되는 스레드 간의 메모리 접근을 어떻게 조정하는지에 대한 설명 이다. 🙈;; 아직은 너무 어려운 내용이었다. 일단 기록! 1. 메모리 배치 Memory Layout 요약 저장 영역 종류 Stack 로컬 변수 Stack 메소드 반환 값 Stack 메소드 호출 완료 후 실행이 이어질 위치 주소 - - Heap 객체 Heap 인스턴스 변수 = 멤버 변수 Heap static 변수 - - Method 영역 Metaspace 상수 풀 (클래스 및 인터페이스의 상수, 리터럴, 심볼릭 참조 등) Method 영역 Metaspace 클래스 메타데이터 (클래스 이름, 접근 제어자, 인터페이스, 슈퍼클래스 등 클래스와 관련..
-
싱글톤 패턴Language/Java 2023. 11. 30. 00:01
책을 보다가 싱글톤 패턴에 대한 코드를 봤는데, 내가 사용하는 코드와 다른 방식으로 설명을 해서 챗봇에게 책에서 본 코드와 내가 사용하는 코드를 비교해서 설명해달라고 부탁했다. 결론부터 얘기해보자면 두개는 다른 패턴의 싱글톤 구현 코드였고, 내가 사용하던 코드에는 심지어 문제가 있었다. 🙊 스레드 안전성이 없다고 한다, 관련해서 두 가지 문제점을 지적받았는데, 첫 번째로 synchronized 블록을 사용하지 않았기 때문에 여러 스레드가 동시에 getInstance()에 접근하게 된다면 Hello 인스턴스가 여러번 생성될 수 있는 문제가 있었고, 두 번째로는 멀티스레드 환경에서 Hello 인스턴스를 생성한 후 다른 스레드가 이것을 볼 수 없는 경우가 발생할 수 있다고 한다. 인스턴스 생성 과정에서 컴파일..
-
OkHttp3 라이브러리 사용 with 비동기Language/Java 2023. 11. 29. 06:22
서울시 공공 API를 한번에 약 2만개 가량 받아와서 db에 저장할 일이 있었는데, 이때 일반적으로 사용하는 동기 방식으로는 시간이 너무 오래걸렸었다.(6초~10초 정도..??) 그래서 비동기를 적용해 응답시간을 절반이상 줄일 수 있었는데, 이때 사용해본 비동기 요청 작업에 대해 정리하면서 다시 한번 학습 !! 그전에 OkHttp3 라이브러리에 대해서 먼저 간단히 정리 📝 0. OkHttp3 사용 방법 1. OkHttp 클라이언트 객체 생성 OkHttpClient client = new OkHttpClient.Builder() .build(); 2. Request 객체 생성 OkHttp는 클라이언트(내 pc. 서버에서 값을 받아 사용할 pc)에서 API 서버로 값을 요청한 후에 응답오는 값을 받아서 사용..
-
ThreadLanguage/Java 2023. 11. 29. 00:01
프로그램이 실행되면 OS로 부터 메모리를 할당 받아 프로세스 상태가 된다. 하나의 프로세스는 하나 이상의 thread를 가지게 된다. 프로세스의 실제 작업을 수행하는 단위는 thread이다. Multi Threading 여러 Thread가 동시에 수행되는 프로그래밍. Thread는 각각 자신만의 작업 공간을 가진다. (= Context ) 각 Thread 사이에서 공유하는 자원 Shared Resource이 있을 수 있다. ( static instance ) 여러 Thread가 자원을 공유하여 작업이 수행되는 경우 서로 자원을 차지하려는 race condition이 발생할 수 있다. 여러 Thread가 공유하는 자원 중 경쟁이 발생하는 부분을 임계 영역 Critical Section이라고 한다. 임계 영..
-
제네릭 Generic 프로그래밍Language/Java 2023. 11. 28. 00:01
제네릭 자료형 클래스에서 사용하는 변수의 자료형이 여러개 일 수 있고, 그 기능은 동일한 경우 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정할 수 있다. 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식이다. 자바 10부터 자료형 추론이 가능해졌다. T 자료형 범위 제한 상위 클래스에서 선언하거나 정의하는 메서드만 활용 할 수 있게 제한한다. 간단한 Generic 클래스 생성 예시 public class GenericPrinter { private T anything; public T getAnything() { return anything; } public void setAnything(T anything) { this.anything = anyth..
-
백준: 소금폭탄코딩테스트 문제 풀이/백준 2023. 11. 28. 00:01
내 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String now = scan.nextLine(); String target = scan.nextLine(); int[] aNow = makeIntArr(now); int[] aTarget = makeIntArr(target); String result = ""; for (int i = 2; i >= 0; i--) { int sleep = aTarget[i] - aNow[i]; if (sleep 0) { aTarget[i - 1]--; sleep..
-
백준: 문서 검색코딩테스트 문제 풀이/백준 2023. 11. 28. 00:01
내 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String a = scan.nextLine(); String b = scan.nextLine(); int cnt = 0; while (a.contains(b)) { cnt++; a = a.replaceFirst(b, " "); } System.out.println(cnt); } } String 클래스에서 제공하는 replaceFirst()를 활용해서 풀이! 다른 풀이방법으로는 반복문을 돌리면서 단어를 찾아 없애지 않고 (a의 길이 - a에서 b를 모두 없앤 길이) / b의..