We will find a way, we always have.

-interstellar

Programming Language 34

[자바] VO와 Record

우테코 메타인지 말하기 스터디때 준비한 글 VO (Value Objects) VO는 Value Objects의 약자로 값 객체를 나타낸다. 자바에서 VO를 사용하는 이유는 명확한 의미전달 및 책임 캡슐화이다. 단순히 원시값을 사용할 때와는 달리 이 객체가 어떤 역할을 담당하고 있는지를 이름을 통해 전달할 수 있다. 그리고 요구사항이 주어졌을 때 해당 객체 내에서 요구사항을 구현하여 캡슐화를 지킬수 있다. VO 사용시 유의사항 equals() && hashcode() VO를 만들었다면 필수로 equals() && hashcode() 메서드를 구현해줘야 한다. equals() && hashcode()가 구현되지 않았다면 객체의 값을 비교하는 것이 아니라 객체의 주소를 비교하기 때문에 원하는 대로 동작하지 않..

[클린코드] SonarLint를 사용해야 하는 10가지 이유

누군가 내가 작성한 코드를 수시로 분석하여 지적하는 플러그인이 있다면 사용해보겠는가? SonarLint가 바로 그런 플러그인이다! 🎈사용계기소나린트를 처음 알게 된건 구구의 추천 덕분이었다. 클린코드를 작성하고 싶다는 욕구에 바로 설치하고 사용해보았다. 하지만 하루 정도 써보고 이건 아니다 싶어 제거를 하였다.. 사용할 때 느꼈던 불편한 점들 커밋시 경고창이 한번 뜬다. 님 SonarLint가 제안한 내용 안지켰음. 수정하고 커밋하셈이라는 내용의 메시지가 한번 뜬다. ctrl + k 로 git add 하고, ctrl + enter 로 git commit 하는 나에게 이 경고창이 걸리적 거렸다. 냄새나는 코드를 아주 눈에 걸리적 거리는 밑줄로 그어준다. 수정이 필요한 부분에 빨강, 주황색으로 울퉁불퉁한 밑..

