티스토리 뷰

기술면접

1. JAVA

Howu 2023. 4. 17. 14:57

출처: https://dev-coco.tistory.com/153

 

신입 개발자 기술면접 질문 정리 - 자바

💡 Java의 특징을 설명해주세요. Java는 객체지향 프로그래밍 언어입니다. 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언

dev-coco.tistory.com

JAVA의 특징

  • 객체지향 프로그래밍 언어로 캡슐, 상속, 다형성과 같은 객체 지향 개념의 특징이 잘 적용되어 있는 언어
  • 객체지향 프로그래밍: 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만듦
  • 기본 자료형을 제외한 모든 요소들을 객체로 표현
  • 장점: JVM위에서 동작하므로 OS에 독립적, GC를 통해 자동적으로 메모리 관리 가능
  • 단점: JVM위에서 동작하므로 실행 속도가 상대적으로 느림, 다중 상속이나 타입에 엄격

JVM의 역할

  • JVM은 스택 기반으로 동작하고, Java Byte Code를 OS에 맞게 해석해주는 역할로 자동으로 메모리 관리

Java의  컴파일 과정

  • .java 파일을 생성 => build => javac의 명령어를 통해 .class를 생성 => Class Loader를 통해 JVM 메모리 내로 로드 => 실행엔진을 통해 기계어로 번역

오버라이딩과 오버로딩

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

불변 객체

  • final: 불변객체는 한 번만 할당 가능하다는 선언으로 재할당 시 컴파일 오류가 발생하여 바로 확인이 가능
  • 장점
    • 값에 대한 검증 없이 로직 구현에 집중할 수 있다.
    • 서비스 안정성이 높아진다. (버그 발생 가능성이 줄어듦)
    • 스레드 동기화 문제를 방지할 수 있다.

추상 클래스와 인터페이스

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

객체지향 설계원칙

  • SRP: 한 클래스는 하나의 책임만 가져야 한다.
  • OCP: 확장에는 열려있고, 수정에는 닫혀있어야 한다.
  • LSP: 상위 타입은 항상 하위 타입으로 대체할 수 있어야 한다.
  • ISP: 인터페이스 내에 메소드는 최소한 일수록 좋다.
  • DIP: 구체적인 클래스보다 상위 클래스, 인터페이스, 추상클래스와 같이 변하지 않을 가능성이 높은 클래스와 관계 맺기.

자바의 메모리 영역

  • Method: 전역변수와 static변수를 저장하며 프로그램의 시작부터 종료까지 메모리에 남아있다.
  • Stack: 지역변수와 매개변수 데이터 값이 저장되는 공간으로 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. 변수에 새로운 데이터가 할당되면 이전의 데이터는 지워진다.
  • Heap: new 키워드로 생성되는 객체, 배열 등이 저장되며 GC에 의해 메모리가 관리되어진다.

생성자

  • 클래스와 같은 이름의 메소드로 객체가 생성될 때 호출되는 메소드
  • 기본으로 만들어지며 생성자는 파라미터를 다르게 하여 오버로딩 할 수 있다.

Synchronized

  • 여러 개의 쓰레드가 한 개의 자원을 사용하고자 할 때 현재 데이터를 사용하고 있는 쓰레드를 제외하고 나머지 쓰레드들은 데이터를 접근할 수 없게 막는 개념
  • 멀티 쓰레드 환경에서 쓰레드간 동기화를 시켜 데이터의 thread-safe를 보장
  • 변수와 메소드에 사용해서 동기화 할 수 있고 이 키워드를 남발하게 되면 오히려 프로그램 성능 저하를 일으킴

new String() / " "

  • new String()은 연산자로 새로운 객체를 생성하여 Heap 영역에 저장되고, " "은 Heap 안에 있는 String Constant Pool에 저장된다.

String Buffer, String Builder

  • String은 불변 속성, StringBuffer와 StringBuilder는 가변 속성
  • StringBuffer는 동기화를 지원하여 멀티 쓰레드 환경에서 주로 사용
  • StringBuilder는 동기화를 지원하지 않아 싱글 쓰레드 환경에서 주로 사용

String 객체가 불변인 이유

  • 캐싱 기능에 의한 메모리 절약과 속도 향상: String 객체들은 Heap의 String Pool이라는 공간에 저장되는데 참조하려는 문자열이 이 영역에 존재하는 경우 새로 생성하지 않고 있는 객체를 사용하므로 상당한 성능 향상 기대
  • thread-safe: String 객체는 불변이기 때문에 여러 쓰레드에서 동시에 특정 String 객체를 참조하더라도 안전
  • 보안기능: 중요한 데이터를 문자열로 다루는 경우 해당 참조에 대한 문자열 값 변경 불가능

접근 제한자

  • 변수 또는 메소드의 접근 범위를 설정해주기 위한 Java의 예약어
  • public: 접근 제한이 없음
  • protected: 해당 패키지 내 다른 패키지에서 상속받아 자손 클래스에서 접근 가능
  • default: 해당 패키지 내에서만 접근 가능
  • private: 해당 클래스에서만 접근 가능

리플렉션

  • 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API

Error와 Exception

  • Error: 실행 중 일어날 수 있는 치명적 오류로 컴파일 시점에 체크할 수 없고 프로그램은 비정상 종료된다.
  • Exception: 비교적 경미한 오류이며 try-catch를 이용해 프로그램의 비정상 종료를 막을 수 있다.

Generic

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

 

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

6. 프로그래밍 공통  (0) 2023.04.19
5. 자료구조  (0) 2023.04.19
4. OS  (0) 2023.04.18
3. Spring  (0) 2023.04.18
2. 네트워크  (0) 2023.04.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함