면접에 나올법한 자바(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 |