자바 예약어 55가지 - 설명을 보고 키워드를 직접 입력하며 익히는 타자 학습
설명을 읽고 해당하는 자바 키워드를 입력하세요. record, sealed 처럼 최근에 들어온 것도 함께 다룹니다.
진행0 / 0
타/분0
정확도 %100.0
시간0:00
준비 중…
자바 예약어 55가지 - 설명을 보고 키워드를 직접 입력하며 익히는 타자 학습 한눈에 보기
| 순서 | 설명 | 정답 | 핵심 |
|---|---|---|---|
| 1 | 클래스를 정의한다 | class |
가장 기본이 되는 타입 선언. 파일 이름과 public 클래스 이름이 같아야 한다 |
| 2 | 인터페이스를 정의한다 | interface |
구현 없이 약속만 정의한다. 자바 8부터 default 메서드로 구현도 담을 수 있다 |
| 3 | 열거형을 정의한다 | enum |
자바 5부터 |
| 4 | 불변 데이터 전달용 타입 | record |
자바 16부터 정식 |
| 5 | 봉인된 계층을 만든다 | sealed |
허용된 하위 타입만 상속할 수 있다 |
| 6 | 봉인 계층에서 더 열어 둔다 | non-sealed |
sealed 계층의 한 갈래를 다시 열어 둔다. 그 아래로는 누구나 상속할 수 있다 |
| 7 | 상속받는다 | extends |
클래스는 하나만 |
| 8 | 인터페이스를 구현한다 | implements |
여러 개 가능 |
| 9 | 패키지를 선언한다 | package |
파일 맨 위에 온다 |
| 10 | 다른 타입을 가져온다 | import |
다른 패키지의 타입을 짧은 이름으로 쓰게 해 준다. 바이트코드에는 남지 않는다 |
| 11 | 어디서나 접근 가능 | public |
모든 패키지에서 접근할 수 있다. 공개하면 되돌리기 어려우니 아낀다 |
| 12 | 같은 클래스에서만 | private |
같은 클래스 안에서만 접근할 수 있다. 기본값으로 삼는 것이 좋다 |
| 13 | 같은 패키지와 하위 클래스 | protected |
같은 패키지와 하위 클래스에서 접근할 수 있다. 상속을 전제한 공개다 |
| 14 | 인스턴스 없이 쓴다 | static |
인스턴스가 아니라 클래스에 속한다. 상태를 담으면 스레드 문제가 생긴다 |
| 15 | 값을 바꿀 수 없다 | final |
변수·메서드·클래스에 붙는다 |
| 16 | 추상 메서드를 갖는다 | abstract |
구현을 비워 두고 하위 클래스에 맡긴다. 그 자체로는 인스턴스를 만들 수 없다 |
| 17 | 여러 스레드에서 항상 최신 값 | volatile |
가시성만 보장하고 원자성은 아니다 |
| 18 | 한 번에 한 스레드만 | synchronized |
같은 잠금에 대해 한 번에 한 스레드만 들어간다. 범위가 넓으면 성능을 깎는다 |
| 19 | 직렬화에서 제외한다 | transient |
직렬화 대상에서 뺀다. 비밀번호나 캐시처럼 저장하면 안 되는 필드에 붙인다 |
| 20 | 네이티브 코드로 구현 | native |
구현이 자바 밖(보통 C)에 있다는 표시다. JNI 로 연결한다 |
| 21 | 조건 분기 | if |
조건이 참일 때 실행한다. 중괄호를 생략하면 나중에 줄을 추가할 때 버그가 난다 |
| 22 | 그 밖의 경우 | else |
앞 조건이 거짓일 때 실행한다 |
| 23 | 값으로 분기 | switch |
자바 14부터 식으로도 쓴다 |
| 24 | 분기의 한 경우 | case |
switch 안에서 값이 일치할 때의 갈래다. break 를 빠뜨리면 아래로 흘러내린다 |
| 25 | 어디에도 맞지 않을 때 | default |
인터페이스 기본 메서드에도 쓴다 |
| 26 | 조건이 참인 동안 반복 | while |
조건이 참인 동안 반복한다. 조건을 먼저 검사하므로 한 번도 안 돌 수 있다 |
| 27 | 일단 한 번은 실행 | do |
본문을 먼저 실행하고 조건을 검사한다. 최소 한 번은 돈다 |
| 28 | 초기화·조건·증감 반복 | for |
초기화·조건·증감을 한 줄에 쓴다. 배열과 컬렉션은 향상된 for 가 더 안전하다 |
| 29 | 반복을 빠져나간다 | break |
가장 가까운 반복문이나 switch 를 빠져나간다 |
| 30 | 다음 반복으로 건너뛴다 | continue |
이번 회차를 건너뛰고 다음 반복으로 간다 |
| 31 | 값을 돌려준다 | return |
메서드를 끝내고 값을 돌려준다. void 메서드에서는 값 없이 쓴다 |
| 32 | 예외를 감시한다 | try |
예외가 날 수 있는 구간을 감싼다. 자원은 try-with-resources 로 닫는 것이 안전하다 |
| 33 | 예외를 처리한다 | catch |
발생한 예외를 잡아 처리한다. 잡고 아무것도 안 하면 원인이 사라진다 |
| 34 | 예외와 무관하게 실행 | finally |
예외가 나든 안 나든 실행한다. 여기서 return 하면 예외가 삼켜진다 |
| 35 | 예외를 발생시킨다 | throw |
예외를 직접 발생시킨다. 인스턴스를 던진다 |
| 36 | 발생 가능한 예외를 선언 | throws |
이 메서드가 어떤 검사 예외를 낼 수 있는지 선언한다 |
| 37 | 조건을 단언한다 | assert |
기본적으로 꺼져 있다 |
| 38 | 객체를 만든다 | new |
객체를 만들어 생성자를 부른다 |
| 39 | 현재 인스턴스 | this |
현재 인스턴스를 가리킨다. 생성자에서 다른 생성자를 부를 때도 쓴다 |
| 40 | 부모 클래스 | super |
부모 클래스의 구현을 부른다. 다중 상속에서 MRO 를 따라간다 |
| 41 | 타입을 확인한다 | instanceof |
자바 16부터 패턴 매칭을 지원한다 |
| 42 | 참 | true |
참 리터럴. boolean 에만 쓴다 |
| 43 | 거짓 | false |
거짓 리터럴 |
| 44 | 빈 참조 | null |
키워드가 아니라 리터럴이다 |
| 45 | 정수 32비트 | int |
정수로 바꾼다. 문자열이면 진법을 두 번째 인자로 줄 수 있다 |
| 46 | 정수 64비트 | long |
64비트 정수. 리터럴 뒤에 L 을 붙인다 |
| 47 | 정수 16비트 | short |
16비트 정수. 실무에서 거의 쓰지 않는다 |
| 48 | 정수 8비트 | byte |
8비트 정수. 범위는 -128~127 이다 |
| 49 | 문자 하나 | char |
16비트 UTF-16 코드 유닛이다 |
| 50 | 참거짓 | boolean |
참 또는 거짓. 크기는 JVM 구현에 맡겨져 있다 |
| 51 | 실수 32비트 | float |
실수로 바꾼다. 이진 부동소수라 0.1 을 정확히 담지 못한다 |
| 52 | 실수 64비트 | double |
64비트 실수. 그래도 금액에는 BigDecimal 을 쓴다 |
| 53 | 돌려줄 값이 없다 | void |
돌려줄 값이 없다는 표시다 |
| 54 | 제네릭 타입 제한 | super |
와일드카드에서 하한을 뜻한다 |
| 55 | 타입 추론 지역 변수 | var |
자바 10부터. 키워드가 아니라 예약 타입명이다 |
| 56 | 멀티 스레드 대기·통지 | yield |
switch 식에서 값을 낸다. 자바 14부터 |
이렇게 하면 더 잘 외워집니다
- 접근 제어자(public protected private), 제어문, 타입, 예외 처리로 묶어서 보면 덩어리가 잡힙니다.
- volatile 과 synchronized, final 과 finally 와 finalize 처럼 이름이 비슷해 헷갈리는 것을 따로 모아 보세요.
- record, sealed, var 는 비교적 최근에 들어온 것들입니다. 면접에서 자주 물어봅니다.
- null 과 var 는 엄밀히 말해 예약어가 아닙니다. 설명에 그렇게 적어 두었습니다.
자주 묻는 질문
final, finally, finalize 는 어떻게 다른가요?
final 은 변경 금지, finally 는 예외와 무관하게 실행되는 블록, finalize 는 GC 직전에 불리던 메서드(지금은 쓰지 않습니다)입니다.
var 도 예약어인가요?
아닙니다. 예약 타입명이라 var 라는 이름의 변수를 만들 수 있습니다. 다만 권하지 않습니다.
volatile 만 쓰면 스레드 안전한가요?
아닙니다. volatile 은 가시성만 보장하고 원자성은 보장하지 않습니다. count++ 같은 연산은 여전히 깨집니다.