Language/Java
-
Java - hashCode() & equals()Language/Java 2022. 4. 5. 15:34
hashCode() hashCode()란? hashCode()는 두 객체가 같은 객체인지 확인한다. hashCode() 메서드는 '=='과 같은 동일 비교 기능을 하며, 반환 값으로 런타임 중 객체의 유일한 정수 값을 반환한다. 일반적으로 Heap에 저장된 객체의 메모리 주소를 반환한다. 해시란? 해시는 임의의 크기를 가진 데이터(key)를 고정된 크기의 데이터(value)로 변화시켜 저장하는 것이다. key에 대한 해시값을 구하는 과정을 해싱이라고 하며, 이때 사용하는 함수를 해시함수라고 한다. equals() equals()란? equals()는 두 개의 객체가 동일한지 검사하기 위해 사용되는 메서드이다. equals()가 객체를 비교하는 방법은 두 개의 객체가 참조하는 것이 동일한지를 확인하는 것이..
-
Java - ThreadLanguage/Java 2022. 3. 28. 14:19
메인 스레드 메인 스레드의 동작 public static void main(String[] args) { String data = null; if (...) { } while (...) { } } Java 애플리케이션에서 메인 스레드는 main() 메서드가 실행될 때 시작되며, main() 메서드에서 마지막 코드를 실행하거나 return 문을 만나게 되면 종료된다. 메인 스레드는 필요에 따라 작업 스레드를 만들어서 위 사진과 같이 병렬로 코드를 실행할 수 있다. 싱글 스레드 애플리케이션에서는 메인 스레드가 종료하면 프로세스도 종료되지만, 멀티 스레드 애플리케이션에서는 실행 중인 스레드가 하나라도 있다면 프로세스는 종료되지 않는다. 특히, 메인 스레드가 작업 스레드보다 먼저 종료되어도 작업 스레드가 실행 ..
-
Java - Overloading & OverridingLanguage/Java 2022. 3. 23. 17:55
Overloading (오버로딩) 메서드 시그니처(Method Signature) 메서드 오버로딩의 핵심은 메서드 시그니처에 있다. 메서드 시그니처란 메서드의 선언부에 명시되어 있는 매개변수의 리스트를 말한다. 두 개의 메서드는 다음 조건을 만족하면 같은 시그니처를 가진다고 할 수 있다. 1. 메서드의 이름 2. 매개변수의 수 3. 매개변수 타입의 순서 여기서 중요한 점은 리턴 타입이 메서드 시그니처에 포함되지 않는다는 점이다. public class Test { /** 기준이 되는 메서드 */ public int method(int x, int y) { return x + y; } /** 메서드 정의 가능 */ public int method(int x) { return x; } /** 메서드 정의 가..
-
Java - Checked Exception & Unchecked ExceptionLanguage/Java 2022. 3. 22. 15:09
예외(Exception)와 에러(Error) 예외(Exception)란? 프로그래밍에서 예외란 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름에 어긋나는 경우를 말한다. 그리고 Java에서 예외는 개발자가 직접 처리할 수 있기 때문에 예외 상황을 미리 예측하여 핸들링할 수 있다. 에러(Error)란? 에러는 시스템에 무엇인가 비정상적인 상황이 발생한 경우를 말한다. 주로 JVM에서 발생하는 것이며, 예외와 반대로 이를 애플리케이션 코드에서 잡을 수 없다. 에러의 예시로는 OutOfMemoryError, ThreadDeath, StackOverflowError 등이 있다. 예외 구분 예외는 위 그림과 같이 Checked Exception과 Un..
-
Java - 직렬화(Serialization)와 역직렬화(Deserialization)Language/Java 2022. 3. 21. 17:48
데이터 직렬화와 역직렬화 데이터 직렬화와 역직렬화란? 데이터 직렬화 : 메모리의 데이터를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것이다. 데이터 역직렬화 : 디스크에 저장한 데이터를 읽거나 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것이다. 데이터를 저장하거나 통신하기 위해 직렬화 과정을 거치는 것은 알겠는데, 왜 데이터를 그냥 사용하지 않고 이러한 과정을 거치는 것일까? 직렬화가 필요한 이유 어떠한 개발 언어를 사용하던지 간에 사용하는 데이터는 다음과 같이 크게 두 가지로 나뉜다. 값 형식 데이터 : int, float, char 등 값 형식 데이터는 Stack에 메모리가 쌓이고 직접 접근이 가능하다. 참조 형식 데이터 : 객체와 같은 참조 형식 변수..
-
Java - staticLanguage/Java 2022. 3. 4. 13:24
static static이란? static은 고정된이라는 의미를 가지고 있으며, static 키워드를 통해 정적 필드와 정적 메서드를 만들 수 있다. 정적 필드와 정적 메서드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이기 때문에 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용이 가능하며, 프로그램이 종료되기 전까지 사용할 수 있다. static 키워드를 통해 생성된 정적 멤버들은 heap 영역이 아닌, static 영역에 할당된다. static 영역에 할당된 메모리는 Garbage Collection의 관리 영역 밖에 존재하기 때문에 프로그램이 종료될 때까지 메모리에 값이 유지된 채로 존재하게 된다. ..