[자바의 신] 정리해 봅시다 (Ch 20~27)

Eunbi Lee·2023년 4월 16일
1

Java

목록 보기
3/5
post-thumbnail

자바의 신

자바의 신 - 정리해 봅시다의 각 챕터별 정답

자바의 신 19장은 별도로 정리해 봅시다 파트가 수록되어 있지 않습니다.

20장 가장 많이 쓰는 패키지는 자바랭

1. 자바 패키지 중 같은 패키지에 있는 클래스를 제외하고 별도로 import하지 않아도 되는 해키지는 무엇인가요?

  • (p 552) java.lang 패키지

2. 자바의 메모리가 부족해서 발생하는 에러는 무엇인가요?

  • (p 552) OutOfMemoryError

3. 메소드 호출 관계가 너무 많아서 발생하는 에러는 무엇인가요?

  • (p 552) StackOverflowError

4. java.lang 패키지에 선언되어 있는 3개의 어노테이션에는 어떤 것들이 있고, 각각의 역할은 무엇인가요?

  • (p 554)
  • Deprecated : 더이상 사용되지 않음을 컴파일러에 알림
  • Override : 해당 메소드는 부모 클래스에 있는 메소드를 overriding 했음을 명시적으로 선언
  • Suppress Warnings : 경고 제외

5. Double과 Integer 같은 숫자 타입에서 처리할 수 있는 최대, 최소값을 알 수 있는 상수의 이름은 무엇인가요?

  • MAX_VALUE, MIN_VALUE

6. Integer 값을 2진법으로 표현하려면 어떤 메소드를 사용해야 하나요?

  • (p 557) toBinaryString()

7. Integer 값을 16진법으로 표현하려면 어떤 메소드를 사용해야 하나요?

  • toHexString()

8. 속성(Properties)과 환경(Environments) 값의 차이는 무엇인가요?

  • (p 560~561)
  • 속성(Properties) : java.lang 패키지에 속하며 Hashtable의 상속을 받고, 추가 또는 변경이 가능하다.
  • 환경(Environments) : 읽기만 가능하다.

9. System.out과 System.err에서 사용할 수 있는 메소드들을 확인하려면 어떤 클래스를 찾아봐야 하나요?

  • (p 564) PrintStream

10. System 클래스에서 현재 시간을 조회하는 용도로 사용하는 메소드의 이름은 무엇인가요?

  • (p 563) CurrentTimeMillis()

11. System 클래스에서 시간 측정 용도로 사용하는 메소드 이름은 무엇인가요?

  • nanoTimes()

12. System.out.print() 메소드와 System.out.println() 메소드의 차이는 무엇인가요?

  • 줄바꿈 차이

13. System.out.println() 메소드에 객체가 매개 변수로 넘어 왔을 때 String의 어떤 메소드가 호출되어 결과를 출력하나요? 그리고, 그 메소드를 사용하는 이유는 무엇인가요?

  • (p 567) valueOf(), 전달받은 객체가 null 값일 경우 문자열로 null을 반환하기 위함이다.

21장 실수를 방지하기 위한 제네릭이라는 것도 있어요

1. 제네릭이 자바에 추가된 이유는 무엇인가요?

  • (p 574) 타입 형변환에서 발생할 수 있는 문제점을 사전에, 즉 실행이 아닌 컴파일할 때 점검할 수 있도록 하기 위해서 추가되었다.

2. 제네릭 타입의 이름은 T나 E처럼 하나의 캐릭터로 선언되어야 하나요?

  • X, 그러나 일반적으로 대문자로 시작한다.

3. 메소드에서 제네릭 타입을 명시적으로 지정하기 애매할 경우에는 <>안에 어떤 기호를 넣어 주어야 하나요?

  • ?

4. 메소드에서 제네릭 타입을 명시적으로 지정하기에는 애매하지만, 어떤 클래스의 상속을 받은 특정 타입만 가능하다는 것을 나타내려면 <>안에 어떤 기호를 넣어 주어야 하나요?

  • (p 581) ? extends

5. 제네릭 선언시 wildcard라는 것을 선언했을 때 어떤 제약 사항이 있나요?

  • (p 582) 객체에 값을 추가할 수 없다.

6. 메소드를 제네릭하게 선언하려면 리턴 타입 앞에 어떤 것을 추가해주면 되나요?

  • (p 583) 객체 안에 원하는 제네릭 타입을 명시한다, 이때 한 개 이상의 제네릭 타입 선언은 콤마로 구분한다.

22장 자바랭 다음으로 많이 쓰는 애들은 컬렉션 - Part1(List)

1. Collection 인터페이스를 구현하는 대표적인 3개의 자료 구조에는 어떤 것들이 있나요?

  • (p 589) List, Set, Queue

2. 배열과 같이 순서가 있는 목록형을 나타내는 대표 인터페이스는 무엇인가요?

  • (p 591) List

