☆IT 개발 프로그램☆/JAVA

[개발자 면접 질문] JAVA 기초 질문 모음 Q11~20 (2편)

호기심을 품고사는 중 2020. 6. 4. 14:56

개요

개발 면접에서 단골로 나오는 자바 <기초> 질문 2편입니다.

1편은 이전 포스팅을 확인하세요.

 

2019/06/19 - [[IT] 공부하는 개발자/JAVA] - [개발자 면접 질문] JAVA 기초 질문 모음 10개hobby-collect.tistory.com/123?category=909335

 

[개발자 면접 질문] JAVA 기초 질문 모음 10개

개요 개발 면접에서 단골로 나오는 자바 <기초> 질문들 10가지를 뽑아 정리했습니다. 질문 원본은 링크를 참조하세요. 답변은 실제 면접처럼 서술형으로 작성하였습니다. Q1. 자바의 특징 Q2. 객�

hobby-collect.tistory.com

 

목차

 

Q11. 배열과 리스트 (Array and List)

Q12. 스트링, 스트링버퍼, 스트링 빌더 (String, StringBuffer and StringBuilder)

Q13. 기본 접근제어자(Default)와 프로텍스(Protect) 접근 제어자

Q14. 해쉬맵과 해쉬테이블

Q15. 해쉬셋과 트리셋

Q16. 자바 컬렉션

Q17. 예외 (Exception)

Q18. 예외의 종류

Q19. 예외 처리 방법

Q20. 파이널 키워드 (Final)

 

 

 

 

 

 

 

Q11. Array와 List의 차이 

Array List
선언시 배열 크기 지정이 필요하다.
예) String list = new String[7]
사이즈 지정을 하지 않아도 동적으로 변화한다.
객체를 넣을 때 인덱스 번호를 정의해야 한다. 그냥 넣어도 된다.
예) list.add('book')
다차원 저장이 가능하다 (Multidimensional) 다차원 저장이 불가능하다
선언시 메모리가 할당된다  
기본 데이터 타입(Primitive Type), 오브젝트 할당 가능하다

오브젝트만 할당 가능하다
(* 기본 데이터 타입도 할당 가능한 것처럼 보이지만 실제로는 JVM에 의해 오브젝트와 되어 할당되는 것이다. 따라서 기본 데이터 타입만 들어가는 자료구조가 요구될 때에는 Array가 Arraylist보다 더 효율적이다.)

접근이 빠르다 (인덱스 번호를 이용해 Random access를 하기 때문) 추가, 삭제가 빠르다 (포인터로 Sequential access를 하기 때문)

 

 

 

 

 

 

Q12. 스트링(String), 스트링버퍼(StringBuffer), 스트링빌더(StringBuilder)의 차이

  1. 스트링은 값을 변화시킬 때, Heap에 새로운 메모리를 사용하고, 참조되는 메모리 주소만 바꿔주는 것이다
  2. 반면 스트링버퍼와 스트링빌더는 Stack에 값을 저장하므로 값이 변화할 때 값을 바꿔 쓴다.

    2.1 스트링 버퍼는 Thread-safe이다. 즉 멀티스레드 환경에서 안전하다.

    2.2 스트링 빌더는 스트링 버퍼보다 빠르다.

 

 

 

 

 

Q13. 기본 접근제어자(Default)와 프로텍스(Protect) 접근 제어자의 차이

 

클래스에서 접근 제어자를 지정하지 않고 메소드나 변수를 선언했을 때에는 접근 제어자가 기본적으로 Default 형이 된다. Default 멤버는 같은 패키지 안의 다른 패키지 클래스에서 볼 수 있지만, 해당 멤버 패키지 이외의 클래스에서는 볼 수 없다.

 

Protected는 Default와 동일하지만, Protected 클래스를 상속한 클래스는 패키지 밖에서도 볼 수 있다는 것이 차이점이다.

 

 

 

 

 

 

 

Q14. 해쉬맵과 해쉬테이블의 차이 (Difference between HashMap and HashTable)

HashMap HashTable
메소드 동기화를 지원하지 않는다 메소드 동기화를 지원한다
Thread-safe 가 아니다 Thread-safe 이다
Iterator를 사용한다 Enumerator를 사용한다
하나의 Null key와 여러개의 Null Value를 허용한다. Null을 허용하지 않는다
성능이 비교적 빠르다 성능이 비교적 느리다

 

* 정렬 순서를 유지하고 싶을 경우에는 키값이 트리구조 기반인 TreeMap / 노드가 포인터값을 포함하는 LikedHashMap도 사용을 고려할 수 있다. 다만 이 경우에는 get() 으로 호출시 시간복잡도가 O(logn), O(n)으로 호출 속도가 저하되는 것이 단점이다. 해쉬맵은 키를 해쉬값으로 호출함으로 O(1)이다.

 

 

 

 

