본문 바로가기
카테고리 없음

자바 기술 면접 대비 예상 질문

by cook_code 2023. 4. 17.
반응형

1. 자바의 장단점 

자바의 장점은 가상머신의 사용으로 인해 이식성이 높아 어떤 운영체제에도 종속되지 않는 것입니다.

단점은 바로 컴파일이 되는 것이 아니라 jvm을 거쳐야 하기 때문에 컴파일링이 늦다는 것입니다.

하지만 하드웨어 발달과 jit 컴파일러의 등장으로 속도의 격차가 줄어들었습니다. 

 

2. 리스트, 맵, 셋의 차이 

리스트와 셋은 컬렉션에 포함되어 있고 맵은 맵에 포함되어있습니다. 

리스트는 중복 저장을 허용하고 순서가 있습니다. 

셋은 중복 저장을 허용하지 않고 순서가 없습니다. 

맵은 키값은 중복이 허용되지 않지만 밸류값은 중복이 허용됩니다. 

 

3. 리스트, 맵, 셋의 장단점 

리스트는 가변적인 배열로 비어있는 데이터가 없습니다.

하지만 원하는 데이터가 뒤쪽에 위치하는 경우,

순회해서 찾는 방식이므로 다른 자료구조에 비해 처리 속도가 늦어질 수 있습니다. 

 

셋과 맵은 모두 자료 검색 속도가 빠르다는 장점이 있고

인덱스를 사용하지 않기 때문에 iterator를 사용해야 한다는 공통점이 있습니다. 

 

4. 상황에 따라 어떤 자료구조를 사용해야 하는지 

  1. 배열 - 가변길이가 정해져 있는 경우에는 배열을 사용하면 연속된 메모리 주소를 가지기 때문에 따로 검색할 필요가 없어 처리 속도가 빠릅니다. 
  2. 링크드리스트 - 가변 길이가 정해져 있지 않은 경우, 지속적으로 데이터를 추가 및 삭제하는 경우(객체의 위치를 당겨오지 않고 변경하는 방식), 아주 큰 데이터를 담아야 하는 경우에 효율적입니다. 
  3. 어레이리스트 - 링크드리스트와 비교하여 객체를 검색하거나 순차적인 추가 및 삭제 작업을 하는 경우에 효율적입니다. (차례차례 찾는 방식)

 

5. 스택과 큐에 대해 설명하시오.

스택:  순서가 보장되는 선형 자료구조, (LIFO) last in first out 

마지막으로 입력된 것을 순차적으로 가져오는 메커니즘을 가진다. 

(동적 메모리)

큐: 순서가 보장되는 선형 자료구조, (FIFO) first in first out 

처음 입력된 것을 순차적으로 가져오는 메커니즘을 가진다. (동적 메모리)

 

요약 >

스택과 큐는 모두 순서가 보장되는 선형 자료구조이며 동적 메모리입니다.

하지만 스택은 가장 마지막으로 입력된 것을 순차적으로 가져오고,

큐는 가장 먼저 입력된 것을 순차적으로 가져온다는 차이점이 있습니다. 

 

6. 어레이와 어레이리스트의 차이

어레이는 초기화 시 사이즈가 고정되어 변경이 불가합니다.

어레이리스트는 초기화 시 사이즈를 표시하지 않으며 크기가 가변적입니다. 

 

7. equals()와 ==의 차이 

== 연산자는 비교하고자 하는 두 개의 대상의 주소값을 비교하는데,

String 클래스의 equals메소드는 비교하고자 하는 두 개의 대상의 값 자체를 비교합니다. 

 

8. 자바의 메모리 구조 

메소드 영역 :   jvm이 실행되며 생기는 공간, 클래스, 전역변수, static 변수 정보 저장, 모든 스레드에서 정보가 공유된다. 

힙 영역 : new 연산자로 생성된 객체, 동적으로 생성된 데이터가 저장되는 공간, 

gc가 처리하지 않는 한 소멸되지 않는다. 참조타입의 데이터가 저장되는 공간, 모든 스레드에서 정보가 공유된다.

스택 영역 : 지역변수, 메소드의 매개변수와 같이 잠시 사용되고 필요가 없어지는 데이터가 저장되는 공간 .

pc register : 스레드가 생성되면서 생기는 공간, 스레드가 어느 명령어를 처리하고 있는지 주소를 등록한다. jvm이 실행하고 있는 현재 위치를 저장하는 역할 

native method stack : java가 아닌 다른 언어로 구성된 메소드를 실행해야 할 때 사용되는 공간 

 

9. 오버로딩과 오버라이딩의 차이 

오버로딩 : 같은 메소드라도 매개변수만 다르면 얼마든지 정의하고 사용할 수 있습니다. 

  • 메소드 이름이 같아야 함
  • 리턴형이 같아도 되고 달라도 된다. 
  • 파라미터 개수가 달라야 한다. 
  • 파라미터 개수가 같을 경우, 데이터 타입이 달라야 한다. 

 

오버라이딩 : 상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 기술입니다.

  • 오버라이드 하고자 하는 메소드가 상위 클래스에 존재해야 한다. 
  • 메소드 이름이 같아야 한다. 
  • 메소드 파라미터 개수, 파라미터의 자료형이 같아야 한다. 
  • 메소드 리턴형이 같아야 한다. 
  • 상위 메소드와 동일하거나 내용이 추가되어야 한다. 

 

10. 추상클래스와 일반클래스의 차이

추상클래스는 실체클래스의 공통적인 부분(변수, 메소드)를 추출해서 선언한 클래스입니다. 

실체성이 없고 구체적이지 않기 때문에 객체를 생성할 수 없습니다. 

추상클래스와 실체클래스는 상속 관계입니다. 