3. ArrayList라는 클래스의 생성자 중 매개 변수가 없는 기본 생성자를 사용하면 기본적으로 몇 개의 저장 공간을 가지나요?

  • (p 596) 10

4. 만약 ArrayList 클래스의 저장 공간 개수를 처음부터 지정하려면 어떤 생성자를 사용하면 되나요?

  • (p 594) 매개변수가 있는 생성자, 즉 ArrayList(int 공간 개수)
ArrayList(int initialCapacity) {
}

5. ArrayList 객체를 생성할 때 제네릭을 사용하는 이유는 무엇인가요?

  • (p 595, 596) 여러 종류의 객체를 하나의 배열에 담을 때 권장하기 때문
  • 또는 컴파일 시점에 잘못 지정한 타입을 걸러낼 수 있기 때문

6. ArrayList에 데이터를 담는 메소드 이름 두 가지는 무엇인가요?

  • (p 597) add(), addAll()

7. Collection 인터페이스를 구현한 클래스의 객체에서 사용할 수 있는 for 루프의 구조는 어떻게 되나요?

  • (p 598)
for(타입이름 임시변수명 : 반복대상객체) {
}

8. Colletion 인터페이스를 구현한 클래스의 객체 크기를 확인하는 메소드 이름은 무엇인가요?

  • size()

9. ArrayList에서 특정 위치에 있는 데이터를 확인하는 메소드는 무엇인가요?

  • (p 602) get()

10. ArrayList에서 특정 위치에 있는 데이터를 삭제하는 메소드는 무엇인가요?

  • remove()

11. ArrayList에서 특정 위치에 있는 데이터를 수정하는 메소드는 무엇인가요?

  • (p 607) set()

12. java.util 패키지에 있는 Stack이라는 클래스는 어떤 클래스를 확장한 것인가요?

  • (p 609) List 인터페이스를 구현하며, Vector 클래스를 상속받음

13. Stack 클래스에서 데이터를 담는 메소드는 무엇인가요?

  • push()

14. Stack 클래스에서 가장 위에 있는 데이터를 확인만 하는 메소드는 무엇인가요?

  • (p 609) peek()

15. Stack 클래스에서 가장 위에 있는 데이터를 삭제하고 리턴하는 메소드는 무엇인가요?

  • pop()

23장 자바랭 다음으로 많이 쓰는 애들은 컬렉션 - Part2(Set과 Queue)

1. 순서와 상관 없는 여러 데이터를 하나의 객체에 저장할 때 사용하는 Collection의 하위 인터페이스는 무엇인가요?

  • Set

2. HashSet 클래스는 생성자를 통하여 저장 가능한 데이터의 초기 크기를 지정할 수 있나요?

  • (p 620) O

3. HasgSet 클래스의 객체에 데이터를 추가하는 메소드는 무엇인가요?

  • add()

4. HashSet 클래스의 객체에 어떤 데이터가 존재하는지 확인하는 메소드는 무엇인가요?

  • 지정한 객체가 존재하는지 확인 → contains(Object o)
  • 데이터가 있는지 확인 → isEmpty()

5. HashSet 클래스의 객체에 어떤 데이터를 삭제하는 메소드는 무엇인가요?

  • remove()

6. Queue는 FIFO를 처리하기 위한 클래스들의 인터페이스입니다. FIFO는 무슨 단어의 약자인가요?

  • Fist-In First-Out

7. Deque는 무슨 단어의 약어이며, 용도는 무엇인가요?

  • (p 626) Double Ended Queue
  • Queue의 기능(FIFO)을 포함하며, 맨 앞에 값을 넣거난 빼는 작업 및 맨 뒤에 값을 넣거나 빼는 작업을 용이하게 수행하기 위해서 사용한다.

8. LinkedList(연결 리스트) 클래스의 특징을 이야기해 봅시다.

  • 각 노드가 데이터와 포인터를 가지고, 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다.
    즉, 데이터를 담고 있는 노드들이 연결되어 있으며 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당한다.

24장 자바랭 다음으로 많이 쓰는 애들은 컬렉션 - Part3(Map)

1. Map 형태의 자료 구조는 무엇과 무엇으로 구성되어 있나요?

  • 키(key)-값(value)

2. Map에서 데이터를 저장하는 메소드는 무엇인가요?

  • (p 642) put()

3. Map에서 특정 키에 할당된 값을 가져오는 메소드는 무엇인가요?

  • (p 643) get(키값)

4. Map에서 특정 키와 관련된 키와 데이터를 지우는 메소드는 무엇인가요?

  • (p 643) remove()

5. Map에서 키의 목록을 가져오는 메소드는 무엇인가요?

  • (p 644) keySet()

6. Map에 저장되어 있는 데이터의 크기를 가져오는 메소드는 무엇인가요?

  • size()

