본문 바로가기
for technical interview

개발자 기술면접(Java) : Java(2)

by heidish 2023. 6. 1.
반응형

 

 

 

💡 Interface 와 Abstract 의 차이점은 무엇인가요?

 

👉 Interface

  • 추상 클래스
  • 오직 추상메소드와 상수만 멤버로 가짐
  • Implements 키워드 사용
  • 상속 관계가 없는 클래스간의 서로 공동되는 로직을 구현해 쓸 수 있도록 해줌
  • Extends 는 하나의 클래스만 상속 가능하지만, Implements는 다중 상속이 가능함!

👉 Abstract

  • 추상메소드를 하나 이상 가지는 클래스
  • 자신의 생성자로 객체 생성이 블가능하며, 하위 클래스를 참조해 상위 클래스의 객체를 생성해야함
  • 하위 클래스를 제어하기 위해 사용됨

💬 공통점

  • new 연산자로 인스턴스(객체) 생성이 불가능
  • 프로토타입만 있는 메서드를 가짐
  • 사용하기 위해서는 하위 클래스에서 확장/구현해야함

💬 차이점

  • 사용하는 키워드가 다름
  • Abstract는 일반 메서드를 사용할 수 있지만, Interface는 메서드 선언만 가능함

 

 

 

💡 Interface 는 주로 어떤 경우 사용한다고 생각하나요?

협업 상황이나, 다중 상속이 필요한 경우 사용하면 좋다고 생각합니다.

 

 

 

 

💡 String / StringBuilder / StringBuffer 에 대해 설명해주세요.

👉 String

  • String 객체는 한번 값이 할당되면 그 공간이 변하지 않음
  • 값을 바꿀 때, Heap에 새로운 메모리를 사용하게 되고, 참조되는 메모리 주소만 바꿔주는 방식
  • 불변성으로 인해 멀티쓰레스 환경에서의 안정성, thread-safe가 보장됨 !
    StringBuilder와 StringBuffer는 String 과는 다르게 클래스를 한 번만 생성하고, 메모리 값을 변경시켜서 문자열을 변경한다. 따라서 문자열 연산이 자주 있는 경우 사용하면 좋다.

👉 StringBuilder

  • 동기화를 지원하지 않으므로 thread-safe가 보장되지 X
  • 하지만 동기화를 고려하지 않는 만큼, 단일 스레드에서의 성능은 StringBuffer 보다 뛰어남

👉 StringBuffer

  • 동기화를 지원하므로 thread-safe가 보장됨

 

 

 

💡 String 문자열 할당 시, " " 와 new 방식의 차이점은 무엇인가요?

  • string = "abc" → 리터럴 할당 방식 → Heap 내부의 String Constant Pool 영역에 저장
  • string = new String("abc") → 객체 할당 방식 → Heap 메모리 영역저장

→ 저장하는 주소값이 다르다!

 

 

 

 

💡 Error 와 Exception 의 차이점은 무엇인가요?

👉 Error

  • 실행 중 일어날 수 있는 치명적 오류
  • 컴파일 시점에 체크할 수 없고, 오류 발생 시 프로그램은 비정상 종료됨
  • 예측 불가능한 UncheckedException에 속함

👉 Exception

  • Error 보다 비교적 경미한 오류
  • try-catch 구문을 이용해 프로그램의 비정상적인 종료를 막을 수 있음

 

 

 

💡 Java 에서의 예외 처리 방법은 무엇이 있나요?

자바에서의 예외 처리는, 프로그램 실행 중 발생 가능한 예기치 못한 예외 발생에 대비한 코드를 작성하는 것을 뜻함.

예외처리를 해줌으로써 예외 발생으로 인한 프로그램 비정상 종료를 방지해 실행상태를 유지할 수 있음.

크게 세 가지 방법이 있음.

  1. 예외가 발생한 메소드 내에서 직접 처리하는 방법 → try-catch-finally
  2. 예외가 발생한 메소드를 호출한 곳으로 예외 객체를 넘겨주는 방법 → throws
  3. 사용자 정의 예외를 생성해서 처리하는 방법 → throw

↓ 예외 처리 관련 정리가 잘 된 블로그

https://dev-coco.tistory.com/18

 

온라인 자바 스터디 #9 - 예외 처리

목표 자바의 예외 처리에 대해 학습하세요. 학습할 것 (필수) 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가

dev-coco.tistory.com

 

 

 

💡 Java 의 컬렉션 프레임워크에 대해 설명해주세요.

List, Set, Map, Stack, Queue 등이 있다.

다수의 데이터를 쉽고 효과적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다.

👉 List

  • 순서가 있는 데이터 집합
  • 데이터의 중복이 허용됨
  • 대표적 구현체 : ArrayList, LinkedList 등

👉 Set

  • 순서가 없는 데이터 집합
  • 데이터 중복 허용 X
  • 대표적 구현체 : HashSet, LinkedHashSet, TreeSet 등

👉 Map

  • 키와 값 하나의 쌍으로 존재, 순서가 없는 데이터 집합
  • 키를 기준으로 중복 허용 X
  • (key 의 순서를 보장하기 위해서는 LinkedHashMap 을 사용)
  • 대표적 구현체 : HashMap, TreeMap, HashTable, Properties 등

👉 Stack

  • 직접 new 키워드로 사용 가능

👉 Queue

  • LinkedList 에 new 키워드를 적용해 사용 가능

 

 

 

