•
String literal과 new String(””)의 차이를 설명해 주세요.
◦
리터럴은 값 자체를 선언한거고, 상수 풀에 저장되어서, 같은 리터럴일 경우에 같은 주소값을 가져서 재사용이 가능합니다.
◦
new로 선언한 경우는 참조자료형이라 Heap 영역에 저장되고 같은 문자라도 매번 새로운 객체로 생성하게 됩니다.
◦
그래서 == 값으로 비교할 때 리터럴은 true이지만, new 값은 false라 .equals()로 비교해야 정확합니다.
•
String, StringBuilder, StringBuffer의 차이점에 대해서 설명해주세요.
◦
String은 불변 객체이지만, StringBuilder와 Buffer는 문자열 변경이 가능합니다.
◦
성능면에서는 StringBuilder가 가장 빠르고, String은 매번 새 객체를 생성하는거라 가장 느립니다.
◦
String은 문자열 상수에 사용하고, StringBuilder는 단일 스레드에서 문자열을 수정하고 싶을때 사용합니다. 그리고 StringBuffer는 synchronized로 스레드 안전성이 보장되기 때문에 멀티스레드 환경에서 사용합니다.
•
Exception과 Error의 차이는 무엇인가요?
◦
Exception은 프로그램이 예상 가능한 예외 상황이거나 개발자가 커스텀하게 잡아놓은 예외를 말하고, Error는 그냥 JVM 내부적으로 에러가 나서 처리 불가한 상태를 말합니다.
◦
그래서 Exception은 try-catch로 간단히 잡을 수 있지만, 에러는 코드 자체를 다시 짜야합니다.
•
Exception 클래스의 예시를 말해주세요.
◦
NullPointerException
◦
IOException
◦
ArrayIndexOutofBoundException
◦
ClassNotFoundException
◦
NumberFormatException이 제일 많이 발생하는 것 같습니다.
•
Checked Exception과 Unchecked Exception의 차이는 무엇인가요?
◦
Checked는 Exception을 상속받아서 try-catch로 컴파일 시에 강제 처리해야하고
◦
Unchecked는 RuntimeException을 상속받아서 런타임시에 개발자가 커스텀하게 처리할 수 있습니다.
•
throw와 throws의 차이는 무엇인가요?
◦
throw는 메서드 내부에서 예외처리할 때 쓰는거고
◦
throws는 메서드 선언할 때, throws로 미리 예외를 잡아줄 때 씁니다.
•
try~catch~finally 구문에서 finally은 어떠한 역할을 하나요?
◦
예외 발생 여부랑 상관없이 무조건 실행되는 블록입니다. 보통 자원 해제하거나 트랜잭션 종료하면서 같이 로그 띄워줄 때 씁니다.
•
Throwable과 Exception의 차이는 무엇인가요?
◦
Throwable이 모든 Exception들의 최상위 클래스이고, Exception 클래스는 Trowable 하위 클래스입니다.
•
제네릭이란 무엇이고, 왜 사용할까요?
◦
타입 정의하기 애매할때 클래스나 메서드를 바로 정의할 수 있도록 하는 기능입니다. (저는 그런데..)
◦
컴파일 타임에 타입 체크가 가능해져서 타입 안정성이 올라가고,
◦
형변환도 필요 없어서 코드가 간결해집니다.
◦
타입 정의가 자유로워서 하나의 제네릭 클래스나 메서드로 다양한 타입을 처리할 수 있습니다.
•
제네릭을 사용한 경험을 소개해 주세요.
◦
웹소켓으로 실시간 통신 기반 게임을 만들어서 출시해본적이 있는데, 그때 응답별로 messageType이 달라졌고, JSON 형식으로 클라이언트랑 통신할 때, DTO에서 messageType을 제네릭으로 선언하고, 요청 데이터 타입에 따라 동적으로 타입을 선언해서 응답 메시지 DTO 객체를 만들었던 기억이 있습니다.