일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- piplining
- BFS
- AWS
- 완전탐색
- 좋은 코드 나쁜 코드
- 검색어 추천
- jwt 표준
- docker
- 디버깅
- 깊게 생각해보기
- 주식
- 결제서비스
- 이분탐색
- gRPC
- JPA
- 숫자 블록
- 셀러리
- prg 패턴
- 카카오
- 구현
- 프로그래머스
- 트랜잭샨
- spring event
- 레디스 동시성
- 백준
- 누적합
- branch 전략
- 알람 시스템
- 객체지향패러다임
- 쿠키
- Today
- Total
목록분류 전체보기 (167)
코딩관계론
자바에는 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가 컴파일러가 되는데 여러분..
객체지향이란객체지향 프로그래밍은 프로그램을 구성하는 기본 단위인 '객체'를 중심으로 하는 프로그래밍 패러다임입니다.객체는 데이터와 그 데이터를 처리하기 위한 메서드를 함께 묶은 것으로, 이러한 객체들은 메시지를 주고받고, 상호작용하여 프로그램의 기능을 수행합니다. 특징객체지향에는 아래의 기능들을 제공하여 코드를 구조화하고, 관리할 수 있으며, 유연하고 확장 가능한 소프트웨어를 개발할 수 있습니다.캡슐화 (Encapsulation): 객체는 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶어서 외부로부터의 접근을 제한합니다. 이는 객체의 내부 상태를 숨기고, 외부에서의 직접적인 접근을 제한하여 데이터의 무결성과 보안을 보장합니다.상속 (Inheritance): 상속은 기존 클래스(부모 클래스)의 ..
문제 이해하기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..
문제 이해하기문제가 총 두가지가 있다. 하나는 json파일을 읽어 고객의 tag와 username을 오름차순으로 반환하는 것과 쿼리파라마으로 tag와 username이 주어지면 승률을 반환하는 형식이다. json파일로 고객의 정보가 아래의 형태로 나타난다. { "id": 1, "username": "wt7Py", "tag": "bOCv", "win": 617, "lose": 875 } 문제 해결 방법 설명하기1. 고객의 username과 tag로 정렬하는 방법내가 사용한 방법은 읽어온 json파일에서 tag와 username만 따로 저장한 후 해당 값들을 key로 잡아서 정렬하는 것이었다.@app.route("/api/gamerec..
소개 JPA를 사용하다 보면 엔터티의 변경이 자동으로 데이터베이스에 업데이트되는 경우가 있고, 엔터티를 수정했지만 데이터베이스에 반영되지 않는 경우가 있습니다. 이러한 차이는 엔터티가 영속성 엔터티인지 준영속성 엔터티인지에 따라 달라집니다. 준영속성 엔터티를 데이터베이스에 반영하기 위해서는 변경 감지(DIRTY CHECKING)와 병합(MERGE) 기법이 있습니다. 이 글에서는 두 기법의 차이점을 알아보고, 어떤 방법이 더 좋은지 소개하겠습니다 (feat - 김영환 센세).Dirty Checking(변경 감지) 엔터티의 변경 사항을 데이터베이스에 자동으로 반영하는 기능을 변경 감지라고 합니다. 중요한 점은 영속성 컨텍스트가 관리하는 영속 상태의 엔터티에만 적용된다는 것입니다. 동작 순서트랜잭션을 커밋하..
문제 이해하기 선영이라는 친구가 새로운 함수를 만들었는데, 해당 함수는 "R"과 D로만 이루어져있다.R은 reverse고 d는 delete다. 즉 R을 만나면 배열을 뒤집어야 하고, D를 만나면 해당 배열에서 젤 처음 숫자를 삭제해야한다.문제 해결 방법 설명하기1. R을 만나면 배열을 역순으로 변경해야할까?그렇다 R을 만날 때 마다 매번 배열을 역순으로 변경한다면 시간초과가 나타난다. 따라서 우리는 배열이 뒤집어 졌다는 것을 기억하고, 실제로 연산은 수행하지 말아야 한다. for f in funcStr: if f == "R": direction = not direction 2. D를 만나면 배열에서 삭제를 진행해야 할까?D의 연산의 경우 실제로 수행해도 상관은 없다 ..