Language/Java
-
Java - 추상 클래스 & 인터페이스Language/Java 2022. 9. 21. 14:04
추상 클래스 추상 클래스란? 추상 클래스는 클래스 구현부 내부에 추상 메서드가 하나 이상 포함되거나 abstract 키워드로 정의된 클래스를 의미한다. 이러한 추상 클래스를 상속받은 클래스(하위 클래스)는 자기의 성질에 맞게 추상 메서드를 오버라이딩하여 사용한다. 추상 클래스의 특징 ㆍ 추상 클래스는 new 연산자를 사용하여 객체를 생성할 수 없다. ㆍ 추상 클래스(부모)와 일반 클래스(자식)는 상속의 관계에 놓여있다. ㆍ 추상 클래스는 새로운 일반 클래스를 위한 부모 클래스의 용도로만 사용된다. ㆍ 공통된 필드와 메서드를 통일하여 일반 클래스 작성 시 시간을 절약할 수 있다. ㆍ 추상 클래스는 단일 상속만 가능하며 일반 변수를 가질 수 있다. ㆍ 추상 클래스는 동일한 부모를 가지는 클래스를 묶는 개념으..
-
Java - finalLanguage/Java 2022. 9. 20. 17:34
final final이란? 위키피디아에 따르면 자바에서 사용하는 final은 다음과 같다. "자바 언어에서 final은 오직 한 번만 할당할 수 있는 entity를 정의할 때 사용된다. final로 선언된 변수가 할당되면 항상 같은 값은 값을 가진다. 만약 final 변수가 객체를 참조하고 있다면, 해당 객체의 상태가 바뀌어도 final 변수는 매번 동일한 내용을 참조한다." 이러한 final 키워드는 변수(variable), 메서드(method), 클래스(class)에 사용될 수 있다. 이 final 키워드는 어떤 곳에 사용되느냐에 따라 다른 의미를 가진다. 하지만, final 키워드를 붙이면 무언가를 제한한다는 의미를 가진다는 것이 공통적인 성격이다. 변수(varibale) 변수에 final을 붙이게..
-
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 영역에 로드된 클래스 타입의 객체를 가져와야 한다. 클래스 타입의 객체를 가져오기 위한 방법에는 크게 ..