7. HashMap과 Hashtable 중에서 키 또는 값에 null을 저장할 수 있는 것은 무엇인가요?

  • (p 639) HashMap

8. HashMap과 Hashtable 중에서 여러 쓰레드에서 동시에 접근해도 문제가 없는 것은 무엇인가요?

  • Hashtable

9. HashMap에서 특정 키가 존재하는지 확인하는 메소드는 무엇인가요?

  • (p 647) containsKey(키값)

10. 이 장에서 살펴본 클래스 중, 키가 저장되면서 정렬되는 Map에는 어떤 것이 있나요?

  • (p 648) Treemap

11. Properties 클래스는 어떤 클래스를 확장한 것인가요?

  • (p 649) Hashtable

12. Properties 클래스의 객체에 있는 데이터를 파일로 저장할 때에는 어떤 메소드들을 사용하면 되나요?

  • (p 652) store()

25장 쓰레드는 개발자라면 알아두는 것이 좋아요

1. 쓰레드와 프로세스의 차이를 이야기해 보세요.

  • 쓰레드는 프로세스 내에서 실행되는 흐름 단위이며, 프로세스는 실행 중인 프로그램이자 운영체제에서 시스템 자원을 할당 받는 단위라고 볼 수 있다.

2. 여러분들이 쓰레드 클래스를 만들기 위해서는 어떤 인터페이스를 구현하면 될까요?

  • Runnable

3. 2에서 이야기한 인터페이스에 선언되어 있는 유일한 메소드는 무엇인가요?

  • (p 663) run()

4. 쓰레드 클래스를 만들기 위해서 어떤 클래스를 확장하면 되나요?

  • Thread

5. 쓰레드가 시작되는 메소드의 이름은 무엇인가요?

  • (p 665) run()

6. 쓰레드를 시작하는 메소드의 이름은 무엇인가요?

  • start()

7. 쓰레드에 선언되어 있는 sleep() 메소드의 역할은 무엇인가요?

  • (p 671) 매개변수로 넘어온 시간만큼 대기한다.

8. sleep() 메소드를 사용할 때에는 try-catch로 감싸 주어 예외를 처리해 주어야 하는데, 그 이유는 무엇인가요?

  • (p 672) sleep()은 InterruptedException이라는 예외를 던질 수도 있기 때문이다.

9. 데몬(Daemon) 쓰레드와 일반 쓰레드의 차이는 무엇인가요?

  • (p 675) JVM은 일반 쓰레드가 끝날 때까지 기다리는 반면, 데몬 쓰레드는 수행 중이든/아니든 JVM이 기다리지 않고 종료할 수도 있다.

10. synchronized 구문은 왜 써주며, 어디에 사용해야 하나요?

  • (p 677) 여러 쓰레드가 한 객체에 선언된 메소드에 접근하여 동시에 연산을 수행할 때, 값이 꼬이는 경우를 방지하기 위해 사용한다.
  • 메소드의 접근 제어자 다음에 서술한다.
