자바칩

[자바의 신] 15장. String: 문제 풀이 본문

Study/Java

[자바의 신] 15장. String: 문제 풀이

아기제이 2024. 5. 8. 22:41
728x90

1. String 클래스는 final 클래스인가요? 만약 그렇다면, 그 이유는 무엇인가요?

클래스를 final로 선언하면 더이상 해당 클래스를 확장할 수 없다. 즉, 해당 클래스를 상속받을 수 없다는 뜻이다.
String 클래스는 매우 중요한 클래스이기 때문에, 만약 String 클래스를 상속하게 된다면 String 클래스에 선언된 메소드를 자식 클래스가 상속해서 메소드를 Overring하여 내용을 바꾸게 되면 문제가 생길 수도 있기 때문이다.

 

 

2. String 클래스가 구현한 인터페이스에는 어떤 것들이 있나요?

Serializable, Comparable<String>, CharSequence

 

 

3. String 클래스의 생성자 중에서 가장 의미없는 (사용할 필요가 없는) 생성자는 무엇인가요?

String()

 

 

4. String 문자열을 byte 배열로 만드는 메소드의 이름은 무엇인가요?

public char[] toCharArray();

 

 

5. String 문자열의 메소드를 호출하기 전에 반드시 점검해야 하는 사항은 무엇인가요?

String 객체가 null인지 체크해주어야 한다.
만약 String 객체가 null인데 메소드를 호출하려고 한다면, NullPointerException이 발생하기 때문이다.

 

 

6. String 문자열의 길이를 알아내는 메소드는 무엇인가요?

public int length();

 

 

7. String 클래스의 equals() 메소드와 compareTo() 메소드의 공통점과 차이점은 무엇인가요?

공통점 매개변수로 받은 String 객체와 비교 대상 객체가 같은지 다른지 구분하는 메소드이다.
차이점  equals() 메소드는 리턴 타입이 boolean이고, compareTo() 메소드는 리턴 타입이 int이다. 
compareTo() 메소드는 비교 대상 객체가 매개변수로 받은 객체와 같다면 0을 리턴하고, 비교 대상 객체가 매개변수로 받은 객체보다 순서가 앞에 있다면 음수를 리턴하고, 순서가 뒤에 있다면 양수를 리턴한다.

 

 

8. 문자열이 "서울시"로 시작하는지를 확인하려면 String의 어떤 메소드를 사용해야 하나요?

public String startsWith(String findStr);

*사용 방법
문자열.startsWith("서울시");

 

 

9. 문자열에 "한국"이라는 단어의 위치를 찾아내려고 할 때에는 String의 어떤 메소드를 사용해야 하나요?

public String indexOf(String findStr);

*사용 방법
문자열.indexOf("한국");

 

 

10. 9번 문제의 답에서 "한국"이 문자열에 없을 때 결과 값은 무엇인가요?

-1

 

 

11. 문자열의 1번째부터 10번째 위치까지의 내용을 String으로 추출하려고 합니다. 어떤 메소드를 사용해야 하나요?

public String substring(int beginIndex, int endIndex);

*사용 방법
문자열.substring(1, 11);

substring은 문자열을 beginIndex부터 endIndex 바로 앞까지만 잘라주므로, 10번째 위치까지 자르려면 10 + 1을 해야 한다.

 

 

12. 문자열의 모든 공백을 * 표시로 변환하려고 합니다. 어떤 메소드를 사용하는 것이 좋을까요?

public String replaceAll(String regex, String replacement);

*사용 방법
문자열.replaceAll(" ", "*");

regex 정규 표현식에 해당하는 문자열은 모두 replacement 정규 표현식으로 바꾼다.

 

 

13. String의 단점을 보완하기 위한 두 개의 클래스는 무엇인가요?

StringBuffer, StringBuilder

String은 immutable(불변한)하기 때문에, String에 더하기 연산을 수행할 경우에는 원래 갖고 있던 String 객체는 버려지고 새로운 String 객체를 리턴한다. 이 버려진 객체는 GC(가비지 컬렉션)이 처리한다. for문 내에서 String 더하기 연산을 처리하게 될 경우 버려지는 객체가 더욱 많아져서 성능이 저하된다.
이런 단점을 보완하는 클래스들에는 StringBuffer, StringBuilder가 있다. StringBuffer는 Thread Safe하고, StringBuilder는 Thread safe하지 않다. 하지만 속도는 StringBuilder가 더 빠르다.

 

 

14. 13번의 답에서 문자열을 더하기 위한 메소드의 이름은 무엇인가요?

append()