2장. 가장 많이 쓰는 패키지는 자바랭
- 같은 패키지에 있는 클래스를 제외하고, 별도로 import 하지 않아도 되는 패키지는 무엇인가요?
- java.lang 패키지는 별도로 import 하지 않아도 됩니다.
- 자바의 메모리가 부족해서 발생하는 에러는 무엇인가요?
- 자바의 메모리가 부족하여 발생하는 에러는 OutOfMemoryError입니다.
- 메서드 호출관계가 너무 많아서 발생하는 에러는 무엇인가요?
- StackOverflowError
- 자기 자신의 메서드를 다시 부르는 재귀호출 메서드와 같은 것을 잘못 구현했을 때 발생합니다.
- java.lang 패키지에 선언되어 있는 3개의 어노테이션에는 어떤 것들이 있고, 각각의 역할은?
- Deprecated : 컴파일러에게 더 이상 사용하지 않는 메서드임을 알립니다.
- Override : 해당 메서드가 Override 되었다는 것을 명시해 줍니다.
- SuppressWaring : 컴파일러에게 경고를 무시하라고 알립니다.
- Double과 Integer 같은 숫자 타입에서 처리할 수 있는 최대, 최솟값을 알 수 있는 상수의 이름은?
- 기본 자료형을 참조자료형으로 만든 클래스들의 MIN_VALUE(최솟값)와 MAX_VALUE(최댓값)를 사용하면, 각 타입의 최대, 최솟값을 확인할 수 있습니다.
- Integer값을 2진법으로 표현하려면 어떤 메서드를 사용해야 하나요?
- Integer 클래스에서 toBinaryString() 메서드를 호출하면 매개변수의 값을 이진법으로 나타냅니다.
- Integer값을 16진법으로 표현하려면 어떤 메서드를 사용해야 하나요?
- Integer 클래스에서 toHexString() 메서드를 호출하면 매개변수의 값을 16진법으로 나타냅니다.
- 속성(Properties)과 환경(Environment) 값의 차이는 무엇인가요?
- Properties는 JVM에서 사용하는 속성 값을 제공하며, Enviromemt는 시스템(장비)에서 사용하는 환경값을 제공합니다.
- System.out과 System.err 에서 사용할 수 있는 메서드들은 어떤 클래스의 API를 봐야 하나요?
- System.out과 System.err 는 모두 java.io.PrintStream 클래스를 의미합니다.
- System 클래스에서 현재 시간을 조회하는 용도로 사용하는 메서드 이름은 무엇인가요?
- System.currentTimeMillis() 메서드를 호출하면 현재 시간을 밀리초(1/1000) 단위로 제공합니다.
- 시간은 1970년 1월 1일 00:00부터 현재까지의 시간이다.
- System 클래스에서 시간 측정 용도로 사용하는 메서드 이름은 무엇인가요?
- System.nanoTime() 메서드는 나노초 단위로 결과를 제공하며, 이 메서드에서 제공하는 시간은 오직 소요 시간을 측정하기 위해서 사용됩니다,
- System.out.print() 메서드와 System.out.println() 메서드의 차이는 무엇인가요? 줄 바꿈 지원 유무
- System.out.println() 메서드에 객체가 매개변수로 넘어왔을 때 String의 어떤 메서드가 호출되어 결과를 출력하나요? 그리고, 그 메서드를 사용하는 이유는 무엇인가요?
- System.out.pritnln() 메서드에서 출력을 할 때에는 String 클래스에 선언된 valueOf()가 수행된다. toString 이 수행되는 것이 아닙니다.
- 숫자 계산을 위해서 필요한 메서드들을 모아 놓은 클래스는 무엇인가요?
- 숫자 계산을 위해서 Math라는 클래스가 존재합니다.
- 위의 문제의 답인 클래스에 있는 메서드는 객체를 생성해서 사용해야 하나요?
- Math 클래스에 있는 상수와 메소드 모두 static으로 선언되어 있기 때문에 별도의 객체를 선언할 필요가 없습니다,
- 숫자의 절댓값을 구하는 메서드는 무엇인가요?
- 숫자의 절댓값은 Math 클래스의 abs() 메서드를 사용하면 됩니다.
- 숫자의 반올림을 하는 메서드는 무엇인가요?
- 반올림을 하는 Math 클래스의 메서드는 round()와 rint()이다.
- 각도를 라디안으로 변환하는 메서드와 라디안을 각도로 변환하는 메서드는 각각 무엇인가요?
- Math클래스에서 Radian으로 변환하는 메서드는 toRadians() 메서드이며, Degree로 변환하는 메서드는 toDegrees() 메서드입니다,
- 5의 4 제곱 값을 구하려고 하면 어떤 메서드를 사용해야 하나요?
- Math 클래스의 pow() 메서드는 제곱값을 구하는 데 사용한다. 5의 4 제곱은 Math.pow(5,4)과 같이 사용하면 됩니다.
3장. 실수를 방지하기 위한 제네릭이라는 것도 있어요
- 제네릭이 자바에 추가된 이유는 무엇인가요
- 타입 형 변환에서 발생할 수 있는 문제점을 사전에 없애기 위해서 만들어졌다.
- 제네릭 타입의 이름은 T나 E처럼 하나의 캐릭터로만 선언되어야 하나요?
- 제네락의 선언 시 타입 이름은 예약어만 아니면 어떤 단어도 사용할 수 있다. 단 일반적으로 대문자로 시작한다.
- 메서드에서 제네릭 타입을 명시적으로 지정하기 애매할 경우에는 < > 안에 어떤 기호를 넣어 주어야 하나요?
- ? 를 제네릭 선언 꺽쇠 사이에 넣으면 Wildcard로 어떤 타입도 올 수 있다.
- 메서드에서 제네릭 타입을 명시적으로 지정하기에는 애매하지만, 어떤 클래스의 상속을 받은 특정 타입만 가능하다는 것은 나타내려면 < > 안에 어떤 기호를 넣어 주어야 하나요?
- 특정 타입으로 제네릭을 제한하고 싶은 때는 "? extends 타입"을 제네릭 선언 안에 않으면 된다,
- 제네릭 선언 시 wildcard라는 것을 선언했을 때 어떤 제약사항이 있나요?
- Whildcard 타입을 Object 타입으로만 사용해야 한다.
- 메서드를 제네릭하게 선언하려면 리턴타입 앞에 어떤 것을 추가해 주면 되나요?
- 꺽쇠 안에 원하는 제네릭 타입을 명시함으로써 제네릭 한 메서드를 선언할 수 있다.
4장. 자바랭 다음으로 많이 쓰는 애들은 컬렉션 - Part1(List)
- Collection 인터페이스를 구현하는 대표적인 3개의 자료구조에는 어떤 것들이 있나요?
- Collection 인터페이스르 구현하는 대표적인 타입은 List , Set, Queue이다.
- 배열과 같이 순서가 있는 목록형을 나타내는 대표 인터페이스는 무엇인가요?
- 배열과 같은 형태는 List 인터페이스에 선언되어 있다.
- ArrayList라는 클래스의 생성자 중 매개변수가 없는 기본 생성자를 사용하면 기본적으로 몇 개의 저장공간을 가지나요?
- 별도로 정하지 않을 경우 자바에서 제공하는 List를 구현한 클래스의 데이터 개수는 10개다.
- 만약 ArrayList 클래스의 저장 공간 개수를 처음부터 지정하려면 어떤 생성자를 사용하면 되나요?
- new ArrayList(int initialCapacity)를 사용하면 초기 데이터 개수를 생성과 동시에 지정할 수 있다.
- ArrayList 객체를 생성할 때 제네릭을 사용하는 이유는 무엇인가요?
- 제네릭을 사용하면 컴파일 시점에 타임을 잘못 지정한 부분을 걸러낼 수 있기 때문이다.
- ArrayList에 데이터를 담는 메서드 두 가지의 이름은 무엇인가요?
- add(), addAll() 메서드를 사용하면 ArrayList에 데이터를 담을 수 있다.
- Collection 인터페이스를 구현한 클래스의 객체에서 사용할 수 있는 for 루프의 구조는 어떻게 되나요? 코드를 작성하세요.
- 만약 String 타입을 담는 list라는 ArrayList 가 만들었다면 for(String data:list){}와 같이 사용하면 된다.
- Collection 인터페이스를 구현한 클래스의 객체에 저장된 데이터의 개수를 확인하는 메서드 이름은 무엇인가요?
- size() 메서드를 사용하면 Collection을 구현한 클래스들에 들어있는 데이터 개수를 확인할 수 있다.
- ArrayList에서 특정 위치에 있는 데이터를 확인하는 메서드는 무엇인가요?
- get() 메서드를 사용하면 매개변수로 넘긴 index 번호에 있는 값을 리턴한다.
- ArrayList에서 특정 위치에 있는 데이터를 삭제하는 메서드는 무엇인가요?
- remove() 메서드를 사용하면 매개변수로 넘긴 index 번호에 있는 값을 삭제한다.
- 만약 매개변수로 객체를 넘기면, 동일한 첫 번째 객체를 찾아 삭제한다.
- ArrayList에서 특정 위치에 있는 데이터를 수정하는 메서드는 무엇인가요?
- set() 메서드를 사용하면 첫 번째 매개변수로 넘긴 위치에 있는 값은 두 번째 매개변수로 넘긴 값으로 대체한다.
- java.util 패키지에 있는 Stack이라는 클래스는 어떤 클래스를 확장한 것인가요?
- Stack 클래스는 List 인터페이스를 구현하였다.
- Stack 클래스에서 데이터를 담는 메서드는 무엇인가요?
- Stack 클래스에 데이터를 담을 때에는 push() 메서드를 사용한다.
- Stack 클래스에서 가장 위에 있는 데이터를 확인만 하는 메서드는 무엇인가요?
- Stack 클래스의 peek() 메서드는 가장 위에 있는 값을 리턴만 한다.
- Stack 클래스에서 가장 위에 있는 데이터를 삭제하고 리턴하는 메서드는 무엇인가요?
- Stack 클래스의 pop() 메서드는 가장 위에 있는 데이터를 지우고 리턴한다.
6장. 자바랭 다음으로 많이 쓰는 애들은 컬렉션 - Part3(Map)
- Map 형태의 자료구조는 무엇과 무엇으로 구성되어 있나요?
- Map은 키(Key)와 값(Value)으로 구성된다.
- Map에서 데이터를 저장하는 메서드는 무엇인가요
- Map에서 데이터를 저장하는 메서드는 put()이다. 이 메서드의 첫 매개변수는 키이고, 두 번째 매개변수는 값이다.
- Map에서 특정 키에 할당된 값을 가져오는 메서드는 무엇인가요?
- 특정 키에 할당된 값을 가져오는 메서드는 get()이다. 이 메서드의 매개변수로 찾고자 하는 키를 지정해 주면 된다.
- Map에서 특정 키와 관련된 키와 데이터를 지우는 메서드는 무엇인가요?
- 데이터를 지우는 메서드는 remove()이며, 매개변수에는 지우고자 하는 키를 지정해 주면 된다.
- Map에서 키의 목록을 가져오는 메서드는 무엇인가요?
- keySet() 메서드를 호출하면 키의 목록을 Set 구조로 리턴한다.
- Map에 저장되어 있는 데이터의 크기를 가져오는 메서드는 무엇인가요?
- size() 메서드는 저장되어 있는 데이터의 개수를 리턴한다.
- HashMap과 Hashtable 중에서 키나 값에 null을 저장할 수 있는 것은 무엇인가요?
- Hashtable 은 null을 저장할 수 없다.
- HashMap과 Hashtable 중에서 여러 스레드에서 동시에 접근해도 문제가 없는 것은 무엇인가요?
- Hashtable 은 Thread에 안전하게 만들어져 있다.
- HashMap에서 특정 키가 존재하는지 확인하는 메서드는 무엇인가요?
- containsKey() 메서드를 사용하면 해당 키를 갖는 값이 존재하는지 확인할 수 있다.
- 이 장에서 살펴본 클래스 중, 키가 저장되면서 정렬되는 Map에는 어떤 것이 있나요?
- TreeMap을 사용하면 키를 정렬하면서 데이터를 저장한다. 순서는 숫자, 대문자, 소문자, 한글 순이다.
- Properties 클래스는 어떤 클래스를 확장한 것인가요?
- Properites 클래스는 Hashtable을 확장한 클래스이다.
- Properties 클래스의 객체에 있는 데이터를 파일로 저장할 때에는 어떤 메서드들을 사용하면 되나요?
- Properties 클래스의 store() 메서드를 사용하면 데이터를 파일로 저장한다.
7장. 스레드는 개발자라면 알아두는 것이 좋아요
- 스레드와 프로세스의 차이를 이야기해 보세요.
- 프로세스는 실행 중인 프로그램을 말하며 적어도 하나의 스레드를 갖는다. 독립적이기 때문에 다른 프로세스와 메모리 영역을 공유하지 않는다.
- 스레드는 프로세스 내에 존재하여 프로세스가 할당받은 자원 내에서 실행된다.
- stack 영역만 할당받고 나머지 메모리 영역은 공유되어 다른 스레드의 실행 결과를 바로 알 수 있다.
- 스레드 클래스를 만들기 위해서는 어떤 인터페이스를 구현하면 될까요?
- 스레드를 구현하기 위해서 java.lang.Runnable 인터페이스를 구현하면 된다.
- 위의 문제에서 이야기한 인터페이스에 선언되어 있는 유일한 메서드는 무엇인가요?
- Runnable 인터페이스에는 public void run() 메서드만이 선언되어 있다.
- 스레드 클래스를 만들기 위해서 어떤 클래스를 확장하면 되나요?
- 만약 별도로 확장하는 클래스가 없어 확장이 가능하다면, java.lang.Thread 클래스를 확장하여 사용해도 된다.
- 스레드가 시작되는 메서드의 이름은 무엇인가요?
- 스레드가 시작되는 메서드는 run() 메서드이다.
- 스레드를 시작하는 메서드의 이름은 무엇인가요?
- 스레드를 시작하려면 run() 메서드가 아닌 start() 메서드를 호출해야만 한다.
- 스레드에 선언되어 있는 sleep() 메서드의 역할은 무엇인가요?
- Thread의 sleep 메서드는 매개변수로 넘겨준 시간만큼 해당 스레드를 멈춘다.
- sleep() 메서드를 사용할 때 try-catch로 감싸 주어야 하는 이유는 무엇인가요?
- sleep() 메서드로 대기하고 있는 중에 interrupt 가 될 수 있으므로, IntteruptedException 이 발생할 수 있다.
- 따라서 try-catch로 감싸주어야 한다.
- 데몬(Daemon) 스레드와 일반 스레드의 차이는 무엇인가요?
- 데몬 스레드는 만약 프로세스가 종료되는 상황이 되었을 때 해당 스레드가 종료되지 않아도 다른 실행 중인 일반 스레드가 없다면, 해당 프로세스는 중지된다.
- synchronized 구문은 왜 써 주며, 어디에 사용해야 하나요?
- synchronized 구문은 동시에 여러 스레드에서 하나의 값에 접근하려고 할 때 데이터의 정합성을 지키기 위해 사용한다.
- 그러므로, 여러 스레드에서 동시에 접근할 일이 있을 경우에만 써야 한다. 그렇지 않으면 성능상 큰 문제가 발생할 수 있다.
- synchronized를 사용하는 두 가지 방법은 어떤 것인가요?
- synchronized는 메서드 자체를 synchronized로 선언하는 방법과 메서드 내에 필요한 부분만 synchronized로 선언하는 두 가지 방법이 있다.
- 스레드의 상태에는 어떤 것들이 있나요?
- 스레드의 상태는 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED로 나뉜다.
- 스레드에 선언되어 있는 join() 메서드의 용도는 무엇인가요?
- join() 메서드는 해당 스레드가 종료될 때까지 대기한다.
- 스레드에 선언되어 있는 interrupt() 메서드의 용도는 무엇인가요?
- intterupt() 메서드는 해당 스레드를 종료시킨다.
- interrupt() 메서드를 호출하면 해당 스레드는 어떤 상태에 있을 때 interrupt() 메서드가 호출된 효과가 발생되나요?
- sleep(), join(), wait() 메서드가 호출되어 대기 중인 상태에만 interrupt() 메서드가 처리된다.
- Object 클래스에 선언된 wait() 메서드의 용도는 무엇인가요?
- wait() 메서드는 다른 스레드가 Object 객체에 대한 notify() 메서드나 notifyAll() 메서드를 호출할 때까지 현재 스레드가 대기하고 있도록 한다. 만약 매개변수로 시간을 지정하면 wait() 메서드는 동일하지만, 해당 시간까지만 대기한다.
- Object 클래스에 선언된 notify() 메서드의 용도는 무엇인가요?
- notify() 메서드는 wait() 메서드로 대기 중인 스레드가 계속해서 작업을 하도록 깨우는 작업을 한다.
- ThreadGroup 클래스에 선언된 enumerate() 메서드의 용도는 무엇인가요?
- enumerate() 메서드는 해당 스레드그룹에 포함된 스레드나 스레드 그룹의 목록을 매개변수로 넘어온 배열에 담는다.
8장. 파일에 있는 것을 읽고 쓰려면 아이오를 알아야죠
- I/O는 각각 무엇의 약자인가요?
- I/O는 Input과 Output을 의미한다.
- java.io.File 클래스는 파일만 지정할 수 있나요?
- java.io 패키지의 File 클래스는 파일과 경로를 나타낼 수 있다
- OS 마다 다른 경로 구분자를 처리하기 위해서는 File 클래스의 어떤 상수를 사용해야 하나요?
- File 클래스에 선언되어 있는 separator 상수는 현재 JVM 이 사용 중인 OS의 경로 구분자를 의미한다.
- File 클래스에서 디렉터리를 만드는 mkdir()과 mkdirs() 메서드의 차이는 무엇인가요?
- mkdir() 메서드는 현재 존재하는 경로의 하위 폴더만 생성가능하며 mkdirs 은 지정된 경로에 존재하지 않는 모든 폴더들을 생성한다.
- File 클래스의 list() 메서드와 listFiles() 메서드의 차이는 무엇인가요?
- 두 메서드 모두 현재 디렉터리에 있는 하위 목록을 나타내는데, list() 메서드는 String [] 타입으로, listFiles() 메서드는 File [] 타입으로 리턴한다.
- FileFilter와 FilenameFilter의 차이는 무엇인가요?
- 두 필터 인터페이스는 모두 넘어온 File과 관련된 정보를 이용하여 파일을 필터링할 목적으로 사용된다.
- FileFilter 인터페이스는 accept(File pathName)으로 선언되어 있는 메서드가 있고, FilenameFilter 인터페이스는 accept(File dir, String name)으로 선언되어 있는 메서드가 있다는 점이 다르다.
- 따라서 FilenameFilter는 가장 하위에 있는 대상의 이름만 넘어오기 때문에 가장 하위에 있는 것이 파일인지 경로인지 구분할 수 없다.
- InputStream이라는 abstract 클래스는 어떤 작업을 하기 위해서 만들어진 것인가요?
- InputStream 클래스는 입력된 byte 데이터를 다루기 위해서 만들어졌다.
- OutputStream이라는 abstract 클래스는 어떤 작업을 하기 위해서 만들어진 것인가요?
- OutputStream 클래스는 byte 테이터를 출력하기 위해 만들어졌다.
- Reader라는 abstract 클래스는 어떤 작업을 하기 위해서 만들어진 것인가요?
- Reader 클래스는 입력된 char 문자열(텍스트 데이터)을 다루기 위해 만들어졌다.
- Writer라는 abstract 클래스는 어떤 작업을 하기 위해서 만들어진 것인가요?
- Writer 클래스는 char 문자열을 출력하기 위해 만들어졌다.
- BufferedReader나 BufferedWriter를 사용하는 이유는 무엇인가요?
- java.io 패키지의 Buffered 가 붙은 클래스들은 버퍼라는 공간에 저장할 효율적인 데이터를 보관해 두었다가, 버퍼가 다 차게 되면 데이터를 저장하도록 도와준다. 따라서 효율적인 저장이 가능하다.
- 파일을 읽고, 문자열을 처리하기 위해서 필요한 Scanner 클래스가 속해있는 패키지는 무엇인가요?
- Scanner 클래스는 java.util 패키지에 선언되어 있다.
9장. Serializable과 NIO 도 살펴봅시다
- java.io.Serializable을 import 하는 이유는 무엇인가요?
- java.io 패키지에 Serializable 인터페이스는 선언되어 있는 메서드가 없다.
- 클래스를 파일에 읽거나 쓸 수 있도록 하거나, 다른 서버로 보내거나 받을 수 있도록 하려면 반드시 이 인터페이스를 구현(implements)해야만 한다.
- java.io.Serializable의 serialVersionUID를 지정하는 이유는 무엇인가요?
- serialVersionUID라는
- 저장되거나 전송되는 클래스의 버전을 관리해 주기 때문에 이 값이 다르면 다른 클래스로 인식된다.
- 따라서 클래스가 변경되었을 경우에는 이 값을 변경해 주는 것이 좋다.
- 자바에서 객체를 파일로 읽거나 쓸 때 사용하는 Stream 클래스 이름은 무엇인가요?
- 객체를 저장할 때에는 FileOutputStream 클래스를, 읽을 때에는 FileInputStream 클래스를 사용한다.
- transient 예약어의 용도는 무엇인가요?
- transient로 선언된 변수는 Serializable 한 클래스를 저장하거나 전송할 때 대상에서 제외된다.
- NIO가 생긴 이유는 무엇인가요?
- NIO는 java.io 패키지에서 제공하는 클래스들의 속모 및 성능이 느린 것을 보완하기 위해서 만들어졌다.
- NIO에서 Channel의 용도는 무엇인가요?
- NIO의 Channel 은 데이터를 처리하기 위한 통로로 볼 수 있다.
- NIO에서 Buffer의 용도는 무엇인가요?
- NIO Buffer는 데이터를 담기 위한 객체로 볼 수 있다.
- NIO에서 Buffer의 상태를 확인하기 위한 메서드들에는 어떤 것들이 있나요?
- Buffer에서 상태를 확인하기 위한 메서드는 capacity, limit, position 이 있다.
- NIO에서 Buffer의 position을 변경하기 위한 메서드들에는 어떤 것들이 있나요?
- Buffer에서 위치를 변경하는 메서드는 flip(), mark(), reset(), rewind(), remaining(), hasRemaining(), clear()가 있다.
10장. 다른 서버로 데이터를 보내려면 어떻게 하면 되나요?
- TCP 통신과 UDP 통신의 차이는 무엇인가요?
- TCP 연결형 서비스로 3-way handshaking 과정을 통해 연결을 설정하기 때문에 높은 신뢰성을 보장하지만 비교적 속도가 느리다는 단점이 있다.
- UDP 은 비연결형 서비스로 3-way handshaking을
- 네트워크 통신 시 포트 번호를 지정하는 이유는 무엇인가요?
- 통신시 port 가 지정된 않는 것은 주소를 알려줄 때 아파트 이름이나 동네 이름만 알려주는 것과 같다.
- Port는 이와 같이 서버 내에서 여러 가지 프로그램에서 서로 다른 데 아토룰 처리해 주기 위해 사용한다.
- ServerSocket 클래스의 용도는 무엇인가요?
- ServerSocket 클래스는 TCP로 데이터를 통신하기 위해서 사용된다.
- ServerSocket 클래스의 accept() 메서드의 용도는 무엇인가요?
- ServerSocket 클래스의 accept() 메소드는 데이터를 받아 전달해 줄 Socket 객체를 생성하기 위해서 사용된다.
- 만약 다른 프로그램에서 아무런 데이터가 전송되지 않았을 때에는 accept() 메서드에서 지속적으로 대기한다.
- Socket 클래스의 용도는 무엇인가요?
- Socket 클래스는 TCP로 NIO의 Buffer 클래스와 같이 받은 데이터를 처리하거나, 데이터를 전송할 때 사용한다.
- DatagramSocket 클래스의 용도는 무엇인가요?
- DatagramSocket 클래스는 UDP 데이터를 통신하기 위해서 사용된다.
- DatagramPacket 클래스의 용도는 무엇인가요?
- DatagramPacket은 UDP로 데이터를 받거나 보낼 때 사용한다.
'JAVA' 카테고리의 다른 글
[JAVA] String + 연산과 비효율성 StringBuilder의 해결 원리 (0) | 2024.11.10 |
---|---|
[JAVA] 제네릭 (Generic) (0) | 2024.11.08 |
[JAVA] Grabage Collection Basics (0) | 2024.11.05 |
[JAVA] Error 와 Exception (0) | 2024.11.01 |
[JAVA] staic 과 final (1) | 2024.10.29 |