public synchronized void plus(int value) {
amount+=value;

11. synchronized를 사용하는 두 가지 방법은 어떤 것인가요?

  • 메소드 자체를 synchronized로 선언하거나 메소드 내의 특정 문장만 sychronized로 감싸는 방법이 있다.

12. 쓰레드의 상태에는 어떤 것들이 있나요?

  • (p 686) NEW : 쓰레드 객체는 생성되었지만, 아직 시작되지는 않은 상태
  • RUNNABLE : 쓰레드가 실행 중인 상태
  • BLOCKED : 쓰레드가 실행 중지 상태이며, 모니터 락(monitor lock)이 풀리기를 기다리는 상태
  • WAITING : 쓰레드가 대기 중인 상태
  • TIMED_WAITING : 특정 시간만큼 쓰레드가 대기 중인 상태
  • TERMINATED : 쓰레드가 종료된 상태

13. 쓰레드에 선언되어 있는 join() 메소드의 용도는 무엇인가요?

  • 수행 중인 쓰레드가 중지할 때까지 대기하기 위해 사용한다.

14. 쓰레드에 선언되어 있는 interrupt() 메소드의 용도는 무엇인가요?

  • 수행 중인 쓰레드에 중지 요청을 하기 위해 사용한다.

15. interrupt() 메소드를 호출하면 해당 쓰레드는 어떤 상태에 있을 때 interrupt() 메소드가 호출된 효과가 발생되나요?

  • sleep(), join(), wait() 메소드가 호출되어 대기 중인 상태에만 intterupt()가 추가된다.

16. Object 클래스에 선언된 wait() 메소드의 용도는 무엇인가요?

  • Object 객체의 모니터에 대기하고 있는 단일 쓰레드를 깨운다.

17. ThreadGroup 클래스에 선언된 enumerate() 메소드의 용도는 무엇인가요?

  • (p 697) 현재 쓰레드 그룹에 있는 모든 쓰레드를 매개변수로 넘어온 쓰레드 배열에 담는다.

26장 파일에 읽는 것을 읽고 쓰려면 아이오를 알아야죠

1. I/O는 각각 무엇의 약자인가요?

  • Input, Output

2. File 클래스는 파일만 지정할 수 있나요?

  • X, 경로도 지정할 수 있다.

3. OS마다 다른 경로 구분자를 처리하기 위해서는 File 클래스의 어떤 상수를 사용해야 하나요?

  • (p 709) separator

4. File 클래스에서 디렉터리를 만드는 mkdir()과 mkdirs() 메소드의 차이는 무엇인가요?

  • 디렉터리를 한 개만 만드는가 vs 디렉터리를 여러 개 만드는가

5. File 클래스의 list() 메소드와 listFiles() 메소드의 차이는 무엇인가요?

  • (p 713) 현재 디렉터리의 하위에 있는 목록을 String 배열로 리턴하는가 vs File 배열로 리턴하는가

6. FileFilter와 FilenameFilter의 차이는 무엇인가요?

  • (p 714) 매개변수로 넘어온 File 객체가 vs 디렉터리에 있는 경로나 파일 이름이 조건에 맞는가

7. InputStream이라는 abstract 클래스는 어떤 작업을 하기 위해서 만들어진 것인가요?

  • (p 718) 바이트 기반의 데이터를 읽는 작업을 하기 위해서이다.

8. OutputStream이라는 abstrack 클래스는 어떤 작업을 하기 위해서 만들어진 것인가요?

  • (p 721) 바이트 기반의 데이터를 스는 작업을 하기 위해서이다.

9. Reader라는 abstract 클래스는 어떤 작업을 하기 위해서 만들어진 것인가요?

  • char 기반의 데이터를 읽는 작업을 하기 위해서이다.

10. Writer라는 abstract 클래스는 어떤 작업을 하기 위해서 만들어진 것인가요?

  • char 기반의 데이터를 쓰는 작업을 하기 위해서이다.

11. BufferedReader나 BufferedWriter를 사용하는 이유는 무엇인가요?

  • (p 724) 메소드를 호출할 때마다 쓰는 것이 아니라, 버퍼라는 공간에 데이터를 보관하다가 버퍼가 차게되면 데이터를 저장(=효율적인 저장)을 하기 위해서이다.

12. 파일을 읽고, 문자열을 처리하기 위해서 필요한 Scanner 클래스가 속해있는 패키지는 무엇인가요?

  • (p 730) java.util

27장 Serializable과 NIO도 살펴 봅시다

1. java.io.Serializable을 import하는 이유는 무엇인가요?

  • (p 738) 생성한 객체를 파일로 저장하거나, 저장하여 읽거나 또는 객체를 다른 서버로 보내거나 다른 서버에서 생성한 객체를 받거나하는 일련의 작업을 위함이다.

즉, Serializable 인터페이스를 구현하여 직렬화 및 역직렬화를 위해서이다.

2. java.io.Serializable의 serialVersionUID를 지정하는 이유는 무엇인가요?

  • 객체의 버전을명시하여 객체가 같은지 다른지 확인하기 위해서이다. 이때, 추가로 변수의 개수 및 타입 등이 같아야 같은 클래스로 인식된다.

3. 자바에서 객체를 파일로 읽거나 쓸 때 사용하는 Stream 클래스 이름은 무엇인가요?

  • (p 739, 742) FileInputStrea, FileOutputStream

4. transient 예약어의 용도는 무엇인가요?

  • (p 746) 보안상 중요한 변수나 꼭 저장해야할 필요가 없는 변수에 대해서 사용하여 직렬화 대상에서 제외시킨다.

5. NIO가 생긴 이유는 무엇인가요?

  • 스트림 대신 채널과 버퍼를 사용하여 I/O 기반의 속도를 개선시키기 위해서이다.

6. NIO에서 Channel의 용도는 무엇인가요?

  • 데이터를 중간에 처리하는 역할이다.

7. NIO에서 Buffer의 용도는 무엇인가요?

  • 데이터를 담는 역할이다.

8. NIO에서 Buffer의 상태를 확인하기 위한 메소드들에는 어떤 것들이 있나요?

  • (p 749)

capacity() : 버퍼에 담을 수 있는 크기 리턴
limit() : 버퍼에서 읽거나 쓸 수 없는 첫 위치 리턴
position() : 현재 버퍼의 위치 리턴

9. NIO에서 Buffer의 position을 변경하기 위한 메소드들에는 어떤 것들이 있나요?

  • (p 751) flip(), mark(), reset(), rewind(), remaining(), hasRemaining(), clear()
profile
B - B = 이은비

0개의 댓글