일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 검색어 추천
- 알람 시스템
- 숫자 블록
- 구현
- branch 전략
- AWS
- BFS
- 프로그래머스
- 백준
- 누적합
- 객체지향패러다임
- 수신자 대상 다르게
- 쿠키
- 깊게 생각해보기
- 트랜잭샨
- jwt 표준
- 셀러리
- gRPC
- piplining
- 결제서비스
- docker
- 이분탐색
- 좋은 코드 나쁜 코드
- 코드 계약
- prg 패턴
- spring event
- 완전탐색
- 카카오
- 디버깅
- 레디스 동시성
- Today
- Total
목록개발/Java (22)
코딩관계론
Synchronized CollectionSynchronized Collection은 멀티스레드 환경에서 컬렉션을 안전하게 사용할 수 있도록 동기화된 메서드나 블록을 사용하여 구현됩니다. 주로 Collections.synchronizedXXX() 메서드를 사용하여 기존 컬렉션을 동기화된 버전으로 감싸서 반환합니다. Synchronized Collection의 클래스 코드를 보시면 인스턴스 변수로 락을 위한 Object mutext가 존제합니다. static class SynchronizedCollection implements Collection, Serializable { @java.io.Serial private static final long serialVersionU..
제네릭 타입을 이해하기 위해선 먼저 공변과 불공변의 개념을 알아야 한다.공변공변이란 자기의 타입과 자신의 하위 타입까지 같다고 인식합니다. 아래의 코드를 보면 Anmain배열에 cats를 할당하고 있는데 Animal배열에서 Cat타입이 같다고 인식해 컴파일 오류가 발생하지 않는 경우입니다.class Animal {}class Cat extends Animal {}public class Main { public static void main(String[] args) { Animal[] animals = new Cat[10]; // 공변성 허용 animals[0] = new Cat(); // 유효 animals[1] = new Animal(); ..
자바에는 Error와 Exception이 존재하는데 이 두 클래스는 모두 Throwable 클래스를 상속 받습니다.그럼 java.lang.Error는 무엇일까?java.lang.Error는 시스템 수준에서 발생한 심각한 문제로 어플리케이션이 복구가 불가능한 상태가 됩니다. Error 클래스의 예로는 VirtualMachineError, OutOfMemoryError, StackOverflowError, AssertionError 등이 있습니다.그럼 java.lang.Exception는 무엇일까?java.lang.Exception는 어플리케이션 실행 중 복구 가능한 문제를 나타냅니다. 보통 프로그래머의 논리적 오류가 예외를 뜻합니다. Exception예제는 java.lang.RuntimeException,..
우리는 앞서 JVM의 메모리 구조를 살펴봤다 - 2024.06.08 - [개발/Java] - JVM 메모리 구조 JVM 메모리 구조이전 시간에는 JVM이 코드를 어떤 방식으로 실행하는지 알아봤다(2024.06.02 - [개발/Java] - 자바 어떻게 실행되는가?)지금부터는 JVM의 데이터 영역에 대해서 집중적으로 탐구해보겠다.JVM의 Run time datbjwan-career.tistory.com그 중에 heap을 설명하면서 heap 메모리를 정리하기 위해서 Garbage Collection이 작동한다고 배웠다. 그럼 프로그래머는 자신의 application에 맞는 GC를 선택해야 한다고 한다. 그게 좋은 자바 개발자라고 네이버가 소개함 그럼 이 Garbage Collection이 어떻게 작동될까? ..
Thread Safety여러 스레드가 한 함수를 동시에 호출해도 올바른 정답을 돌려준다면 thread-safe하다고 이야기합니다. 객체지향 패러다임에서는 객체를 기본 단위로 하여 상호작용하는 것입니다. Thread-safe하게 구현하기 위해서 지역변수만 사용하라, final값을 사용하라 등의 지침이 있지만 이는 우리가 알고 있는 객체의 모습이라고 보기 힘듭니다. 따라서 멤버 변수에서 어떻게 thread-safe를 구현하는지에 대해 집중하겠습니다. Race conditionRace condition (경쟁 조건)은 다수의 스레드가 공유 자원에 접근하여 예상치 못한 결과를 초래할 수 있는 상황을 가리킵니다. 주로 다음과 같은 상황에서 발생할 수 있습니다:경쟁조건이랑 다수의 쓰레드가 공유자원에 접근해 예상치 ..
자바 언어를 배우다보면 static, final 변수가 중요하다고는 배우지만 왜 중요한지 어떤 특성으로 인해서 공유가 가능한지, 수정이 불변한지는 배우지 않는다.Static 변수Static 변수는 모든 클래스 인스턴스에서 하나의 변수를 공유하기 위해서 사용됩니다. 하지만 어떻게 모든 인스턴스에서 하나의 변수 값을 참조할 수 있을까요? 컴파일 과정과 JVM의 메모리 영역을 생각해보면 답이 있다(2024.06.02 - [개발/Java] - 자바 어떻게 실행되는가?) 클래스 로더가 JVM의 바이트코드 파일을 읽어 메모리에 할당하면서 링킹 과정이 수행됩니다. 이때 static 변수가 초기화되며, 이후 초기화 과정을 통해 static 변수에 실제 값이 할당된다. 이 과정을 거치게 되면 static 변수는 메모리에..
이전 시간에는 JVM이 코드를 어떤 방식으로 실행하는지 알아봤다(2024.06.02 - [개발/Java] - 자바 어떻게 실행되는가?)지금부터는 JVM의 데이터 영역에 대해서 집중적으로 탐구해보겠다.JVM의 Run time data area 영역의 실행주기는 JVM의 시작과 종료, 각각의 thread 시작과 종료에 따라 나눌 수 있다.thread의 생명 주기에 따라 생성과 소멸하는 데이터 영역을 먼저 확인해보자.PC RegistersJVM은 여러 개의 쓰레드가 생성될 수 있고, 해당 쓰레드는 명령어를 실행중인데, 해당 명령어의 주소를 저장하는 영역입니다. 자바의 가상 머신은 여러개의 thread를 생성할 수 있고, 동시에 실행할 수 있기 때문에 각 thread는 고유한 프로그램 카운터 레지스터를 가지고 ..
개요프로그램을 실행하기 위해선 사람이 읽을 수 있는 언어(코드)에서 기계(바이너리)로 번역하는 과정을 거쳐야 한다. "이 과정을 컴파일 한다".라고 말한다. 그럼 자바에서는 어떤 방식으로 이 과정이 수행되는지 알아보자 자바가 실행되기 위해선 아래의 과정을 수행해야만 한다.자바 언어로 된 자바 파일을 작성한다javac 명령어로 해당 파일을 컴파일하여 바이트 파일로 변환한다바이트 파일을 JVM에서 로드한 후 컴퓨터가 읽을 수 있도록 기계어로 변환한다실행 Java 컴파일컴파일이라는 사전적 의미는 엮다라는 의미를 가지고 있다. 즉 내가 .java파일을 바이트 파일로 엮는 작업을 컴파일한다 라고 부른다. 그럼 이 컴파일이라는 작업을 수행하는 녀석이 바로 컴파일러다. 자바에서는 javac가 컴파일러가 되는데 여러분..
문제 이해하기Get 요청으로 다음과 같은 URI가 있고, 쿼리 파람을 통해서 예약 상태를 조회하고자 한다. 이 때 주어지는 조건이 여러가지 있는데 모두를 만족시켜야 한다.@GetMapping("/api/reservation/search") 문제 해결 방법쿼리파람을 DTO 객체에 리플렉션하기쿼리파람을 DTO 객체에 리플렉션을 하려면 객체의 기본생성자가 존제해야 한다. 그 이유는 Spring이 기본 생성자를 사용하는 이유는 리플렉션을 통한 객체 생성의 필요성, 객체 상태 초기화의 유연성, 데이터 바인딩의 일관성을 유지하기 위해서입니다. 기본 생성자가 없으면 이러한 과정을 수행할 수 없기 때문에, DTO 클래스에는 반드시 기본 생성자가 필요합니다. 1. 객체 생성의 일관성기본 생성자를 통해 객체를 생성하면, ..
"Why do I need to override the equals and hashCode methods in Java?"를 검색하면, 다음과 같은 답변이 나옵니다: [StackOverflow: Why do I need to override the equals and hashCode methods in Java?](https://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and-hashcode-methods-in-java)You must override hashCode() in every class that overrides equals(). Failure to do so will result in a violatio..