전체 글 348

구문(statements) 과 표현식(expression)

표현식 (expression) 결과를 반환하는 코드를 의미한다. 말하자면, 어떠한 계산을 통해 그 결과를 하나의 값으로서 나타내는 것이다. int a = 12*3; double b = 12/3;여기서 각 값 a, b는 오른쪽의 계산이 완료된 후의 값을 가지게 될 것이다. 그리고 오른쪽의 계산 을 표현식이라고 한다. 즉 어떤 계산 == 식, 이라고 생각하면 된다. 구문 (Statement) 프로그램에서 실행 가능한 최소단위 코드를 의미한다. 말하자면 해당 프로그램이 실행하는것은 모두 구문이라고 생각하면 된다. -> 다르게 말하자면 java에서 작업이 실행된다면(최소단위의 실행이 맞춰진다면) 이것은 최소 하나 이상의 구문이 존재한다는 것이다. String ryooChan; // 선언문 ryooChan = "..

이론 정리 2023.07.21

동적 파라미터화

동적 파라미터화 여러 요구사항에 효과적으로 대응 가능한 방법. 아직은 어떤 식으로 동작할지가 결정되지 않은 코드 블록이고, 나중에 프로그램에서 실행된다. 문제 상황 1. 녹색 사과 필터링 enum Color { RED, GREEN }빨강, 초록 사과가 있다. 여기서 만약에 녹색 사과를 필터링하려 하면 if(GREEN.equals(apple.getColor())) { result.add(apple); }요렇게 쓸 것이다. 단점 만약 빨간사과, 노란사과, 검은사과 등등... 필터링 개수가 많아진다면? 저 if문이 계속해서 늘어나거나 또 빼짐에 따라 줄어들 수 있을 것이다. 2. 색의 파라미터화 위의 1에서의 단점을 해결하기 위함이다. public static List filterApples(List inve..

이론 정리/java 2023.07.12

select for update에 대해서(feat deadlock, gaplock)

select for update가 뭘까?? 이름에서 알 수 있듯, 업데이트를 하기 위해 검색을 하는 것이다. 즉, 이후의 Update를 위해 select를 진행하는 것이라 할 수 있다. 그래서 뭐요? 사실 그냥 보면 뭐 그런갑다.. 할 수 있다. 근데 사실 저 select for update에서 중요한 것은, Select된 행의 UPDATE가 실제로 커밋되기 전까지 다른 트랜잭션이 이 행을 수정할 수 없다는 것이다. 뭔소리에요?? 그러니까 여러 트랜잭션이 하나의 레코드에 접근한다고 가정할 때, 현재 select for update 수행중인 내용은 변경 불가하다는 것이다!! 아래에서 실제로 보여주겠다. 실습 Table 먼저 human 테이블에 다음과 같은 데이터가 있다. 3개의 트랜잭션을 수행해 볼 것이다..

Springboot3.0에서 [Spring] Could not resolve all files for configuration ':classpath'. 해결하기!!

Springboot3.0에서 [Spring] Could not resolve all files for configuration ':classpath'. 해결하기!! Springboot3.0이 나왔다!! 근데 이거를 깃에서 클론받아서 쓰려하면 Could not resolve all files for configuration ':classpath'. 요런 에러가 나면서 안될때가 있다. 이게 안되는 이유는 아마 JDK버전 문제일 가능성이 크다. 왜냐면 Spring Boot 3.0 이상 버전에서는 JDK17이상만 지원하기 때문! 그니까 당신의 컴터는 다른 JDK인데 필요한게 JDK17이상이기 때문 해결법 IntelliJ의 preference에 들어가서 cmd + , Build, Ex..

spring boot의 self invocation, 이유와 해결법

spring boot의 self invocation, 이유와 해결법 회사에서 개발하는데 캐싱과 관련하여 self invocation 관련해서 이슈를 들었다. 그래서 한번 찾아보게 되었다. invocation 이거는 메서드 호출이라고 생각하면 된다. self-Injection?? 일단 문제상황에 대해 알아본다 다음과 같은 코드를 작성한다. (그리고 캐시 설정은 되어있다고 가정한다.) Ryoochan.java import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @Entity public cl..

MySql 인덱스 - 기본 개념

MySQL 인덱스 실무에서 엄청나게 중요한녀석임... 이를 사용해서 select를 할 때에 데이터를 빠르게 응답하도록 할 수 있음! 사실 인덱스를 한다고 뭐 쿼리가 바뀌는건 아니다. 그냥 이걸 통해 속도를 빠르게 하는거임. 데이터베이스를 빠르게 하도록 하는 "튜닝" 에서 가장 핵심적인 것이 인덱스이다. 물론 막 쓰면 오히려 성능을 떨어뜨릴 수도 있다. 그래서 일단 인덱스의 개념이랑 활용 등을 찾아보도록 한다. 인덱스 개념 예를 들어 데이터베이스에 사람 이름 키 몸무게 을 갖는 테이블이 있을 때 1 류찬 178 70 2 김찬 189 99 3 박찬 140 39 4 이찬 180 34 5 반찬 200 50 6 징기스찬 160 50 7 가슴이벅찬 390 34 요런 식으로 있다고 하자. (일단 동명이인은 없다고 가..

Mysql 엔진 Lock

MySql 엔진 lock Mysql 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미친다. 글로벌 락(Global lock) FLUSH TABLES WITH READ LOCK 위의 명령을 통해 획들 가능한 잠금이다. 글로벌 락의 특징 MySql에서 제공하는 잠금 중 가장 범위가 큰 잠금이다. 해당 락이 활성화되면 전체 테이블/DB가 영향을 받는다. select를 제외한 DDL, DML문장은 글로벌 락이 해제되기 전까지 대기하게 된다. 해당 락은 MySql의 모든 테이블에 잠금을 걸게 된다. 추가적으로, 모든 테이블/DB에 대해 잠금을 걸기 때문에 해당 락 명령 실행 이전에 수행되던 트랜잭션/SQL이 끝날 때까지 대기하게 된다. 참고로 모든 SQL에 대해서이기 때문에 락 대상이 아닌 select 명령도 ..

this

this 생성자 this() 생성자에서 다른 생성자를 호출할 때 사용 다른 생성자 호출시 첫 줄에서만 사용가능 예시 class Car2 { String color; String gearType; int door; Car2() { this("white", "auto", 4); } Car2(String color) { this("color", "auto", 4); } Car2(String color, String gearType, int door) { this.color = color; this.gearType = gearType; this.door = door; } }요런 식으로 생성자에서 같은 클래스 안의 생성자를 호출할 때 사용한다. -> 사실 이거는 걍 Car2("color", "auto, 4"); ..

이론 정리/java 2023.04.18

static이랑 instance

static과 인스턴스 메서드 일단 얘들이 뭐냐면 class MyMath { long a, b; long add() { // 인스턴스 메서드 return a + b; } static long add(long a, long b) { // 클래스 메서드(static) return a + b; } }이렇게 되어있다. 그래서 이게 뭐가 다른걸까? 인스턴스 메서드 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드 iv : instance variable im : instance method 메서드 내에서 인스턴스 변수(iv) 사용가능 static 메서드(클래스메서드) 객체생성 없이 '클래스이름.메서드이름()'으로 호출 객체..

이론 정리/java 2023.04.18

Default, Static method in java(feat. JDK8, 그 이후)

Default, Static method in java(feat. JDK8, 그 이후) 인터페이스를 공부하다 보면 자주 나오는 메서드들이다. 어떤 것인지, 어떻게 쓰이는지 차이를 알아보자. java interface 먼저 인터페이스에 관한 기본적인 설명은 얘랑 얘를 보면 대충 감이 잡힐 것이라 생각한다. 기존에는 interface를 만들고, 이를 구현하는 부분을 따로 implements하여 작성해 주어야 했다. JDK 8에서의 변화 JDK8부터 interface에서 default, static 메서드의 사용이 가능해졌다. default method Default가 뭔데? 싶을 수 있을 것이다. 사실 이름 그대로 기본적으로 기능을 갖고 있는 메서드를 뜻한다. 예를 들어, 류찬의 외모 설명 이라는 메서드를 ..

이론 정리/java 2023.04.04