DataStructure를 직접 구현하지 않고 편하게 사용할 수 있는 구현체. 공간을 미리 산정하지 않아도 되고 객체의 수도 동적으로 정할 수 있다. 종류는 List, Map, Set, Stack, Queue가 있다.
주석이라는 뜻이고 인터페이스를 기반으로한 문법이다. 주로 메소드를 오버라이드 할 때 쓰이는 @Override
가 그 예이다.
주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입하고 실행되는 시점을 조절하기 위해 사용한다.
제네릭은 다양한 타입의 객체를 다룰 때 컴파일 과정에서 객체의 타입체크를 해주도록 도와주는 기능이다. 예를 들면 Collection에 특정 객체만 추가될 수 있도록 하는 것이 있다.
상위 클래스의 메소드 이름과 리턴값은 동일하지만 매개변수만 다른 메소드를 만드는 것. 이를 통해 다양한 상황에서 메소드가 실행될 수 있도록 한다.
변수 또는 메소드의 접근 범위를 설정하는 자바의 예약어
기본 자료형에 대한 클래스 표현. 즉 Integer, Float, Boolean 등으로 사용하는 것이다. 이렇게 사용하는 이유는
==
으로 비교하지만 Wrapper Class인 경우 .intValue()
메소드로 비교해야 하는 불편함이 있다.JDK 1.5 부터는 지원하는 기능. 이 기능은 각 Wrapper Class에 상응하는 Primitive data type일 경우에 가능
List<Integer> list = new ArrayList<>();list.add(1);
위와 같이 1을 Integer 객체로 감싸서 넣지 않는다. 자바 내부에서 AutoBoxing 해주기 때문이다.
실행되고 있는 프로그램의 개체.
프로세스 안에 존재하여 프로세스의 자원을 공유하는 개체.
필드는 클래스에 변수를 정의하는 공간. 이곳에 변수를 만들어두면 메소드끼리 쉽게 참고할 수 있어서 편리하다. 그러나 객체가 여러 스레드에 접근하는 싱글톤 객체라면 필드에 변수를 선언하는 방법 대신 모든 변수를 파람으로 받아 리턴하는 방식으로 코드를 구성해야 한다.
스레드가 하나의 자원을 공유함에 따라 데이터의 일관성 문제가 생기는데 이를 통해 하나의 스레드만 접근할 수 있도록 함.
스레드 간 간섭이 없어야 하는 데이터레 사용한다. 멀티스레드 환경에서는 클래스의 필드에 멤버를 투가할 수 없고 매개변수로 넘겨 받아야 하기 때문이다. 즉, 스레드 내부의 싱글톤을 사용하기 위해 사용한다. 주로 사용자 인증, 세션 정보, 트랜잭션 컨텍스트에 사용한다. 스레드 풀 환경에서 이를 사용할 경우 ThreadLocal 변수에 보관된 데이터 사용이 끝나면 반드시 해당 데이터를 삭제해주어야 한다.
스레드 간 통신 시 shared memory 등을 쓰는 경우 하나의 자원에 두 개 이상의 프로세스 혹은 스레드가 접근하는 경우 사용된다. 상호배제라고도 하며 Critical Section을 가진 스레드의 Running timee이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술.
프로세스에서 통신 시 뮤텍스 말고 세마포어를 사용한다. 리소스 상태를 나타내는 간단한 카운터 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있음.
인스턴스 변수 또는 인스턴스 메소드를 클래스 변수 혹은 클래스 메소드로 변경시킴. 모든 인스턴스 간 공유하는 변수 혹은 메소드가 된다.
클래스에서 정해진 기능과 모양에 맞추어 인스턴스가 생성됨
Tiger tiger = new Tiger();Animal animal = new Tiger();Living living = new Tiger();
다형성이 없다면 각 클래스 별로 연산을 해주어야 하지만 다형성으로 인해 하나로 묶을 수 있어 편리함.
abstract
가 붙는다. 구현이 강제되지 않는다.