Devin.KR

타자연습 / 지식 여정

자바 예약어 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++ 같은 연산은 여전히 깨집니다.