Java 객체지향 프로그래밍 언어.
객체지향의 특징: 캡슐화, 상속, 다형성
장점
JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적이다.
GabageCollector를 통한 자동적인 메모리 관리가 가능하다.
단점
JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다.
다중 상속이나 타입에 엄격하다. -> 장점일수도
jvm 역할
JVM은 스택 기반으로 동작하며, Java Byte Code를 OS에 맞게 해석 해주는 역할을 하고 가비지컬렉션을 통해 자동적인 메모리 관리를 해준다.
-> 이것이 자바다 찾아보자.
Java 컴파일 과정
Java에서 제공하는 원시 타입들에 무엇이 있고, 각각 몇 바이트를 차지하나요?
정수형 byte, short, int, long 실수형 float, double 문자형 char 논리형 boolean이 있고,
정수형 1, 2, 4, 8, 실수형 4, 8, 문자형 2, 논리형 1 바이트를 차지합니다.
오버라이딩(Overriding)과 오버로딩(Overloading)에 대해 설명해주세요.
오버라이딩(Overriding)은 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것을 말하고,
오버로딩(Overloading)은 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것을 말합니다.
객체지향 프로그래밍(OOP)에 대해 설명해주세요.
모든 데이터를 객체취급하며, 처리요청을 받은 객체는 객체 그 안의 기능을 사용해 요청을 처리합니다.
특징으로는 캡슐화, 상속, 다형성, 추상화 등이 있고, 모듈 재사용으로 확장 및 유지보수가 용이합니다.
try-with-resources에 대해 설명해주세요.
try-with-resources는 try-catch-finally의 문제점을 보완하기 위해 나온 개념입니다.
try( ... ) 안에 자원 객체를 전달하면, try블록이 끝나고 자동으로 자원 해제 해주는 기능을 말합니다.
따로 finally 구문이나 모든 catch 구문에 종료 처리를 하지 않아도 되는 장점이 있습니다.
불변 객체가 무엇인지 설명하고 대표적인 Java의 예시를 설명해주세요.
불변 객체는 객체 생성 이후 내부의 상태가 변하지 않는 객체를 말합니다.
Java에서는 필드가 원시 타입인 경우 final 키워드를 사용해 불변 객체를 만들 수 있고,
참조 타입일 경우엔 추가적인 작업이 필요합니다.
참조타입, 원시타입이 뭔가
💡 참조 타입일 경우 추가적인 작업은 어떤게 있는지 설명해주세요.
참조 타입은 대표적으로 1.객체를 참조할 수도 있고, 2.배열이나 3.List 등을 참조할 수 있습니다.
참조 변수가 일반 객체인 경우 객체를 사용하는 필드의 참조 변수도 불변 객체로 변경해야 합니다.
배열일 경우 배열을 받아 copy해서 저장하고, getter를 clone으로 반환하도록 하면 됩니다.
(배열을 그대로 참조하거나, 반환할 경우 외부에서 내부 값을 변경할 수 있음. 때문에 clone을 반환해 외부에서 값 변경하지 못하게 함)
리스트인 경우에도 배열과 마찬가지로 생성시 새로운 List를 만들어 값을 복사하도록 해야 합니다.
배열과 리스트는 내부를 복사하여 전달하는데, 이를 방어적 복사(defensive-copy)라고 합니다.
불변 객체나 final을 굳이 사용해야 하는 이유가 있을까요?
불변 객체나 final 키워드를 사용해 얻는 이점은 다음과 같습니다.
Thread-Safe하여 병렬 프로그래밍에 유용하며, 동기화를 고려하지 않아도 된다.
(공유 자원이 불변이기 때문에 항상 동일한 값을 반환하기 때문)
실패 원자적인 메소드를 만들 수 있다.
(어떠한 예외가 발생되더라도 메소드 호출 전의 상태를 유지할 수 있어 예외 발생 전과 똑같은 상태로 다음 로직 처리 가능)
부수효과를 피해 오류를 최소화 할 수 있다.
※ 부수효과 : 변수의 값이 바뀌거나 객체의 필드 값을 설정하거나 예외나 오류가 발생하여 실행이 중단되는 현상
메소드 호출 시 파라미터 값이 변하지 않는다는 것을 보장할 수 있다.
가비지 컬렉션 성능을 높일 수 있다.
(가비지 컬렉터가 스캔하는 객체의 수가 줄기 때문에 Gc 수행 시 지연시간도 줄어든다.)
참조타입, 원시타입이 뭔가
다형성, 캡슐화, 상속
생성자 블록
set과 map 의 hashcode 메소드
Vector 와 list의 차이
제네릭
Finalize 메소드
직렬화