본문 바로가기

기술면접 준비

기술면접 준비

잊어버리지마~~

 

11. 추상클래스와 인터페이스에 대해 설명

 

추상클래스

목적: 상속받아서 기능을 확장시키는 것(단일상속)

1. 추상메서드를 하나 이상 포함하거나 클래스명에 abstract라는 키워드가 포함된 클래스

2. 추상메서드란 내부 기능은 구현하지 않고, 선언부만 작성한 경우

->추상클래스를 상속하는 자식클래스에서 그 기능을 구현해야 한다.

3. 객체를 생성할 수 없으며, 동일한 부모를 가지는 자식클래스들이 여러개 있을 때, 상속해서 기능을 확장시킬 목적으로 추상클래스를 사용한다.

 

인터페이스

목적: 구현 객체가 같은 동작을 하는 것을 보장(다중상속) 

1. 추상메서드가 없어도 가능한 추상클래스와 달리 모든 메서드가 추상메서드여야 한다.

2. 객체를 생성할 수 없고, 필드는 static final 만 가능하다. 

3. 추상클래스와 달리 다중 구현이 가능하며, 구현 객체가 같은 동작을 하는 것을 보장하는 게 목적이다. 

4. 추상메서드 외에 default메서드로 일반메서드처럼 정의 가능하다.

 

new 연산자로 객체를 생성할 수 없다 = 인스턴스화 할 수 없다.

 

 

12. 제네릭이란?

 

클래스 내부에서 사용할 데이터 타입을 인스턴스가 생성될 때 설정하는 것을 말한다. 제네릭을 설정하면 컴파일 시에 미리 타입을 체크해 에러를 사전에 방지할 수 있는 장점이 있다.   

이때 설정할 데이터 타입은 참조형 데이터 타입만 가능한데, int나 char와 같은 기본형 데이터 타입은 래퍼클래스를 사용해 기본형 데이터 타입을 참조형 데이터 타입으로 바꿔서 사용한다.

 

13. 배열과 ArrayList의 차이점?

배열이란 같은 타입의 데이터를 인덱스를 부여해 연속된 공간에 나열한 자료 구조를 말한다. 

ArrayList는 배열과 같은 구조이지만, 선언 시 크기가 고정되어 저장되는 배열과 달리 동적으로 크기가 변경되며 입력되는 list컬렉션이다. 

 차이점

1. 배열은 크기가 고정되어 있지만, ArrayList는 가변적

2. 배열은 기본형 타입과 객체를 모두 담을 수 있지만, ArrayList는 객체만

3. 배열은 제네릭을 사용할 수 없지만, ArrayList는 제네릭 사용 가능

4. 배열은 length변수를 쓰고, arraylist는 size메서드 

5. 배열은 요소를 할당할 때 assignment연산자 쓰지만, arrayList는 add메서드 사용

 

 

14. 스택과 linkedList와 list의 차이점

stack은 list인터페이스를 구현한 vector클래스를 상속받아 구현한 클래스로, LIFO(후입선출)형식의 자료구조이다. 

선형자료구조의 일종으로, 책을 쌓는것처럼 데이터를 차곡차곡 쌓아 올리고 push로 데이터를 삽입하고, pop으로 인출한다. 활용되는 예시로는 웹브라우저에서 뒤로가기 클릭 시 가장 나중에 열린 페이지가 나오는 경우다. 

 

Linkedlist와 ArrayList

 둘 다 list interface를 구현한 Collection의 구현체이지만 내부 작동 방식에 차이가 있음.

- linkedlist는 데이터의 각 노드가 이전 노드와 다음 노드의 주소를 가지고 있다.(양방향의 연결 리스트-체인처럼)

데이터 추가, 삭제 시 arrayList처럼 복사 작업이 없기 때문에 성능은 좋으나 데이터를 검색할 때 

각 연결된 노드를 찾는데 시간이 걸린다. 데이터 추가,삭제가 빈번하면 linkedlist가 효율적

- ArrayList는 동적으로 크기가 변경되는 배열의 형태로, 인덱스가 있어 데이터 검색시 효율적이다.

그러나 데이터를 추가, 삭제할 때는 기존의 내용을 복사해 이동해야 하기 때문에 비효율적

 

list 컬렉션

자바 컬렉션 프레임워크에서 제공되는 인터페이스 중 하나로 객체를 일렬로 늘어놓은 구조로 중복값을 허용하고, ArrayList/ vector / linkedlist가 있다.

 

* vector는 ArrayList와 동일한 내부 구조를 가지고 있지만, 동기화된 메서드로 구성된다는 데 차이점이 있다. 