💡 ArrayList 와 LinkedList 에 대해 설명해주세요.

👉 ArrayList

  • 원하는 데이터에 무작위로 접근 가능
  • 리스트 크기가 제한되어 있고, 리스트 크기 재조정은 쉽지 않다,,
  • 데이터의 추가/삭제를 위해서는 임시 배열을 생성해야 하므로 소요 시간이 길다..

👉 LinkedList

  • 무작위 접근이 불가능하며, 순차 접근이 가능함
  • 리스트 크기에 관계 없이 데이터 추가 가능
  • 데이터 추가를 위해 새로운 노드를 생성해 연결하기 때문에 추가/삭제에 소요되는 시간이 짧다.

 

 

 

💡 제네릭이란 무엇이며 왜 사용하나요?

  • 제네릭은 데이터 타입을 하나로 지정하지 않고, 사용할때마다 범용적이고 포괄적으로 지정한다는 의미
  • 제네릭 타입을 사용함으로써 잘못된 타입을 사용할지 모른다는 문제를 컴파일 과정에서 제거할 수 있어서, 사전에 에러 방지가 가능

 

 

💡 스레드(thread)란 무엇인가요?

  • 프로세스 내에서 실제로 작업을 수행하는 주체를 의미
  • 모든 프로세스에는 작업을 수행하기 위해 한 개 이상의 스레드가 존재
  • 두 개 이상의 스레드를 가지는 프로세스를 multi-threaded process 라고함
    → 하나의 응용 프로그램을 여러 개의 스레드로 구성하고, 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것.
     웹 서버가 대표적인 멀티 스레드 응용 프로그램!
    =>   Java Thread 란?   =>   일반 스레드와 거의 차이가 없고, JVM이 운영체제 역할을 한다. 자바에는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 JVM에 의해 스케줄링 되는 실행 단위 코드 블록이다.
    =>   thread safe란?   =>   멀티 스레드 프로그래밍에서 일반적으로 어떤 변수나 함수, 혹은 객체에 여러 스레드로부터 동시에 접근이 이루어 지더라도 프로그램을 실행하는데 문제가 없음을 의미함

 

 

💡 Primitive type 과 Reference type 에 대해 설명해주세요.

👉 Primitive type

  • 변수에 값 자체를 저장 (ex. 정수형, 실수형, 문자형, 논리형)
  • Wrapper Class 를 통해 객체로 변환 가능

👉 Reference type

  • 메모리상에 객체가 있는 위치를 저장
  • (ex. Class, Interface, Array 등)

 

 

💡 Stack 과 Queue!

👉 Stack

  • LIFO, 후입선출
  • push(); 로 데이터 입력, pop(); 으로 데이터 출력

👉 Queue

  • FIFO, 선입선출
  • enQueue(); 로 데이터 입력, deQueue(); 로 데이터 출력

 

 

👉 변수 명명법에 무엇이 있나요?

  • 스네이크 표기법    ex. tech_interview
  • 카멜 표기법    ex. techInterview
  • 파스칼 표기법    ex. TechInterview
  • 헝가리언 표기법    ex. strTechInterview

 

 

💡 call by value 와 call by reference 에 대해 설명해주세요.

대표적으로 사용되는 메소드의 인자를 전달하는 두 가지 방법이다.

👉 Call by Value

  • 값에 의한 전달
  • 실제값(caller)과 인수로 전달한 값(callee)이 메모리 측면에서 실제 서로 동일하지 않고, 값을 복사해 전달하는 방식
  • 이 방식으로 메소드 인자를 전달하는 경우, 메소드 내의 값을 수정하면 실제 값이 변경되는게 아니라 해당 값을 복사해 전달하는 것이라고 생각하면 된다.

👉 Call by Reference

  • 참조에 의한 전달
  • 호출자(caller)와 수신자(callee)에 전달한 값이 동일하다.
  • 즉, 메소드 내부에서 값을 수정하면 실제 원본 값도 변경된다.

👉 Java의 경우 항상 call by value !

자바는 객체를 메서드로 넘길 때 참조하는 지역변수의 실제 주소를 넘기는게 아니라, 해당 지역변수가 가리키는 Heap 영역의 객체를 가리키는 새로운 지역변수를 생성해서 이를 통해 같은 객체를 가리키도록 하는 방식이다.

어렵다.. 더 자세한 내용을 잘 설명한 블로그는 아래를 참고하면 좋을 것 같다.

https://hoons-dev.tistory.com/76

 

[개발공통] Call by value와 Call by reference (Java, Python, C/C++)

🏝 1. Call by value와 Call by reference란? Call by value와 Call by reference는 신입 개발자 기술면접에서도 자주 나올만큼 기초적이면서 중요한 개념이다. 필자도 모 인터뷰 중 해당 질문을 받은 적이 있는데,

hoons-dev.tistory.com

 

 

 

💡  Lambda 란 무엇인가요?

자바8부터 추가된 기능으로, 익명 클래스 표현식이다.

  • ex. (파라미터) -> {몸체}
  • 장점 → 코드 라인수 감소, 병렬 프로그래밍, 가독성 향상
  • 단점 → 재귀 람다 호출이 까다로움, 클로저 지원이 안됨

 

 

 

 

 

반응형

'for technical interview' 카테고리의 다른 글

개발자 기술면접(Java) : Java(1)  (0) 2023.05.17

댓글