기술 면접 2

김준영·2023년 3월 4일
1

기술 면접

목록 보기
2/5

1. 자바 데이터 타입 중 기본형과 참조형의 차이?


기본형

계산을 위해 실제 값을 저장한다.

기본형 변수

  • boolean
  • char
  • byte, short, int, long
  • float, double

특징

  • 산술 연산이 가능하다.
  • Null로 초기화할 수 없다.
  • stack에 실제 값을 저장한다.

참조형

객체의 주소를 저장한다.

8개의 기본형을 제외한 나머지 모든 타입.

특징

  • 산술 연산 불가
  • null로 초기화 할 수 있다.
  • DB와 연동시 DTO 객체에 null이 필요한 경우 사용할 수 있다.
  • heap에 실제 값을 저장하고 해당 주소를 stack에 저장하는 방식을 사용한다.

2. 클래스와 객체


클래스는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.

그 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.

클래스로부터 객체를 만들어진 과정을 인스턴스화라고 한다.

3. 생성자란?


객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 생성자라는 메소드를 제공한다.

생성자의 이름은 해당 클래스의 이름과 같아야한다.

특징

  • 생성자는 반환값이 없지만, void형으로 선언하지 않는다.
  • 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.
  • 객체를 초기화하는 방법이 여러 개 존재할 경우, 하나의 클래스가 여러 개의 생성자를 가질 수 있다. (메서드 오버로딩)

4. 메서드 오버라이딩 & 메서드 오버로딩


메서드 오버라이딩

상위 클래스에서 상속받은 메서드를 하위 클래스에서 재정의 하는것이다.

메서드 오버로딩

한 클래스 내에 같은 이름의 메소드이지만, 매개변수나 타입이 달라야한다.

5. 자바의 메모리 영역


자바 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

메모리 공간은 크게 Method(Static) 영역, Stack 영역, Heap 영역으로 구분되고 데이터 타입(자료형)에 따라 각 영역에 나눠서 할당 된다.

변수

클래스 변수(static 변수)

  • 클래스 영역
  • 클래스 영역에서 타입 앞에 static이 붙는 변수
  • 클래스가 메모리에 올라갈 때 생성

인스턴스 변수

  • 클래스 영역
  • 클래스 영역에서 static이 아닌 변수
  • 개별적인 저장 공간으로 객체/인스턴스마다 다른 값 저장 가능
  • 객체/인스턴스 생성만 하고 참조 변수가 없는 경우 가비지 컬렉터에 의해 자동 제거됨

지역 변수

  • 메서드 영역
  • 메서드 내에서 선언되고 메서드 수행이 끝나면 소멸되는 변수

매개 변수

  • 메서드 영역
  • 메서드 호출 시 전달하는 값을 가지고 있는 인수

메서드 영역

JVM이 동작해서 클래스가 로딩될 때 생성

JVM이 읽어들인 클래스와 인터페이스에 대한 런타임 상수풀, 멤버 변수(필드), 클래스 변수(Static 변수), 상수(final), 생성자와 메서드 등을 저장하는 공간.

메서드 영역에 있는 것은 어느곳에서나 접근 가능

메서드 영역의 데이터는 프로그램의 시작부터 종료 될 때까지 메모리에 남아있다. 그래서 static 메모리에 있는 데이터들은 종료까지 어디서든 사용가능하며 static 데이터를 무분별하게 많이 사용하면 메모리 부족 현상이 일어날수 있다.

스택 영역

메소드 내에 정의하는 기본 자료형에 해당되는 지역변수의 데이터 값이 저장되는 공간

메소드가 호출될 때 스택 영역에 스택 프레임이 생기고 그 안에 메소드를 호출한다.

원시 타입의 데이터에 해당되는 지역변수, 매개변수 데이터 값이 저장된다.

메소드가 호출될 때 메모리에 할당되고 종료되면 메모리에서 사라짐.