멀티스레드환경에서 안전하게 객체를 추가, 삭제할 수 있다. 그러나 동기화 되어 있기 때문에 ArrayList보다 속도가 더 느리다. (vector는 arrayList와 비슷하지만 동기화된 메서드가 있어 멀티스레드 환경에 안전래스와 인터페이스에 대해 설명

 

*queue: 선형자료구조의 일종으로, 한쪽에서는 삽입이 이루어지고 한쪽에서는 삭제 작업이 이루어진다. 선입선출형식으로 프린트 인쇄 대기열이나 게임에서 동시접속 인원수가 많아 대기순위를 처리해야 할 때 해당 자료구조를 활용한다.                                                                                                                                                                                                                                 

정리하면,

선형 자료구조 : stack과 queue 

비선형 자료구조 : tree구조

자바에서 제공하는 컬렉션 프레임워크의 인터페이스 : List(ArrayList, LinkedList, Vector), Set, Map

 

 

15. 자바 컬렉션프레임워크의 대표 인터페이스는 ? (순서/ 중복값)

List 와 Set, Map이 있습니다.

list는 순서가 있는 데이터 집합으로, 중복값이 허용됩니다.

set은 순서가 없는 데이터 집합이며, 중복값이 허용되지 않습니다. 순서가 유지되지 않기 때문에 데이터 처리 속도는 빠르지만, 별도로 목록화하기 위해서는 Iterator작업이 필요합니다.

마지막으로 map은 key와 value로 한 쌍을 이루는 데이터 집합이고, key는 set처럼 중복값을 허용하지 않는 반면에 value는 list처럼 중복값을 허용합니다. 

 

16. 접근제어자의 종류와 특성에 대해 설명

public 접근 제한이 없어 모든 클래스에서 접근 가능

protected 같은 패키지 내에서 접근이 가능하나, 자바에서는 상속관계일 경우 자식클래스에서 다른 패키지에서도 접근 가능

default는 같은 패키지일 경우에만 접근 가능

private는 같은 클래스에서만 접근 가능

 

클래스: public / default 만 가능(기본 값: default)

생성자, 필드, 메소드: public/ protected / default/ private (기본 값: default)

 

 

17. hashCode()값이 모두 같다면 어떤 일이 벌어지나요??????

자바에서 hashcode는 heap영역에 있는 객체의 메모리 주소를 바탕으로 생성된 값을 반환. 

이 hashcode값이 같으면 모든 객체의 참조값이 같거나 같은 객체인 것으로 간주되어 클래스간의 구분이 불가능하게 된다.

*equals메소드와 hashcode메소드는 object클래스의 메소드로, 어떠한 객체라도 해당 메서드들을 사용할 수 있다.

 

** equals와 ==의 차이

equals는 비교 대상의 내용을 비교하지만, ==연산자는 주소값을 비교한다(기본자료형도 constant pool에 있는 특정 상수를 참조하는 것이기에 주소값을 비교하는 것. 같은 상수를 참조하면 주소값이 같으니 동일하다고 판단.) equals는 object클래스에 포함되어 있어 class나 object가 가진 내용을 비교한다. 따라서 String타입을 비교할 때 내용이 같은 지 비교하려면 equals메소드를 사용해야 한다. 

 

 

18. HashTable과 HashMap 차이점은?

자바에서 제공하는 HashMap과 HashTable은 Map인터페이스를 상속받아 구현되어 데이터를 키와 값으로 관리하는 자료구조이다. 데이터를 추출할 때 key를 구분자로 활용되며 리스트 인터페이스와 같은 자료구조보다 탐색에 더 효율적.

 

HashMap과 HashTable은 동일한 내부구조를 가지지만, HashTable의 경우 동기화된 메소드로 구성되어 멀티스레드 환경에서 동시에 메소드를 실행할 수 없다. 하나의 스레드가 실행완료되어야 다른 스레드가 실행 가능하다. HashMap은 Thread Safe기능이 제외된 메소드를 제공한다.

* 새로운 버전인 ArrayList를 많이 활용하듯 HashMap을 더 많이 활용한다. 멀티스레드 환경에서 thread safe기능이 필요한 경우, vector/  hashtable을 사용한다. 

 

 

19. 객체의 직렬화는 무엇이고, 직렬화 대상이 되기 위해서는 어떤 인터페이스를 구현해야 하나요?

자바 입출력에서 객체 입출력은 기본적으로 바이트단위의 처리만 지원하기 때문에 객체를 스트림 처리하기 위해서 바이트 단위로 변환해야 한다. 이렇게 바이트단위로 변환하는 것을 객체 직렬화라고 한다. 클래스가 직렬화 대상이 되려면 Serializable인터페이스를 구현해야 한다.

* 입출력할 때 데이터를 전송할 수 있는 연결통로가 스트림(단방향 통신만 가능.)

-  바이트단위로 전송하는 input/outputstream과 보조스트림으로 fileinputStream, bufferedInputStream등이 있음. 문자기반 스트림인 Reader와 Writer도 있음.

정리 : 입출력 - > 바이트 단위 -> 객체를 스트림 처리하기 위해서는 바이트단위로 변환이 필요 : 바이트 단위로 변환하는 것을 객체 직렬화 라고 하고, 직렬화 하기 위해선 Serializable인터페이스를 구현해야 함. 

 

 

20. 자바로 자판기를 설계할 때 어떻게 설계할 것인지 설명해 봐

일단 제품명과 제품금액에 대한 데이터를 list와 map의 형태로 저장하고,

 들어온 금액을 변수에 담습니다. 그 다음 버튼 클릭 이벤트를 설정해 이벤트 발생 시, 제품금액과 들어온 금액의 차를 구해 0이 되면 해당 제품을 내보내고, 0보다 많은 금액 발생 시 거스름돈을 반환합니다. 계산값이 마이너스가 나올 경우에는 금액이 적다는 안내 문구를 띄워주도록 설정합니다. 

 

 

 

 

 

'기술면접 준비' 카테고리의 다른 글

기술면접준비(Oracle DB)  (0) 2021.05.07
기술면접준비(Spring)  (0) 2021.05.07
기술면접준비  (0) 2021.05.03
기술면접준비  (0) 2021.04.29
기술면접질문  (0) 2021.04.26