Java

· Java
개요 이번 글에서는 예제를 통해 자바의 String Pool과 intern() 메서드 개념을 자세히 알아봅니다. 문자열 리터럴과 new 연산자를 통한 객체 생성, 그리고 intern() 메서드 사용 시 String Pool 내의 객체 참조를 어떻게 변경하는지 살펴봅니다.  들어가기 전에 // Case 1String str1 = "Hello, World!";String str2 = "Hello, World!";String str3 = new String("Hello, World!");String str4 = new String("Hello, World!");System.out.println(str1 == str2); System.out.println(str1 == str3); System.out.print..
· Java
개요이번 포스팅에서 나오는 주요 키워드빌드 도구: Maven, Gradle, Groovy, Ant파일 구분: 자바 파일(.java), 클래스 파일(.class)패키지와 의존성: 패키지의 역할, Maven 의존성 관리, Gradle의 동적 버전 관리예외 처리: MalformedURLException, IOException네트워크 통신: URLConnection, HttpURLConnectionJSON: JSONObject, JSONArray, JSON 형식입출력: BufferedWriter, BufferedReader, StringBuilder크롤링: Selenium, ChromeDriver, WebDriver경로 탐색: XPath, CSS SelectorWebDriver: 추상화, findElement,..
· Java
개요*는 심화적인 내용이므로 처음 접한다면 넘어가도 좋다. 이번 포스팅에서 나오는 주요 키워드final 키워드static 키워드final과 static의 조합예약어와 변수명snake caselong 타입String 클래스와 불변성double 타입과 계산 정확도객체 생성 및 메모리 할당Object 클래스 주요 메서드기본 타입 & 참조 타입지역 변수new 키워드와 객체 생성묵시적 / 명시적 형 변환조건문 본문Q1. 왜 변수를 선언할 때 final을 쓰는가?더보기A1. final 키워드는 변수에 최초로 값을 할당한 이후에 다른 값을 할당할 수 없게 만든다. 이는 변수의 값이 변하지 않는다는 것을 명시적으로 표현하기 위함이다.Q2. 변수를 선언할 때 static을 같이 쓰기도 한다. 왜 그런가?더보기A2. st..
· Java
개요자바에서 컬렉션을 순회하는 방법은 다양하다.  대표적으로 for 루프, 향상된 for 루프(Enhanced For), Iterator, 그리고 ListIterator가 있다.  각각의 방법은 성능이나 코드의 간결성 측면에서 차이가 있는데 단순히 ~는 객체지향적이기에 사용하면 좋고, ~는 성능이 안좋아서 개선 버전이 있으니 무조건 향상된 for 문을 쓰자 를 넘어서 직접 운영중인 api 의 알고리즘을 대상으로 테스트를 해본다.  이번 글에서는 이러한 순회 방법들이 실제로 얼마나 성능 차이가 나는지, 어떤 상황에서 특정 방법을 사용하는 것이 유리한지에 대해 이야기를 해보려한다.  테스트 대상 특성 성능 테스트는 일정 관리 시스템에서 일정을 순회하며 각 일정의 타입을 계산하는 과정으로 1. 리스트에 삽입/..
· Java
개요자바를 공부하다보면 가비지 컬렉터(GC)에 대해 자주 접하게 된다. 대부분 GC과정이 메모리 관리를 위해 사용된 객체를 해제하고 메모리 관리를 최적화 하기 위해서 여러 세대로 나누어 자주 접근하거나 다른 객체들에 의해 참조되는 객체들은 오래된 세대로 이동하여, 신세대에 비해 해제 빈도를 낮추는 전략을 사용한다. 정도로만 이해하고 있을 수 있는데,  요즘 'JVM 밑바닥까지 파헤치기' 라는 책을 읽으며 GC의 작동 원리는 이보다 훨씬 더 복잡하고 여러 과정을 거쳐서 발전해왔음을 확인할 수 있었다.   따라서 이번 포스팅에서는 용어와 알고리즘을 정리한후에 클래식 가비지 컬렉터의 특성과 종류를 시작으로 ZGC나 쉐넌 도어같은 최신 가비지 컬렉션 기술까지 특성 위주로 설명을 해보려고 한다. 용어 - Stop..
· Java
개요자바가 제공하는 메모리 관리는 할당과 해제를 하여 관리해야하는 다른 언어들과는 달리 개발자의 편의성 측면에서 많은 이점을 가져온다. 하지만 그 이면으로 내가 직접 관리를 하지 않기 때문에 GC 과정에 이상이 생길시에 원인을 분석하여 해결해야된다는 점이 있는데 이는 자바가상머신의 메모리에 대해서 알아보면 원인 분석 및 이해가 빨라질수 있다.따라서 이를 구조를 설명하고 구조별로 일어날만한 오류들을 정리를 해보려한다.(고봉밥으로다가) 들어가기에 앞서서 JVM 을 크게 나눠보자면 위에도 언급했던 힙 메모리를 관리하는 가비지 컬렉터, 자바 클래스를 메모리 영역(어디인지는 아래에 나올것이다.) 에 로드해주는 클래스 로더 시스템, JVM의 바이트 코드를 실행하는 실행 엔진으로 기능적 요소가 존재하고 이번에 설명할..