클래스 앞에 abstract 명령어를 붙여 구현할 수 있습니다. 

다중상속이 불가합니다.

  추상 클래스  인터페이스 
키워드  abstract interface
사용 가능 변수  제한 없음  static final 
사용 가능 접근제어자  제한 없음 public
상속 extends implements
다중 상속 여부  불가능 가능
공통점 1. 추상 메소드를 가져야 한다. 
2. 인스턴스화(객체 생성) 할 수 없다. (new 생성자 불가)
3. 인터페이스 혹은 추상 클래스를 상속받아 구현한 구현체의 인스턴스를 사용해야 한다. 
4. 인터페이스와 추상클래스를 구현, 상속한 클래스는 추상 메소드를 반드시 구현해야 한다. 

추상클래스를 사용하는 경우

- 상속 받을 클래스들이 공통으로 가지는 메소드와 필드가 많아 중복 멤버 통합을 할때

- 멤버에 public 이외의 접근자(protected, private) 선언이 필요한 경우

- non-static, non-final 필드 선언이 필요한 경우 

(각 인스턴스에서 상태 변경을 위한 메소드가 필요한 경우)

☞ 요구사항과 함께 구현 세부 정보의 일부 기능만 지정했을 때

☞ 하위 클래스가 오버라이드하여 재정의하는 기능들을 공유하기 위한 상속 개념을 사용할 때

- 추상 클래스는 이를 상속할 각 객체들의 공통점을 찾아 추상화시켜 놓은 것으로, 상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능들을 구현해야할 경우 사용한다.

 

인터페이스를 사용하는 경우

- 어플리케이션의 기능을 정의해야 하지만 그 구현 방식이나 대상에 대해 추상화 할 때

- 서로 관련성이 없는 클래스들을 묶어 주고 싶을때 (형제 관계)

- 다중 상속(구현)을 통한 추상화 설계를 해야할때

☞ 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우

☞ 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용

 

12. mvc 패턴, 모델이란?

mvc란 model, view, controller의 약자로 소프트 디자인패턴 중 하나입니다. 

사용자가 컨트롤러를 조작하면 컨트롤러는 모델을 통해 데이터를 가져오고 그 데이터를 view를 통해 시각적 표현을 제어하여 사용자에게 전달합니다. 

  • 모델은 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야합니다. 

또한, 뷰나 컨트롤러의 어떠한 정보도 알지 말아야 합니다. 

  • 뷰는 모델이 가지고 있는 정보를 따로 저장해서는 안됩니다. 
  • 컨트롤러는 모델이나 뷰에 대해 알고 있어야하며, 모델과 뷰의 변경을 모니터링해야 합니다. 

비즈니스로직과 ui로직을 분리하여 유지보수를 독립적으로 수행하고

모델과 뷰가 서로 종속되지 않아 애플리케이션의 확장성, 유연성을 확보할 수 있습니다. 

하지만 컨트롤러와 다수의 모델과 뷰가 복잡하게 연결될 수 있다는 한계가 있습니다.

 

13. 스레드란?

실행중인 프로그램인 프로세스의 실행단위입니다. 

하나의 프로세스는 여러 개의 스레드로 구성될 수 있습니다.

 

14. 데몬스레드란?

데몬스레드는 주 스레드의 작업을 돕는 보조적인 역할을 수행합니다. 

주 스레드가 종료되면 데몬 스레드는 강제적으로 자동 종료됩니다. 

사용되지 않는 객체들은 GC에 의해 자동 식제됩니다.

 

15. 객체지향 언어의 개념과 특징 4가지 

객체지향 언어는 객체가 중심이 되어 누가 어떤 일을 할 것인지에 초점을 맞춰 프로그래밍하는 기법 입니다. 

추상화, 상속, 다형성, 캡슐화 

  • 추상화 : 객체들의 공통적인 속성과 기능을 도출하는 것
  • 상속 : 상위클래스 기능을 하위 클래스가 사용, 중복되는 기존 코드의 재사용성 
  • 다형성 : 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것
  • 캡슐화 : 정보은닉, 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는 것 

 

16. 객체지향 언어와 절차지향 언어의 차이 

객체지향은 객체중심, 대형프로그래밍, 코드 재활용성이 높고 디버깅이 쉽습니다. 하지만 절차지향보다 처리속도가 느리고 설계에 많은 시간이 든다는 단점이 있습니다. 

절차지향은 기능중심, 소규모 프로그래밍, 컴퓨터 처리구조와 유사해 실행속도가 빠릅니다. 

하지만 유지보수 및 디버깅이 어렵고 코드의 순서가 바뀌면 결과가 바뀔수 있다는 단점이 있습니다. 절차지향 언어에는 대표적으로 c언어가 있습니다.

17. 기본형 (primitive) 타입과 참조 (reference) 타입의 차이 

기본형 타입에는 int, double, long, float, char, String, boolean, byte, short 8가지가 있고, 

실제 값을 저장하는 공간으로 스택 메모리에 저장됩니다. 

참조 타입은 기본형 이외의 모든 타입을 지칭하며, 

주소값을 저장하는 공간으로 힙 메모리에 저장됩니다. 

 

18. 멤버변수와 지역변수는 언제 메모리에서 해제되는지?

멤버변수는 프로그램이 실행되어 종료될 때까지 메모리에 남아있고, 

지역변수는 메소드 호출 시 메모리에 공간을 할당받고 종료 시 해제됩니다.. 

 

CS 질문, 대답 정리 사이트

 

'[3단계] CS 질문 & 대답 요약 정리집' 카테고리의 글 목록

신입 개발자들에게 포트폴리오와 면접을 시행착오 없이 필요한 것들만 준비하게 도와주는 블로그입니다

dev.jek300.com

 

반응형