1. 오버로딩 vs 오버라이딩
오버로딩 (Overloading)
- 같은 이름의 메소드를 여러 개 정의하는 것
- 매개변수의 타입이 다르거나 개수가 달라야 함
- reuturn type, 접근 제어자는 영향을 주지 않음
오버라이딩 (Overriding)
- 상속에서 나온 개념
- 상위 클래스의 메소드를 하위 클래스에서 재정의
- 메서드 위에 @Override를 관례적으로 적는다
2. Interface(인터페이스) vs Abstract Class(추상 클래스)
Interface
- 쉽게 말하면 껍데기 혹은 설계도라고 표현 가능
- 모든 메소드가 추상 메소드이고, 일반 변수를 가질 수 없음
- 다중 상속이 가능 (2개 이상의 Interface를 implement 할 수 있음)
Abstract Class
- 0개 이상의 추상 메소드(아직 구현되지 않은 메소드)를 가지고, 일반 메소드, 일반 변수 또한 가질 수 있음
의미가 비슷한데 왜 따로 사용하나?
목적이 다름!!
Interface : 함수 구현을 강제
Abstract Class : 추상 클래스를 상속받아 가능 이용 및 확장
BUT Java8 이후 버전의 default Method 사용여부 >> Interface에 메소드 구현 가능 >> 다중 상속시 오류 해결 방법??
3. Mutable, Immutable 변수
Mutable
Immutable
- 생성시점부터 내부 상태가 일정하게 유지 -> 변경되지 않음
- 대표적으로 String이 있음, final 변수도 이에 해당
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에 데이터가 추가가 가능할까요?🤔
답변 : 가능
🤔String은 왜 Immutable인가
문자열 연산이 있을 때는 새로운 메모리에 데이터가 생성됨
concat, substr 등의 연산도 같은 동작원리
String Builder & String Buffer
- String 수정을 mutable하게 할 때 사용
- String Buffer는 멀티스레드 환경에서 synchronized 키워드가 가능하므로 동기화가 가능(thread-safe)
- synchronized : 하나의 자원(데이터)에 대해서 여러 스레드가 사용하려고 할 때 한 시점에서 하나의 스레드만 사용할 수 있도록 하는 것
- 문자열 연산이 많을 때 멀티스레드 환경에서는 StringBuffer 사용
- 싱글 스레드 또는 스레드를 신경쓰지 않아도 되는 환경에서는 StringBuilder 사용
4. 기본자료형, 참조자료형
기본자료형 (Primitive type)
int, chat, long, double
참조자료형 (Reference type)
Class, Interface, Array
🤷♀️ 면접질문 예시!
- Primitive type을 Reference type으로 사용하는 방법
- Integer, Long, Double 등 java library에 선언된 데이터 타입 사용
- 동등 비교를 하기 위한 equals, hashCode함수 재정의
5. 에러 (Error) vs 예외 (Exception)
에러 (Error)
OOM, Stack Overflow 등 개발자가 미리 예측해서 방지 할 수 없음
예외 (Exception)
NullPointerException, IOException 등 개발자가 구현한 로직에서 발생
Checked Exception
반드시 에러 처리를 해야함 (try / catch or throw)
Unchecked Exception
에러 처리를 강제하지 않음
예외처리
try / catch or throw
🤷♀️ 면접질문 예시!
finally를 사용하는 이유?
그냥 try / catch 다음 line에 코딩하면 되는거 아닐까요?
답변 : 필수적으로 실행해야하는 부분을 적어준다.