Language
-
Java - '==' 연산자 와 'equals()'를 이용한 문자열 비교Language/Java 2022. 9. 20. 15:25
문자열 비교 String 변수 생성 방식 String 변수를 생성할 때는 다음과 같은 두 가지 방법이 있다. 1. 리터럴을 이용한 방식 2. new 연산자를 이용한 방식 위 두 가지 방식에는 큰 차이점이 존재한다. 리터럴 방식을 사용해서 String을 생성하면 String Constant Pool이라는 영역에 존재하게 되고, new 방식을 사용하게 되면 Heap 영역에 존재하게 된다. String을 리터럴로 선언할 경우 내부적으로 String의 intern() 메서드가 호출되고 intern() 메서드는 주어진 문자열이 String Constant Pool에 존재하는지 검색한다. 만약, 주어진 문자열이 존재하는 경우 해당 문자열의 주소 값을 반환하고, 없는 경우에는 String Constant Pool에 ..
-
Java - Wrapper ClassLanguage/Java 2022. 9. 20. 15:17
래퍼 클래스(Wrapper Class) 래퍼 클래스(Wrapper Class)란? 자바의 자료형은 크게 기본 타입(Primitive Type)과 참조 타입(Reference Type)으로 나뉜다. 기본 타입은 대표적으로 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있는데, 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 있다. 이러한 상황에서 기본 타입을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(Wrapper Class)라고 한다. 자바의 모든 기본 타입은 값을 갖는 객체를 생성할 수 있다. 이러한 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문이다. 래퍼..
-
Java - Mutex & Semaphore & MonitorLanguage/Java 2022. 4. 6. 17:17
뮤텍스(Mutex Exclusion) 뮤텍스란? 멀티프로그래밍 환경에서 자원에 대한 접근에 제한을 강제하기 위한 동기화 기법이다. 뮤텍스의 특징은 아래와 같다. 1. boolean 타입의 lock 변수를 사용하기 때문에, 1개의 공유 자원에 대한 접근을 제한한다. 2. 공유 자원을 사용 중인 스레드가 있을 때, 다른 스레드가 공유 자원에 접근한다면 블로킹 후 대기 큐로 보낸다. 3. lock을 건 스레드만 lock을 해제할 수 있다. 세마포어(Semaphore) 세마포어란? 멀티프로그래밍 환경에서 다수의 프로세스나 스레드가 n개의 공유 자원에 대한 접근을 제한하는 방법으로 사용되는 동기화 기법이다. 세마포어의 특징은 아래와 같다. 1. 세마포어 변수를 통해 wait, signal을 관리한다. 세마포어 변..
-
Java - ReflectionLanguage/Java 2022. 4. 5. 17:33
Reflection Reflection이란? 리플렉션은 Heap 영역에 로드된 Class 타입의 객체를 통해, 원하는 클래스의 인스턴스를 생성할 수 있도록 지원하고, 인스턴스의 필드와 메서드를 접근 제어자와 상관없이 사용할 수 있도록 지원하는 API이다. 여기서 로드된 클래스라고 하면, JVM의 Class Loader에서 클래스 파일에 대한 로딩을 완료한 후, 해당 클래스의 정보를 담은 Class 타입의 객체를 생성하여 메모리의 Heap 영역에 저장해 둔 것을 의미한다. new 키워드를 통해 만드는 객체와는 다른 것임을 유의해야 한다. Reflection 사용 방법 리플렉션을 사용하기에 앞서, Heap 영역에 로드된 클래스 타입의 객체를 가져와야 한다. 클래스 타입의 객체를 가져오기 위한 방법에는 크게 ..
-
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 문을 만나게 되면 종료된다. 메인 스레드는 필요에 따라 작업 스레드를 만들어서 위 사진과 같이 병렬로 코드를 실행할 수 있다. 싱글 스레드 애플리케이션에서는 메인 스레드가 종료하면 프로세스도 종료되지만, 멀티 스레드 애플리케이션에서는 실행 중인 스레드가 하나라도 있다면 프로세스는 종료되지 않는다. 특히, 메인 스레드가 작업 스레드보다 먼저 종료되어도 작업 스레드가 실행 ..