Q15. 해쉬셋과 트리셋 (Difference between HashSet and TreeSet)

HashSet TreeSet
삽입된 요소는 랜덤 정렬된다 정렬 순서를 유지한다
Null 객체를 저장할 수 있다 Null 객체를 저장할 수 없다
성능이 비교적 빠르다 성능이 비교적 느리다
동일 타입 오브젝트 저장 허용 동일한 타입의 오브젝트 저장 불가
(ClassCastException 발생)
비교 오퍼레이션시 equals 메소드 사용 비교 오퍼레이션시 comparedTo 메소드 사용

 

 

 

 

Q16. JAVA 컬렉션 (JAVA Collections)

 

정의

 

객체를 저장하도록 설계된 프레임워크이다. 검색, 소트(정렬), 조작, 삽입, 삭제 등의 오퍼레이션을 수행할 수 있는 객체 집합을 컬렉션이라고 한다. 컬렉션은 자바 인터페이스로 구현되는데, 자료구조 중 리스트와 세트는 컬렉션 인터페이스를 상속하여 정의하고, 맵은 구조상의 차이로 별도로 정의된다.

 

 

정렬

 

ORDERED: 컬렉션에 추가된 순서대로 저장되는 컬렉션

SORTED: 객체 속성에 따라 내부적으로 정렬함

 

 

분류

 

리스트 LIST 세트 SET 맵 MAP
  • 삽입 순서가 의미를 가진다
  • 중복을 허용한다
  • ITERATION이 빠르다
  • 고유한 값을 가지는 자료구조로, 중복을 허용하지 않는다.
  • 인덱스를 사용하지 않으므로 저장순서가 보장되지 않음 (검색시 iterator메소드로 데이터를 불러와야함)
  • 분별자(KEY)가 고유한 값을 가지는 자료구조로, KEY는 중복되어서는 안 된다.

 

 

 

 

 

 

17. 예외(Exception)

 

정의 

 

예외란 실행 중에 발생할 수 있는, 개발자가 구현한 로직에서 발생하는 문제를 말한다(*로직과 관계없는 문제는 오류로 정의한다). 런타임 중에 문제가 발생하면 메소드는 예외를 던져 문제 발생을 알린다. 예외 처리가 안 되면, TASK가 완료되기 전에 실행은 멈춰버리게 되지만, 예외 처리를 하면 플로우는 계속될 수 있다.

 

 

예외 처리를 해서 얻을 수 있는 이점

 

  1. 실행을 멈추지 않고 진행하게 할 수 있다.
  2. 개발자가 문제를 확인할 수 있다.

 

 

 

 

 

 

18. 예외의 종류

 

체크 예외 (Check Exception)

 

  • 컴파일 단계에서 확인되는 예외들이다.
  • 반드시 명시적으로 처리해야 한다.
  • 로직상 예외 발생 가능성이 있는 상황들을 표현한다. 대표적으로 IOException, SQLException, ClassNotFoundException 이 있다.
  • 주로 JVM 외부와 통신 시에 발생하는 예외들이다.

 

 

언체크 예외 (Uncheck Exception)

 

  • 실행 단계에서 확인 되는 예외들이다. 
  • 명시적인 처리를 강제하지 않는다.
  • RuntimeException 클래스의 하위 클래스들이 모두 여기에 속한다. 여기에 속하지 않으면 체크 예외이다.

 

 

 

 

 

 

19. 예외 처리 방법

 

[복구형] Try/Catch 블록

 

예외 발생 가능성 있는 코드를 try문으로 감싸고, 발생 시에 처리는 catch에서 받아서 한다. 즉, 트라이 캐치 블록을 사용하면 해당 메소드에서 예외를 처리하게 된다.

 

 

[회피형] throw 키워드 선언

 

메소드 끝단에 throws Exception 을 선언하여 처리한다. 예외 발생 시, 메소드를 호출한 코드로 예외를 되돌려 보내서 처리하게 하는 방식이다.

 

 

[전환형] catch에서 다른 예외를 던지는 것

 

호출 측에서 에러의 타입을 명확하게 인지할 수 있도록 예외를 던져주는 것이다.

 

 

 

 

 

20. 파이널 키워드 (Final)

타입 특성
변수 변수가 Final로 일단 선언되면, 변수의 값은 덮어 씌워질 수 없다.
메소드 Final 메소드는 오버라이드 될 수 없다.
클래스 클래스가 Final로 선언되면, 상속 될 수 없다.
생성자 생성자는 Final이 될 수 없다.