Today's special moments become memories of tomorrow.

ETC

면접 자바(Java) 예상 질문 리스트

lotus lee 2022. 12. 4. 14:07

면접에 나올법한 자바(Java) 예상 질문 리스트

(해당 글은 실제 저의 면접 후기와 전혀 관련이 없습니다. 면접 기출이 아님을 미리 알려드립니다.)

 

 


 

Q. 객체와 클래스의 차이

- 클래스 : 객체를 생성하는 프레임

- 객체 : 클래스로부터 실제 메모리를 할당하여 실체를 만드는 것

 

Q. 자바의 장점과 단점

장점 : JVM 위에서 동작하기 때문에 운영체제에 독립적

         JVM에서 가비지 컬렉터가 알아서 메모리 관리

단점 : JVM에 의해 실행 시 해석(Interpret)되기 때문에 속도가 느림

          예외처리가 까다로운 점

 

Q. 접근 지정자 종류와 특징

범위 : public > protected > default > private

- public : 모든 클래스 접근 가능

- protected : 동일한 패키지 내의 클래스, 하위 클래스에서 접근 가능

- default : 동일 패키지 내의 클래스에서 접근 가능

- private : 해당 클래스 내에서만 접근 가능

 

Q. 객체지향(OOP)의 4가지 특징

- 추상화 : 공통적인 특징을 파악해서 하나의 개념으로 다루는 것

               설계의 유연함을 가질 수 있음

- 캡슐화 : 외부에서 접근하지 못하도록 제한하는 것

               한 곳에서 변화가 일어나도 다른 곳에 미치는 영향을 최소화할 수 있다.

- 상속 : 자식 클래스를 외부로부터 은닉하는 캡슐화의 일종

- 다형성 : 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각각의 방식으로 동작

                부모 클래스의 멤버를 자식 클래스가 오버라이딩(Overriding)하여 재정의 

 

Q. 객체지향(OOP)의 5대 원칙

- 단일 책임 원칙 SRP(Single Responsibility Principle) 

   : 클래스는 단 하나의 책임만 갖는다.

 - 개방-폐쇄 원칙 OCP(Open Closed Principle) 

   : 확장에는 열려 있고, 변경에는 닫혀 있음(상속을 통해 구현)

     기능을 변경하거나 확장할 수 있으면서, 그 기능을 사용하는 코드는 수정하지 않음

 - 리스코프 치환 원칙 LSP(Liskov Substitution Principle)

   : 상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상적으로 동작

     리스코프 치환 원칙을 지키지 않으면 IS-A 관계가 성립이 안됨

 - 인터페이스 분리 원칙(ISP, Interface Segregation Principle)

   : 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 함

 - 의존 역전 원칙(DIP, Dependency Inversion Principle)

   : 클라이언트는 구체 클래스가 아닌 추상 클래스(인터페이스)에 의존해야 함

 

Q. 객체 지향 프로그래밍과 절차 지향 프로그래밍의 차이

- 절자 지향 : 절차를 정의하고, 이 절차대로 프로그래밍(ex. C언어)

- 객체 지향 : 세상의 물체를 객체로 표현하고, 이들 사이의 관계와 상호작용을 나타낸 것

                   각 객체의 특성과 행위를 정의하여 하나의 클래스로 묶음

 

Q. 오버로딩(Overloading)과 오버라이딩(Overriding) 차이

- 오버로딩 : 동일한 이름을 가지고 있지만 매개변수의 개수나 타입을 다르게 하는 경우

- 오버라이딩 : 자식 클래스가 부모 클래스의 멤버를 재정의하는 것

 

Q. static 멤버와 non-static 멤버의 차이

- static 멤버 : 클래스 당 하나만 생성됨

                       해당 클래스의 모든 객체간에 공유됨

                       클래스 로딩 시에 생성됨

- non-static 멤버 : 객체마다 존재

                              객체 생성 시에 생성됨

 

Q. call by Value 와 call by Reference의 차이

- Call by Value : 메서드의 인자를 넘겨줄 때 값을 복사하여 전달

                           함수 내부에서 값이 변경되어도 원래 값이 바뀌지 않음

- Call by Reference : 메서드에 인자를 넘겨줄 때 값의 참조값(래퍼런스)을 전달

                                   함수 내부에서 값이 변경되면 원본 값도 달라짐

 

* Java는 Call by Value에 해당한다.

참조변수의 경우에도 참조값(래퍼런스) 자체가 전달되는 것이 아니라 래퍼런스가 복사되어 전달되기 때문에 실제로는 Call by Value에 해당한다고 볼 수 있다.

 

Q. 자바 기본형과 Wrapper 클래스의 차이

Wrapper 클래스는 자바의 기본형을 객체 형식으로 다루기 위한 클래스

 

Q. 자바 컬랙션의 종류와 차이점

- Set : 집합. 중복을 허용하지 않음 ex) 하위 클래스 : HashSet, TreeSet, LinkedHashSet

- List : 순서가 있는 자료구조. 중복을 허용 ex) 하위 클래스 : ArrayList, Vector, LinkedList

- Queue : 들어온 순서대로 나가는 자료구조(FIFO)

- Map : key-value로 이루어진 자료구조

 

Q. StringBuffer, StringBuilder, String의 차이

- String : Immutable(불변) 객체. ‘+’연산자를 사용하면 기존의 문자열이 수정되는 것이 아니라 새로운 문자열 객체가 생성

