기술면접-JAVA

최현석·2023년 2월 9일
0

기술면접

목록 보기
1/2

🧩 JAVA의 특징을 설명

  • Java는 객체지향 프로그래밍 언어
  • 기본 자료형을 제외한 모든 요소들이 객체로 표현, 객체지향의 특징인 캡슐화, 상속, 추상화, 다형성이 잘 적용된 언어이다.
  • 장점
    • JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적이다.
    • GarbageCollor를 통한 자동적인 메모리 관리가 가능하다.
  • 단점
    • JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다.
    • 다중 상속이나 타입에 엄격하며, 제약이 많다.

🧩 JVM의 역할에 대한 설명

  • JVM은 스택(Stack) 기반으로 동작하며, Java Byte Code를 OS에 맞게 해석 해주는 역할을 하고 가비지컬렉션을 통해 자동적인 메모리 관리를 해준다.

🧩오버라이딩(Overriding)과 오버로딩(Overloading)에 대해 설명해주세요.

  • 오버라이딩은 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것
  • 오버로딩은 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것

🧩 객체지향 프로그래밍(OOP)에 대해 설명해주세요

  • 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 상태와 행위를 가진 객체를 만들고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다.
    즉, 기능이 아닌 객체가 중심이며 "누가 어떤 일을 할 것인가?"가 핵심
    특징으로는 캡슐화, 상속, 다형성, 추상화 등이 있고, 모듈 재사용으로 확장 및 유지보수가 용이합니다.

🧩 추상 클래스와 인터페이스를 설명해주시고, 차이에 대해 설명해주세요.

  • 추상 클래스는 클래스 내 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다.
  • 인터페이스는 모든 메소드가 추상 메소드로만 이루어져 있는 것을 말합니다.
  • 공통점
    • new연산자로 인스턴스 생성 불가능
    • 사용하기 위해서는 하위 클래스에서 확장/구현 해야 합니다.
  • 차이점
    • 인터페이스는 그 인터페이스를 구현하는 모든 클래스에 대해 특정한 메소드가 반드시 존재하도록 강제함이 있다.
    • 추상클래스는 상속받는 클래스들의 공통적인 로직을 추상화 시키고,기능 확장을 위해 사용한다.
    • 추상클래스는 다중상속이 불가능 하지만,인터페이스는 다중상속이 가능하다.

🧩 싱글톤 패턴에 대해 설명해주세요.

  • 싱글톤 패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴입니다.
  • 인스턴스가 1개만 존재해야 한다는 것을 보장하고 싶은 경우와
  • 동일한 인스턴스를 자주 생성해야 하는 경우에 주로 사용합니다.(메모리 낭비 방지)

🧩 싱글톤 패턴의 대표적인 예시

  • Spring Bean입니다.
  • 스프링의 빈 등록 방식은 기본적으로 싱글톤 스코프이고, 스프링 컨테이너는 모든 빈들을 싱글톤으로 관리합니다.

🧩가비지 컬렉션(Garbage Collection)에 대해 설명해주세요

  • 가비지 컬렉션은 JVM의 메모리 관리 기법 중 하나로 시스템에서 동적으로 할당됐던 메모리 영역 중에서 필요 없어진 메모리 영역을 회수하여 메모리를 관리해주는 기법입니다.

🧩 가비지 컬렉션 과정

  • GC의 작업을 수해하기 위해 JVM이 어플리케이션의 실행을 잠시 멈추고, GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업을 중단 후(Stop The World 과정) 사용하지 않는 메모리를 제거(Mark and Sweep)하고 작업이 재개됩니다.

🧩 객체지향의 설계원칙에 대해 설명해주세요.

  • SRP - 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야 한다.
  • OCP - 개방-폐쇄 원칙 : 확장에는 열려있고, 수정에는 닫혀있어야 한다.
  • LSP - 리스코프 치환 원칙 : 상위 타입은 항상 하위 타입으로 대체할 수 있어야 한다.
  • ISP - 인터페이스 분리 원칙 : 인터페이스 내에 메소드는 최소한 일수록 좋다. (하나의 일반적인 인터페이스보다 여러 개의 구체적인 인터페이스가 낫다.) SRP와 같은 문제에 대한 두 가지 다른 해결책이다.
  • DIP - 의존관계 역전 원칙 : 구체적인 클래스보다 상위 클래스, 인터페이스, 추상클래스와 같이 변하지 않을 가능성이 높은 클래스와 관계를 맺어라. DIP 원칙을 따르는 가장 인기 있는 방법은 의존성 주입(DI)이다.

🧩 자바의 메모리 영역에 대해 설명해주세요.

  • 자바의 메모리 공간은 크게 Method 영역, Stack 영역, Heap영역으로 구분되고, 데이터 타입에 따라 할당됩니다.
  • 메소드 영역 : 전역변수와 static변수를 저장하며, Method영역은 프로그램의 시작부터 종료까지 메모리에 남아있다.
  • 스택 영역 : 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. LIFO(Last In First Out) 구조를 갖고 변수에 새로운 데이터가 할당 되면 이전 데이터는 지워진다.
  • 힙 영역 : new 키워드로 생성되는 객체(인스턴스), 배열 등이 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리되어 진다.

🧩각 메모리 영역이 할당되는 시점은 언제인가요?

  • 메소드 영역 : JVM이 동작해서 클래스가 로딩될 때 생성
  • 스택 영역 : 컴파일 타임 시 할당
  • 힙 영역 : 런타임 시 할당
    ※ 컴파일 타임 : 소스코드가 기계어로 변환되어 실행가능한 프로그램이 되는 과정
    ※ 런타임 : 컴파일 타임 이후 프로그램이 실행되는 때

🧩 클래스와 객체에 대해 설명해주세요.

  • 클래스는 객체를 만들어내기 위한 설계도 혹은 틀 이라고 할 수 있고, 객체를 생성하는데 사용합니다.
  • 객체는 설계도(클래스)를 기반으로 생성되며, 자신의 고유 이름과 상태, 행동을 갖습니다.
  • 여기서 상태는 필드(fields), 행동은 메소드(Method)라고 표현합니다.
  • 객체에 메모리가 할당되어 실제로 활용되는 실체는 '인스턴스'라고 부릅니다.

🧩 생성자(Constructor)에 대해 설명해주세요.

  • 생성자는 클래스와 같은 이름의 메소드로, 객체가 생성될 때 호출되는 메소드입니다.
  • 명시적으로 생성자를 만들지 않아도 default로 만들어지며, 생성자는 파라미터를 다르게하여 오버로딩할 수 있습니다.

0개의 댓글