[Java] Garbage Collection이란?
·
Java
Garbage CollectionGarbage Collection(이하 GC)은 JVM에서 메모리 관리를 위한 중요한 기능입니다. GC는 메모리의 Heap 영역에 할당된 객체 중에서 더 이상 참조되지 않는 객체를 제거하여 메모리를 확보하는 작업을 말합니다. 이 과정에서 불필요한 객체가 메모리에서 제거됨으로써, 프로그램의 메모리 사용 효율을 높이고 OutOfMemoryError 같은 문제를 예방할 수 있습니다. Stop The WorldGC가 동작하는 동안 GC 관련 Thread를 제외한 나머지 Thread는 모두 멈추게 되는데, 이를 Stop-The-World라고 합니다. 이 현상은 GC가 수행될 때마다 발생하기 때문에, GC가 자주 실행되거나 실행 시간이 길어지면 성능 저하로 이어질 수 있습니다. 이러..
[Java] String, StringBuilder, StringBuffer
·
Java
Java에서는 문자열을 다루기 위한 다양한 클래스가 제공되는데, 가장 대표적인 것이 String, StringBuilder, 그리고 StringBuffer입니다. 이 세 가지 클래스는 모두 문자열을 다루지만, 변경 가능성(Mutability)과 스레드 안전성(Thread Safety) 측면에서 차이가 있습니다. String 클래스String 클래스는 불변(Immutable) 객체로, 한 번 생성된 문자열은 수정할 수 없습니다. 문자열이 변경될 때마다 새로운 String 객체가 생성됩니다. 특징불변성: String은 한 번 생성되면 내용을 변경할 수 없습니다.새로운 객체 생성: 문자열을 조작할 때마다 새로운 객체가 생성되므로 문자열을 자주 변경하는 경우 메모리 효율이 떨어질 수 있습니다.리터럴 풀 활용: ..
[Java] Java 예외 처리: 체크 예외와 언체크 예외, 예외와 에러의 차이
·
Java
Exception과 Error의 차이Exception과 Error는 모두 Java에서 예외와 오류의 최상위 클래스인 Throwable 클래스를 상속하며, 프로그램 실행 중 발생하는 예외적인 상황을 나타냅니다. 하지만 Exception과 Error는 그 의미와 목적에서 큰 차이가 있습니다. Error는 애플리케이션 코드로 처리할 수 없는 시스템적 문제를 나타내며, 대부분 JVM 레벨에서 발생합니다. Error는 발생할 경우 프로그램이 즉시 종료될 가능성이 높고, 일반적으로 try-catch 구문으로 처리하지 않습니다. Error는 메모리 부족, 스택 오버플로우와 같은 시스템 자원 문제로 인해 발생하며, 개발자가 해결할 수 없는 경우가 대부분입니다. Error의 대표 예시OutOfMemoryError메모리가..
[Java] 스트림(Stream)이란
·
Java
스트림이란?Stream은 데이터 소스를 추상화한 형태로, 컬렉션에 저장된 요소들을 하나씩 참조하여 람다식으로 처리할 수 있게 하는 자바 8의 반복자입니다. 쉽게 말해 데이터의 흐름을 다루기 위한 도구로, 데이터를 필터링하고 변환하며 집계할 수 있도록 돕습니다. Stream을 활용하면 복잡한 반복문을 줄일 수 있고, 가독성을 높일 수 있습니다. 또한 내부적으로 최적화된 처리 방식을 제공하여 대용량 데이터를 효율적으로 다룰 수 있습니다.스트림의 특징간결한 코드: 기존의 반복자(iterator)를 사용하는 방식보다 더 간결하고 직관적인 코드를 작성할 수 있습니다.선언적 프로그래밍: '무엇을' 할 것인지를 명시하여 '어떻게' 할 것인지를 신경 쓸 필요가 없습니다.병렬 처리 지원: 간단한 메서드 호출로 손쉽게 병..
[Java] 제네릭이란?
·
Java
제네릭이란?제네릭은 자바의 타입 안정성을 보장하여 잘못된 타입 사용을 컴파일 과정에서 미리 방지해주는 기능입니다. 제네릭을 사용하면 불필요한 타입 변환을 없애주어 프로그램 성능도 향상됩니다. 예를 들어, 제네릭을 사용하지 않는 코드에서는 List에서 값을 가져올 때마다 타입 변환이 필요하지만, 제네릭을 사용하면 특정 타입을 지정해 타입 변환을 생략할 수 있습니다.// 제네릭을 사용하지 않을 경우List list = new ArrayList();list.add("hello");String str = (String) list.get(0);// 제네릭을 사용할 경우List list = new ArrayList();list.add("hello");Stirng str = list.get(0);클래스에서의 제네릭 ..
[Java] final 필드, 메소드, 클래스
·
Java
final 키워드자바의 final 키워드는 "최종적"이라는 의미를 가지며 변수, 메서드, 클래스에 적용되어 수정 불가 상태를 명시합니다. 다음은 final 키워드를 사용하는 방법입니다.final 변수변수에 final 키워드가 선언되면 해당 변수가 생성될 때 초기값이 정해지고 다시는 수정될 수 없음을 의미합니다.final 타입 필드 [= 초기값];초기값은 변수 선언 시에 주는 방법과 생성자에서 주는 방법이 있습니다. 단순한 값이라면 변수 선언 시에 주면 되지만 복잡한 초기화 코드가 필요하거나 객체 생성 시 외부 데이터, 즉 파라미터에 의해 정해지는 경우에는 생성자에서 초기값을 지정해주어야 합니다. 만약 final 변수를 선언만하고 생성자에서 값을 초기화 해주지 않는다면 컴파일 에러가 발생합니다.final ..
[Java] 인터페이스란 무엇인가?
·
Java
인터페이스란?인터페이스는 클래스들이 동일한 동작을 보장하도록 설계된 추상화의 한 형태입니다. 인터페이스는 구현 클래스에서 반드시 오버라이딩하여 구현해야 하는 추상 메소드 집합을 선언하고, 이러한 강제성을 통해 일관된 동작을 보장합니다. 인터페이스는 보통 추상클래스와 많이 비교하는데 추상 클래스가 그 추상 클래스를 상속 받아서 추상 클래스에서 선언된 변수나 메소드를 실체 클래스에서 사용하고 확장시키는데 의의가 있다면 인터페이스는 인터페이스에서 선언한 추상 메소드를 자식클래스에서 구현을 강제함으로써 같은 동작을 보장하는데 의의가 있습니다. 또한 인터페이스는 추상클래스와 달리 다중 상속이 가능하며 만약 인터페이스의 추상 메소드를 구현하지 않으면 컴파일 오류가 발생합니다.인터페이스 구성상수 필드(Constant..
[Java] 추상 클래스란 무엇인가?
·
Java
추상 클래스란?객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 합니다. 즉, 추상 클래스는 실체 클래스와 상속의 관계를 가지고 있으며 추상 클래스가 부모이고 실체 클래스가 자식으로 구현되어 실체 클래스가 추상 클래스의 특성을 물려받아 추가적인 특성을 가질 수 있도록 합니다. 또한, 추상 클래스는 직접 객체화할 수 없으며, 단일 상속만 허용합니다. 추상 클래스를 사용하는 주요 이유는 다음 두 가지입니다.1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적여러 개발자가 실체 클래스를 설계할 때 같은 기능을 하는 메소드의 이름을 다르게 설정하는 경우, 코드의 일관성이 떨어질 수 있습니다. 추상 클래스는 이러한 공통 ..