Call By Value와 Call By Reference
특정 메서드를 호출하는 경우 인자로 전달하는 방법은 크게 2가지가 존재하는데요. 값에 의한 호출(Call By Value), 참조에 의한 호출(Call By Reference)이 이에 해당됩니다.
Java tag description
모든 태그 보기특정 메서드를 호출하는 경우 인자로 전달하는 방법은 크게 2가지가 존재하는데요. 값에 의한 호출(Call By Value), 참조에 의한 호출(Call By Reference)이 이에 해당됩니다.
equals와 hashCode 메서드는 객체의 동등성 비교와 해시값 생성을 위해서 사용할 수 있습니다. 하지만, 함께 재정의하지 않는다면 예상치 못한 결과를 만들 수 있습니다. 가령, 해시값을 사용하는 자료구조(HashSet, HashMap..)을 사용할 때 문제가 발생할 수 있습니다.
Checked Exception
✔️ Serial GC (-XX:+UseSerialGC)
✔️ Gradle 이란?
ArrayList의 기본 용량(capacity)은 10이며, 용량이 가득 차면 기존 크기의 1.5배(oldCapacity + (oldCapacity >> 1)) 로 증가합니다.
GC(Garbage Collection)는 자바의 메모리 관리 방법의 하나이며, JVM의 힙 영역에서 동적으로 할당했던 메모리 중에서 필요 없어진 객체를 주기적으로 제거하는 것을 의미합니다. GC는 특정 객체가 사용 중인지 아닌지 판단하기 위해서 도달 가능성(Reachability) 라는 개념을 사용하는데요. 특정 객체에 대한 참조가 존재하면 도달할 수 있으며, 참조가 존재하지 않는 경우에 도달할 수 없는 상태로 간주합니다. 이때, 도달할 수 없다는 결론을 내린다면 해당 객체는 GC의 대상이 됩니다.
Record는 Java 16에서 정식 출시된 특별한 유형의 클래스로 불변성(Immutable) 을 기본으로 합니다.
String 객체는 불변(Immutable) 입니다. String 클래스는 내부적으로 final 키워드가 선언된 byte[] 필드를 사용해서 문자열을 저장하기 때문입니다.
✔️ (String) value
✔️ ThreadLocal 이란?
커넥션, 입출력 스트림과 같은 자원을 사용한 후에는 자원을 해제해서 성능 문제, 메모리 누수 등을 방지해야 합니다. try-with-resources는 이러한 자원을 자동으로 해제하는 기능으로, java 7부터 도입되었습니다.
Java에서 객체를 복사할 때 얕은 복사와 깊은 복사라는 두 가지 방식이 있습니다. 먼저 Book과 Author라는 두 클래스를 사용해서 예제를 살펴볼게요. Book은 책의 이름(name)과 저자(author) 정보를 가지고 있고, Author는 저자의 이름을 가지고 있습니다.
✔️ 객체 지향 프로그래밍(OOP, Object-Oriented Programming)
동일성과 동등성은 객체를 비교할 때 중요한 개념입니다. 자바에서는 이 두 개념을 equals() 메서드와 == 연산자를 통해 구분할 수 있습니다.
경쟁 상태(Race Condition) 는 두 개 이상의 스레드가 공유 자원에 동시에 접근할 때 스레드 간의 실행 순서에 따라 결과가 달라지는 현상으로, 원자성과 가시성 모두 보장되어야 해결할 수 있습니다.
교착 상태(deadlock) 는 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있어 결과적으로 아무것도 완료되지 못하는 상태를 의미합니다. 가령, A 프로세스가 자원 A를 가지고 자원 B를 필요로 합니다. 그리고, B 프로세스는 자원 B를 가지고 자원 A가 필요할 때 두 개의 프로세스는 교착 상태에 빠져 어느 작업도 진행할 수 없는 상황이 됩니다.
자바의 ThreadPoolExecutor를 기준으로 설명하겠습니다. 스레드 풀 포화 정책(Saturation Policies) 이란, 말 그대로 스레드 풀이 포화 상태인 경우의 행동을 결정하는 정책을 의미합니다. ThreadPoolExecutor 설정에는 상시 유지하는 스레드의 수인 corePoolSize, 작업 대기열 크기인 workQueueSize, 스레드를 추가할 수 있는 최대 수인 maxPoolSize가 존재하는데요. 스레드가 maxPoolSize까지 늘어나고 대기열까지 꽉 찬 상태를 포화 상태라고 합니다. 이때 새로운 작업 요청이 들어오면, RejectedExecutionHandler의 구현체인 포화 정책이 실행됩니다.
✔️ 스택 (Stack)
✔️ 웹 서버 (Web Server)
A 객체가 어떤 작업을 수행하기 위해 B 객체를 필요로 하는 경우에 두 객체 사이에 의존성이 존재한다고 표현합니다. 이때, A 객체가 아닌 외부의 C 객체가 B를 생성한 뒤에 이를 전달해서 의존성을 해결하는 방법을 의존성 주입(Dependency Injection) 이라고 합니다.
자바에서 클래스 정보를 가져오기 위해서 Reflection API를 사용할 수 있습니다. reflection 패키지에서 제공하는 클래스를 사용하면, JVM에 로딩되어 있는 클래스와 메서드의 정보를 읽어올 수 있습니다. 대표적으로 Class 클래스, Method 클래스, Field 클래스가 존재합니다.
.java 파일은 JDK에 포함된 javac(java compiler)를 통해 컴파일됩니다. 이 과정에서 JVM이 이해할 수 있는 바이트 코드로 변환되어 .class 파일이 생성됩니다.
✔️ 무공변 (Invariant)
✔️ 메모리 사용량 차이
테스트 더블(Test Double) 은 테스트 코드에서 실제 객체 대신 사용하는 대체 객체를 의미합니다. 실전에서 사용하는 객체를 테스트 환경에 맞게 “더블”로 바꿔치기해서 테스트를 수행할 수 있도록 도와줍니다.
✔️ 트라이 (Trie) 자료 구조란?