- StringBuffer : Mutable 객체. 기존의 문자열의 크기를 변경하여 수정이 가능

                           멀티 스레드 환경에서 동기화를 지원

- StringBuilder : Mutable 객체. 기존의 문자열의 크기를 변경하여 수정 가능

                            멀티 스레드 환경에서 동기화를 지원X

 

Q. Vector, ArrayList, LinkedList의 차이

- Vector : 가변 크기의 배열. 멀티 스레드 환경에서 동기화 지원

- ArrayList : 가변 크기의 배열. 멀티 스레드 환경에서 동기화 지원X

- LinkedList : 각 요소를 연결 리스트를 통해 연결. Vector, ArrayList에 비해 삽입, 삭제가 쉬움 

 

Q. HashSet, TreeSet, LinkedHashSet의 차이

- HashSet : 해시 테이블을 사용하기 때문에 속도가 가장 빠름

- TreeSet : 이진 검색 트리를 사용하여 키가 순서대로 정렬됨. HashSet에 비해서는 속도가 느림

- LinkedHashSet : key들을 입력한 순서대로 얻을 수 있음

 

Q. equals() 와  == 의 차이

- equals() : 문자열의 내용을 비교

- "==" : 객체의 주소값을 비교

 

Q. 추상클래스와 인터페이스 공통점/차이점

공통점 : 인스턴스를 생성할 수 없음

차이점 : 추상 클래스는 자식 클래스가 메서드를 구체화하여 기능을 확장하는데 목적이 있음

            인터페이스는 서로 관련 없는 클래스에서 기능을 구현할 필요가 있을 때 사용

 

Q. java에서의 final 키워드

변수나 메서드나 클래스가 변경 불가능하도록 만드는 것

- 변수 : 변수를 변경 불가능. 상수를 정의할 때 사용

- 메서드 : 자식 클래스에서 오버라이딩(재정의)가 불가능

- 클래스 : 해당 클래스의 자식 클래스를 정의할 수 없음

 

Q. Thread 구현 방법

- Thread 클래스 상속하기

- Runnable 인터페이스 구현하기 : Thread 생성자에 인자로 넣어서 스레드화

 

Q. 스레드 생명주기

- NEW : 스레드 생성

- RUNNABLE : 스레드가 실행중인 상태

- WAITING : 스레드가 일시정지 상태. 다른 스레드에서 notify()나 notifyAll()을 호출

- TIME_WAITING : sleep() 호출로 인해 일정 시간동안 일시정지 상태

- BLOCK : 동기화 블록에서 lock이 걸린 상태

- TERMINATED : 스레드 종료

 

Q. 동적 바인딩이란?

JVM이 프로그램이 실행 중에 객체의 타입을 보고 적절한 메서드를 호출하는 것

업캐스팅에서 발생하며, 다형성을 나타낼 수 있는 것은 동적 바인딩 때문이라고 볼 수 있음

 

Q. 기본형(Primitive type)과 참조형(Reference type)

기본형(Primitive type)

논리형 : boolean(1byte)

문자형 : char (2byte)

정수형 : byte(1byte), short(2byte), int(4byte), long(8byte)

실수형 : float(4byte), double(8byte)

 

- 운영체제에 따라 자료형의 길이가 변하지 않음

- 비객체 타입으로, null을 가질 수 없음

- 메모리 영역 중에서 스택(stack)에 저장됨

 

참조형(Primitive type)

- 기본형(Primitive type)을 제외한 타입들은 모두 참조형 타입

- 최상위 클래스인 Object클래스를 상속받는 모든 클래스

- 메모리 영역 중에서 힙(heap)영역에 저장됨

 

Q. 전역변수와 지역변수의 차이

전역변수와 지역변수는 선언 위치에 따라 구분

- 전역변수 : 클래스 내에서 선언, 클래스가 종료될 때까지 사용이 가능

- 지역변수 : 생성자 혹은 메서드 내에서 선언

 

Q. 자바의 메모리 영역

메소드 영역, 스택 영역, 힙 영역

- 메소드 : 바이트 코드, 전역 변수, static 변수

- 스택 : 매개변수, 지역변수(사용이 끝나면 바로 소멸. 컴파일 시에 메모리 할당)

- 힙 : new로 생성된 객체

 

Q. 배열과 연결리스트 차이

배열

- 배열은 인덱스를 가지며, 인덱스를 통해 접근 가능하므로 접근 속도가 빠름 -> O(1)

- 크기 변경 불가능

- 중간에 데이터 삽입, 삭제 시 다른 요소들도 이동해야 하므로 속도가 느림 -> O(n)

 

연결리스트

- 인덱스 대신에 현재 위치의 이전 위치와 다음 위치를 기억함

- 크기가 가변적

- 인덱스를 사용하여 접근하지 않기 때문에 접근 속도가 느림 -> O(n)

- 데이터의 삽입, 삭제의 속도가 빠름

   맨 앞, 맨 뒤에 삽입, 삭제하는 경우 -> O(1)

   중간에 삽입, 삭제하는 경우(탐색을 해야함) -> O(n)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'ETC' 카테고리의 다른 글

기업 인성면접 대비 예상 질문 리스트  (1) 2022.12.04
싱글톤 패턴(Singleton Pattern)  (0) 2021.05.21
PNG 와 JPEG(JPG) 차이  (0) 2021.04.13