interface를 구현하기 위해 선언할 때 사용하며 여러 개의 인터페이스를 ,로 구분하여 나열할 수 있다.
extends
클래스나 abstract 클래스를 확장 시 사용하며 하나의 클래스만 확장할 수 있다.
private
다른 클래스에서의 접근을 불가능하게 하는 접근 제한자 (접근 제어자)
protected
같은 패키지 내에 있거나 상속받은 경우에만 접근할 수 있도록 하는 접근 제한자
public
누구나 접근할 수 있도록 하는 접근 제한자
final
변수에 사용할 경우 값을 변경하지 못하도록 상수로 선언하며 클래스에 사용 시 확장할 수 없도록 선언하며 메소드에 사용 시 오버라이딩 할 수 없도록 선언한다.
synchronized
동시 접근 제어자로 Thread Safe하게 해준다.
void
메소드에서 반환하는 값이 없다는 것을 의미한다.
static
하나의 인스턴스만 허용하는 제어자로 객체 생성 없이 접근할 수 있다.
return
메소드를 종료하고 값을 반환하기 위해 사용한다.
assert
검증을 위한 로직 선언 시 사용한다.
native
다른 언어로 구현된 것을 선언 시 사용한다.
new
새로운 객체 생성을 선언한다.
null
참조되고 있는 객체가 없다는 것을 선언한다.
strictfp
strict 소수 값 제어자
super
상위 클래스 참조
this
현 객체에 대한 참조를 명시적으로 나타낼 때 사용한다.
transient
Serializable 할 때 저장 / 전송되지 않는 객체를 선언한다.
volatile
하나의 변수를 여러 쓰레드가 참조할 때 모두 동일한 값을 바라보도록 할 때 사용한다.
instanceof
객체의 타입을 확인할 때 사용한다.
조건 및 반복문과 관련 있는 예약어 (10개)
타입
설명
if
데이터 조건을 확인할 때 사용하며 if 괄호 안의 결과는 반드시 boolean 타입이어야 한다.
else
if 조건에 부합하지 않는 경우를 선언한다.
switch
정수형 및 String 문자열의 값에 따른 분기를 할 때 사용한다.
case
switch에서 선언한 변수의 값에 따른 작업을 선언한다.
default
switch에서 case 조건에 부합되는 값이 없을 때 기본적으로 수행되는 작업을 선언한다.
for
조건에 따른 반복을 변수에 따라 수행하고자 할 때 사용한다.
do
무조건 한 번 수행 후 조건 반복을 하고자 할 때 사용한다.
while
조건에 따른 반복만 수행하고자 할 때 사용한다.
continue
반복 작업시 조건 확인문으로 이동하고자 할 때 사용한다.
break
반복 작업을 종료하고자 할 때 사용한다.
예외 처리와 관련된 예약어 (5개)
타입
설명
try
예외가 발생 가능한 코드의 범위를 선언한다.
catch
try로 묶은 범위내에서 예외가 발생할 때 처리 방법을 선언한다.
finally
try-catch 블록 수행 후 반드시 실행해야 하는 작업을 선언한다.
throw
예외를 발생시키거나 호출한 클래스로 넘길 때 사용한다.
throws
예외를 던질수도 있다는 것을 선언할 때 사용한다.
제네릭 (Generic)
형 변환 시 발생할 수 있는 문제들을 사전에 없애기 위해서 만든 개념
실행했을 때가 아닌 컴파일 시점에서의 문제를 해결한다.
// 제네릭 클래스 예시
public class CastingGeneric<T> implements Serializable {
private T object;
public void setObject(T obj) { /* 생략 */ }
public T getObject() { /* 생략 */ }
}
제네릭 타입 명명 규칙
E : 요소, 자바 컬렉션에서 주로 사용한다.
K : 키
V : 값
N : 숫자
T : 타입
S, U, V : 2, 3, 4번째에 선언되는 타입
제네릭의 wildcard 타입
메소드 선언 시 제네릭 타입의 제한을 해소하기 위해 특정 타입 대신 <?>를 사용한다.
해당 타입을 사용 시 정확한 타입을 모르기 때문에 Object로 받는다.
// 제네릭 일반적인 wildcard 타입
public void wildcard(WildcardGeneric<?> c) {
Object value = c.getWildcard();
}
제한이 있는 wildcard 타입
기본 wildcard 타입 <?>는 어떤 타입도 올 수 있기에 특정 타입만 가능하도록 제한을 걸 수 있다.
ex) <? extends TypeName> 으로 선언 시 TypeName 클래스를 확장한 모든 클래스를 의미한다.
// 제한이 있는 wildcard 타입
public void wildcard2(WildcardGeneric<? extends Car> c) {
Car value = c.getWildcard();
}
제네릭한 메소드 선언하기
wildcard 사용 시 매개 변수로 넘어온 타입을 변경할 수 없다는 한계가 존재한다.
메소드를 제네릭하게 선언하면 제네릭 타입의 값을 변경할 수 있다.
// 제네릭한 메소드 선언
public <T> void genericMethod(WildcardGeneric<T> c, T addValue) {
c.setWildcard(addValue);
T value = c.getWildcard();
}
쓰레드 (Thread)
자바 프로그램 하나 실행 시 하나의 프로세스가 추가되고 그 안에서 여러 쓰레드가 수행된다.
쓰레드를 시작할 수 있는 인터페이스 / 클래스
java.lang.Runnable
java.lang.Thread
Runnable 인터페이스 구현
implements로 Runnable 인터페이스 구현을 선언해야한다.
public void run() 메소드 내용으로 쓰레드가 수행할 내용을 작성한다.
// Runnable 인터페이스 구현
public class RunnableClass implements Runnable {
public void run() {
// 내용 생략
}
}
Runnable 구현 클래스 사용 예시
Runnable 인터페이스를 구현한 경우 Thread 생성자에 해당 객체를 추가해서 사용해야 한다.
run() 메소드를 실행시키기 위해서 start() 메소드로 호출해줘야 한다.
RunnableClass runnable = new RunnableClass();
new Thread(runnable).start();
쓰레드 클래스를 확장하려면 extends 키워드로 상속을 받은 후 마찬가지로 run() 메소드를 작성한다.
Runnable 인터페이스와 달리 Thread 클래스를 확장하면 바로 start() 메소드를 사용할 수 있다.
쓰레드 내용 간단 정리
Runnable 인터페이스나 Thread 클래스를 직접/간접적으로 구현한 클래스만 쓰레드로 처리될 수 있다.