[Spring] query dsl Q클래스 파일 위치 설정 (스프링 버전 3.2 )

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화강의를 듣는 도중 마지막 부분에서 query dsl 도입을 하기 위해 build.gradle 파일을 설정하는데, 스프링이 버전업 되면서 기존 코드로는 설정이 되지 않아 문제가 발생하였다. 제공해주신 3.x 버전용 build.gradle 파일에서도 그래들 리프레쉬중 오류가 나거나 빌드 오류가 발생하거나 겨우 컴파일 성공하여도 Q 클래스가 main.java.generate 에 위치해있는 게 아니라 어디 저 멀리 build.generated 에 가있어 자바 프로젝트 내에서 import 가 되지 않는 문제들이 있었다. 해결 방안은 일단 컴파일 성공하는 단계에서 Q 클래스 파일 생성 위치를 알맞게 설정하는 것이다. plugins { id 'java'..

[자바] 자바에서 ConcurrentHashMap

개선된 ConcurrentHashMap ConcurrentHashMap 클래스는 동시성 친화적이며 최신 기술을 반영한 HashMap 버전이다. 내부 자료구조의 특정 부분만 잠궈 동시 추가, 갱신 작업을 허용한다. 떄문에 동기화된 Hashtable 버전에 비해 읽기 쓰기 연산 성능이 월등하다. 리듀스와 검색 ConcurrentHashMap은 스트림에서 봤던 녀석들과 비슷한 종류의 세 가지 새로운 연산을 제공한다. forEach: 각 (키, 값) 쌍에 주어진 액션을 실행 reduce: 모든 (키, 값) 쌍을 제공된 리듀스 함수를 이용해 결과로 합침 search: 널이 아닌 값을 반환할 때까지 각 (키, 값) 쌍에 함수를 적용 또 키, 값 그리고 Map.Entry 를 활용해서도 연산을 수행할 수 있는 메서드도..

[자바] static 메서드와 static 클래스

static class와 static method 자바에서 static 키워드는 JVM이 시작될 때 static 영역에 한번 저장되어 프로그램이 종료될 때 해제되는 것을 의미한다. static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 가지지만 Garbage Collection이 관리하지 않으므로 자주 사용한다면 메모리 효율이 떨어질 수 있다. static 메서드 static 메서드는 객체 생성 없이 사용할 수 있는 메서드이다. 사용 예시 class Counter { static int count = 0; Counter() { count++; System.out.println(count); } public static int getCount() { return count; } } pu..

[자바] 가비지 컬렉션 GC

가비지 컬렉션 Garbage Collection(GC) 가비지 컬렉션이란? Heaq 영역에서 동적으로 할당했던 메모리 중 사용하지 않는 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스 C / C++ 언어에서는 가비지 컬렉션이 없어 프로그래머가 수동으로 메모리 할당과 해제를 해야한다. 자바는 JVM에 탑재된 가비지 컬렉터가 메모리 관리를 대행하기에 개발자 입장에서 메모리 관리와, 메모리 누수(Memory Leak) 문제에 대해 완벽히 관리하지 않아도 된다. 특정 개체가 garbage 인지 판단하기 위해서 도달능력(Reachability) 이라는 개념을 사용한다 객체에 레퍼런스가 있으면 Reachable로 구분되고, 객체에 유효한 레퍼런스가 없으면 Unreachable로 구분하고 가비지 컬렉..

[자바] formatting 출력하기, 입력받기

printf() C언어에서 사용하던 printf()를 자바에서도 사용할 수 있다. 지금까지 사용하던 println()은 값을 변환하지 않고는 다른 형식으로 출력할 수 없다. 이제 printf() 사용방법을 확인해보자. 지시자 설명 %b 불리안(boolean) 형식으로 출력 %d 10진(decimal) 정수의 형식으로 출력 %o 8진(octal) 정수의 형식으로 출력 %x, %X 16진(hexa-decimal) 정수의 형식으로 출력 %f 부동 소수점(floating-point)의 형식으로 출력 %e, %E 지수(exponent) 표현식의 형식으로 출력 %c 문자(character)로 출력 %s 문자열(string)로 출력 HTML 삽입 미리보기할 수 없는 소스 위의 소스코드를 실행하면 . . . 이렇게 출..

[자바] 변수 2

변수의 타입 자료형은 크게 '기본형'과 '참조형' 두 가지로 나뉘고, 기본형 변수에는 실제 값을 저장하고 참조형 변수는 어떤 값이 저장되어 있는 주소를 값으로 갖는다. 자바에서 기본형 변수로써 사용하는 값의 종류 (Type of data)는 논리형(boolean), 숫자, 문자형(char) 이렇게 3가지가 있다. 하지만 더 숫자를 더 세부적으로 나누면 정수형과 실수형으로 나뉘고 여기서 또 각각의 범위에 따라 정수형은 byte, short, int, long 으로, 실수형은 float, double 로 나뉜다. 새로운 클래스를 생성하는 것이 참조형 변수를 선언하는 것이라고 볼 수 있다. HTML 삽입 미리보기할 수 없는 소스 자료형 저장 가능한 값의 범위 크기(bit) 크기(byte) boolean fal..

[자바] 변수 1 (feat. 개발자 두 명이 자리를 바꾸는 데 필요한 의자 갯수는?)

수학에서의 변수는 상수의 반대로써 "변하는 수"라고 정의되지만 프로그래밍 언어에서의 변수는 값을 저장할 수 있는 메모리상의 공간을 일컫는다. 그래프도 수학과 자료구조에서의 정의가 다른 것 처럼ㅎ 변수를 선언하면 메모리에 공간을 만드는 것이다. 자바의 변수 선언과 초기화는 다음과 같이 한다. HTML 삽입 미리보기할 수 없는 소스 우선 변수를 선언한 다음에 초기화를 할 수 있다. 초기화란 선언된 변수에 유효한 값을 넣어주는 것인데, 만약 초기화를 하지 않았다면 그 변수에는 쓰레기값이 들어가게 되고 사용할 수 없게 된다. 변수를 사용하고자 한다면 변수 선언 후 초기화를 해주자!! 두 변수의 값 교환하기 개발자 밈 중에 개발자 두 명이 자리를 바꾸는 데 필요한 의자 갯수는? 이라는 밈이 있다. 상식적으로 생각..

[자바] 세상과 인사하기

JAVA의 정석이라는 도서와 자바를 부탁해 라는 도서로 자바에 대해 공부를 시작하였다. 해당 도서의 사용 IDE는 이클립스였지만, 주변 사람들의 추천으로 IDE는 인텔리제이를 설치하게 되었다. C 배웠던 것 처럼 파이썬과는 다르게 지정해줘야할 것이 조금 많았다. 자바 코드를 작성하면 컴파일러가 바이트코드로 변역해준다. 이 과정을 컴파일링이라고 한다. 변역된 바이트코드는 자바 가상 기계(JVM)를 통해 기계어로 실시간 통역된다.(인터프리팅) 이렇게 자바는 프로그래밍 과정 중 컴파일링과 인터프리팅 모두 사용하는데 이것이 자바의 특징이다. 때문에 다양한 환경에서 동작하는 특징을 갖는다. 이제 자바 코드를 작성해보자!!! 단순히 출력 파일을 작성하기 위해서도 프로젝트를 생성해서 클래스를 만들고 메인 메소드 작성..