상황 자바에는 String에 replaceAll 메서드가 존재한다. 이 메서드에서 \r\n을 찾는 표현식을 작성하고자 하면 다음과 같은 형식으로 코드를 작성해야 한다. rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\\n");결과적으로 하나의 \를 입력하기 위해서 총 4개의 백슬래쉬(\\\\)를 입력해야 하는 상황이 발생한다. 이유 이러한 식으로 작성해야 되는 이유는 다음과 같다. Java에서 \를 인식하기 위해서 \\가 필요함. replaceAll에 들어가는 첫 번째 parameter가 regexp이므로 여기서도 \를 입력하기 위해 \\가 필요하다. 위 2가지 조건이 중첩되어 Java에서 \를 인식하게 하기 위해 \\를 입력한 후에야 \를 \로 인식. 이때 만약 \\r만..
실제 코딩을 할 때나 코딩 인터뷰에서 사용해도 괜찮을법한 비트 연산자 유즈 케이스를 알아보자. n/2, n*2, 2^n n / 2 n >>> 1 n >>> 1 연산은 Java의 경우 n / 2 사용할 경우 발생할 수 있는 overflow를 원천적으로 봉쇄할 수 있다는 장점이 있다. n >> 1를 사용하는 경우 overflow가 발생할 수 있음에 주의. n * 2 n >로 먼저 n자리만큼 0으로 밀어낸 후 & 연산자를 이용하여 해당값이 1인지 판별하는 방법이며 x & (1
자바에서 OOP라는 개념은 어떤 것일까? OOP는 여러 개발방법론 중 하나인 객체 지향 프로그래밍을 의미하며 여러 개발 패러다임 중 하나에 속한다. 패러다임이라는 것은 "우리 이건 앞으로 이렇게 생각하자."를 누군가가 주창하면 그것은 하나의 패러다임이 되며 해당 패러다임이 여러 사람에 의해 충분히 입증되고 과거에 잔재했던 여러 문제를 해결하게 되면 과거의 패러다임은 폐기, 축소되고 새로운 패러다임으로 사고하게 되는 "패러다임 시프트"가 일어나게 된다. 즉, OOP라는 패러다임을 이해하고자 하면 OOP 이전에 존재했던 패러다임을 알아보고 과거의 패러다임이 어떤 문제를 가졌고 OOP가 그 문제를 어떻게 해결했는지를 알아야 한다. 절차적 프로그래밍 기존에 절차적 프로그래밍(Procedural Programmi..
인풋 데이터가 json 포맷으로 주어지는 경우가 있다. json 파싱 라이브러리로는 gson, json-simple, Jackson 등이 존재하는데 여기서는 본인이 생각하기에 직관적이고 편하다고 생각되는 gson 라이브러리를 사용한다. GSON 라이브러리 gson 라이브러리를 import한다. Gradle // https://mvnrepository.com/artifact/com.google.code.gson/gson implementation 'com.google.code.gson:gson:2.9.0' Maven com.google.code.gson gson 2.9.0 Nested 형태일 경우 String json = "{\n" + " \"data\": [\n" + " {\n" + " \"email\"..
동시성 문제 동시성 문제란 멀티스레드의 환경에서 하나의 리소스에 여러 스레드가 동시다발적으로 접근하게 되어 같은 리소스에서 값을 가져오더라도 서로 다른 값을 가져오는 등의 문제가 발생하는 경우를 일컫는다. 이러한 동시성 문제가 발생하지 않도록 애플리케이션을 설계하는 것을 Thread Safe라 한다. 자바에서는 이러한 동시성 문제를 해결하기위해 아래과 같은 방법을 이용한다. synchronized, volatile synchronized (Pessimistic Locking, 비관적 잠금) synchronized 키워드를 사용하면 공유 변수에 동시에 접근하는 스레드를 단 하나로 한정지음으로서 다른 모든 스레드들은 공유 변수에 접근할 수 없고 이용 중인 스레드가 릴리즈 할 때까지 대기하게 된다. synch..
비트연산자 자바에서 , >>>는 비트연산자 기호이다. 비트연산자란 char, byte, short, int, long 등과 같은 자료형에서 해당 값을 비트로서 연산하는 기능을 수행한다. 비트연산자의 개념에 대해 다루려는 것이 아니므로 아래의 표만 첨부한다. 비트연산자 , >>>의 활용 1은 low + (high - low) / 2 와 같은 의미를 가진다. 만약 int mid = (low + high) >> 1 라고 사용했다면 (high + low) / 2 와 같은 의미를 가질 것이다. >>>와 >>의 차이를 알아보기 전에 low + (high - low) / 2와 (high + low) / 2의 차이를 먼저 알아야 한다. 한 줄로 요약하자면 (high + low) / 2를 사용하면 overflow가 발생..
자바에는 다음과 같은 3종류의 변수가 존재한다. 변수의 종류와 상관없이 모든 객체는 heap 영역에 저장된다는 설명은 아래에서 생략한다. 전역 변수 자바에는 엄밀히 말해서 전역 변수 (Global Variables)는 존재하지 않는다. 대신 전역 변수를 사용하기 위해서는 class는 public으로 변수에는 public static 키워드를 사용하여 선언하여 사용한다. static으로 선언된 변수는 클래스가 어떤 방식으로든 한번 선언된 이후에 메모리에 적재되고 그 이후에 애플리케이션이 종료될 때까지 메모리에 존재하게 된다. (애플리케이션을 맨 처음에 실행했을때 메모리에 적재되는 것이 아니다.) 이를 통해 전역 변수'처럼' 사용할 수 있게 구현할 수 있다. 자바 8 이전에는 PermGen 영역(a.k.a ..
자바 8 람다, 스트림 Optional 키워드 사용 가능 Date와 Time API 자바 11 인터페이스에 private 메서드 가능 (자바 9) 이외에 컬렉션, 스트림, Optional에 몇몇 메서드 추가 (자바 9) G1 GC가 디폴트 GC로 설정 (자바 9) var 키워드 사용 가능 (자바 10) OpenJDK가 Oracle JDK로 통합됨 자바 17 record 키워드 사용 가능 (자바 14) NullPointerException이 어떤 변수에 의해 발생했는지 설명 (자바 14) sealed 키워드 사용 가능 (자바 15) ZGC 도입 (자바 15) 각 버전별 상기 내용 이외에도 많은 기능이 추가되었지만 중요하다 생각되는 내용만 정리하였음. 레퍼런스 https://intrepidgeeks.com/..
정규표현식은 주어진 String에서 주어진 패턴에 맞는 캐릭터만 골라내는 검색 엔진이라 표현할 수 있다. 이때 정규표현식의 내부는 유한 오토마타로 구현되어있다. 내부 동작 먼저 정규표현식은 내부적으로 언어마다의 세부적인 문법 차이를 제외하고 대부분 비슷하게 구현되어있다. 패턴과 String이 주어지고 String의 왼쪽부터 시작하여 오른쪽 방향으로 비교를 시작한다. 이때 String을 한 번에 캐릭터 하나씩 파싱하여 패턴과 비교하는데 이때 패턴에서도 왼쪽-오른쪽 방향으로 비교를 하며 나아간다. String의 인풋과 String의 패턴을 비교한다고 가정해보자. 먼저 String 첫번째 캐릭터와 패턴의 첫번째 캐릭터가 일치하면 두번째 캐릭터끼리 비교한다. 두번째 캐릭터가 일치하면 똑같은 비교가 쭉 이어지고 ..
본 게시물은 해당 블로그에서 레퍼런스를 번역한 자료임을 알립니다. 퍼가실때 해당 블로그의 주소는 밝히실 필요가 없으나 레퍼런스의 주소는 밝혀주시면 감사하겠습니다. 자바 9 버전 이후부터 G1 GC가 디폴트 GC로 설정되었다. (역주: 자바 8까지는 패러렐 GC가 디폴트였고 자바 18인 현재까지 G1 GC가 디폴트 GC로 사용된다. 만약 싱글 코어라면 시리얼 GC가 디폴트로 설정된다.) G1 GC는 자바 7에 처음 도입되어 다른 GC와는 다른 매우 큰 힙 영역을 효과적이면서 동시에 다루는데에 특화되어 있다. 또한 최대 중단 시간을 넘지 않도록 설정할 수 있다. G1 GC가 다른 GC와 어떻게 다르게 동작하는지 확인하고 또 어떻게 G1 GC가 어떻게 큰 크기의 힙 영역을 다룰 때 다른 GC를 압도하는지 알아..
- Total
- Today
- Yesterday
- 아키텍처
- JavaScript
- 도커
- 루나빔
- lunarvim
- ModelAttribute
- IDE
- RequestParam
- 배포
- RequestBody
- 레디스
- neovim
- vim
- RequestPart
- Dap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |