의미가 비슷한데 왜 따로 사용하나?
목적이 다름!!
Interface : 함수 구현을 강제
Abstract Class : 추상 클래스를 상속받아 가능 이용 및 확장
BUT Java8 이후 버전의 default Method 사용여부 >> Interface에 메소드 구현 가능 >> 다중 상속시 오류 해결 방법??
final String str = "hi";
str = "hello"; //error!
🤷♀️ 면접질문 예시!
Q1. Java의 대표적 Immutable 변수 예시 / 답변 : String
Q2. String값을 변경도 하고 연산도 하는데요?🤔
예시 :
String str1 = "Hello";
String str2 = "world!";
String str1 = str1 + str2;
Q3. Final ArrayList < String > list = new ArrayList< String > () 이 list에 데이터가 추가가 가능할까요?🤔
답변 : 가능
문자열 연산이 있을 때는 새로운 메모리에 데이터가 생성됨
concat, substr 등의 연산도 같은 동작원리
int, chat, long, double
Class, Interface, Array
🤷♀️ 면접질문 예시!
- Primitive type을 Reference type으로 사용하는 방법
- Integer, Long, Double 등 java library에 선언된 데이터 타입 사용
- 동등 비교를 하기 위한 equals, hashCode함수 재정의
OOM, Stack Overflow 등 개발자가 미리 예측해서 방지 할 수 없음
NullPointerException, IOException 등 개발자가 구현한 로직에서 발생
반드시 에러 처리를 해야함 (try / catch or throw)
에러 처리를 강제하지 않음
try / catch or throw
🤷♀️ 면접질문 예시!
finally를 사용하는 이유?
그냥 try / catch 다음 line에 코딩하면 되는거 아닐까요?
답변 : 필수적으로 실행해야하는 부분을 적어준다.