기술면접 질문 답안 모음2
8. javac와 JIT 컴파일러의 차이를 설명해 주세요.
이 둘은 모두 컴파일러지만 작동되는 시간과 하는 일에 차이가 있습니다. 자바 컴파일러의 경우, 자바 소스를 바이트 코드로 읽어내 클래스 파일에 저장합니다. 이후 JVM은 자바 인터프리터와 JIT 컴파일러를 이용해 바이트 코드를 기계 코드로 읽어내 실행시키는데, 이때 JIT 컴파일러는 자주 쓰이는 부분을 미리 번역하여 성능 향상을 높입니다. 클래스 파일을 한 줄씩 실행시키는 작업은 자바 인터프리터가 합니다.
9. 오버라이딩과 오버로딩을, 동적바인딩과 정적바인딩과 관련지어 설명해 주세요.
오버라이딩은 프로그램 실행 도중에, 오버로딩은 컴파일 타임 때 어떤 메서드를 호출할 지 결정한다는 점에서 각각 동적 바인딩과 정적 바인딩과 관련이 있습니다. 예를 들어, Animal 클래스의 speak() 메서드가 있고, 이 클래스를 상속받은 Dog 클래스에서 speak()를 오버라이딩 했을 때, .speak()는 Animal 클래스와 Dog 클래스 모두에서 쓰일 수 있습니다. 따라서 .speak를 호출할 객체의 타입이 런타임 때 동적으로 결정되기 때문에 동적 바인딩이 일어납니다. 오버로딩의 경우 add(int)가 있고 add(doubld)이 있다면 컴파일 타임 때 미리 어떤 인자가 들어가는 지 확인하고 어떤 메서드를 호출할 지 결정하기 때문에 정적 바인딩이 일어납니다.
10. RDBMS와 NoSQL의 차이를 설명해 주세요.
RDBMS는 관계형 데이터 베이스로, 테이블로 이루어져 있으며 미리 정의한 스키마에 따라 데이터를 저장합니다. SQL를 지원하여 DB 조작을 쉽게 하며 트랜잭션의 ACID를 준수하여 데이터 무결성을 보장합니다. 테이블들이 관계를 맺고 있는 것을 나타내기 위해 fk를 사용하며 fk를 이용한 테이블 join이 가능합니다.
NoSQL은 scale-out, 여러 서버에 데이터를 나누어 저장하여 확장시키는 것이 용이한 DB입니다. 스키마가 유연하거나 없어서 다양한 데이터 형태를 저장할 수 있으며 데이터의 정합성을 약간 떨어트리더라도 대규모 분산 시스템을 구축해야 하는 경우에 선택합니다.
11. Spring data JPA와 Java Persistence JPA의 차이를 아시나요?
Java Persistence JPA는 ORM을 위한 자바의 표준이며, Spring Data JPA는 이 표준을 사용하여 데이터 접근 코드를 간결하게 만들어 주는 Spring의 모듈입니다.
12. 클래스와 인스턴스는 각각 무엇인가요?
클래스는 객체를 이렇게 만들겠다, 는 설계도입니다. 객체의 속성과 행위가 정의되어 있습니다. 인스턴스는 그 클래스의 설계에 따라 만들어진 객체입니다.
13. Garbage Collector의 역할과 원리, 알고리즘에 대해 설명해 주세요.
GC는 사용되지 않는 메모리를 찾아내서 자동으로 해제합니다. 이를 통해 메모리 누수를 방지하고 개발자가 메모리 관리에 신경쓰지 않아도 되게끔 도와줍니다. GC는 크게 두 단계로 작동하는데, '가비지 찾기'와 '메모리 해제'입니다. 이 과정에서 GC는 mark&sweap, stop© 알고리즘을 주로 사용합니다. mark&sweap은 참조되고 있는 객체를 mark하고 마킹되어 있지 않은 객체는 sweap합니다. stop©는 메모리를 두 곳으로 구분하여 참조되고 있는 객체를 한쪽에 복붙하여 옮기고 나머지는 전부 메모리를 해제합니다. 또한 객체를 Generation으로 나누어 관리하는데, 객체는 생성되고 얼마 안 가 소멸되는 경우가 많으므로 Young generation을 집중 관리합니다. 이를 통해 메모리 관리의 효율을 높입니다.