스택은 LIFO, 스코프의 범위를 벗어나면 스택 메모리에서 사라짐.

  • 스태 프레임 : 하나의 메서드에 필요한 메모리 덩어리를 묶어서 스택 프레임이라고 한다.

힙 영역

JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 동적으로 할당하여 사용하는 공간, 참조형 데이터 타입을 갖느 객체, 배열 등이 저장되는 공간

힙 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수는 스택에 적재

힙영역은 메모리가 호출이 끝나더라도 삭제되지 않고 유지된다.
그래서 GC에 의해 메모리가 청소된다.

6. static 키워드


정적멤버(클래스 멤버)라고 한다. 정적멤버는 객체에 소속된 멤버가 아니라 클래스에 고정된 멤버이다. 그렇기에 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스 별로 관리된다.

클래스의 로딩이 끝나는 즉시 바로 사용할 수 있다.

7. OOP란?


데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법

장점

  • 코드 재사용 용이
  • 유지보수가 쉬움

단점

  • 처리 속도가 상대적으로 느림
  • 객체가 많으면 용량이 커짐
  • 설계시 많은 시간과 노력이 필요

8. 자바 접근 제어자의 특징과 종류


public : 모든 패키지, 모든 클래스에서 접근이 가능하다.

protected : 같은 패키지의 모든 클래스에 접근 가능, 다른 패키지여도 하위(자식) 클래스일 경우 접근 가능.

default : 동일한 패키지 내에 있는 클래스만 접근 가능.

private : 오직 해당 멤버를 선언한 클래스에서만 접근 가능.

9. 추상 클래스와 인터페이스 차이


추상클래스

추상 클래스를 상속받아서 기능을 이용하고, 확장시킨다.

인터페이스

함수의 껍데기만 있다. 함수의 구현을 강제한다.

다중 상속 가능


10. 이너클래스의 장점


  1. 클래스를 논리적으로 그룹화

클래스가 여러 클래스와 관계를 맺지 않고 하나의 특정 클래스와만 관계를 맺는다면, 내부 클래스로 작성할 수 있다.

  • 패키지 간소화
  1. 더욱 타이트한 캡슐화의 적용

내부 클래스에 private를 사용하여 클래스를 내부에 숨김.

  1. 가독성이 좋고 유지관리가 쉬운 코드

11. List, Set, Map 차이


  • List는 기본적으로 순서대로 데이터가 들어가며 중복을 허용.
  • Set은 순서가 보장되지 않고 중복을 허용하지 않음.
  • Map은 순서가 보장되지 않고, Key 중복 허용 안됨, Value 중복 허용

12. 컬렉션과 스트림의 차이


스트림이란?

어떤 데이터 집합에서 순차적인 계산을 위해 추출된 연속된 데이터의 나열

데이터의 집합의 데표적인 예는 컬렉션이며, 이외에도 배열, I/O 자원등이 있다. 이러한 데이터 집합에서 추출된 데이터들은 순차적으로 연속되게 처리된다.

컬렉션은 데이터를 저장하기 위한 자료구조이다.

스트림의 목적은 계산이다. 스트림으로 나열된 각각의 데이터는 어떠한 계산 과정 혹은 여러 계산 과정이 있는 파이프라인을 통과하면서 연산이 진행된다.

스트림의 특징

  1. 선언형 코드로 간결해져 가독성이 올라간다.
  2. 파이프라인을 통한 연쇄 처리가 가능하여 유연하다.

스트림 vs 컬렉션

데이터를 계산하는 시점

컬렉션은 컬렉션에 저장하기 전에 모든 요소가 계산되어야 한다.

스트림은 데이터를 요청할 때만 계산한다.

컬렉션은 외부반복, 스트림은 내부반복

13. 제네릭


클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미

장점

  • 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지
  • 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기 편하다.
  • 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.
profile
ㅎㅎ

0개의 댓글