본문 바로가기
Java

[Java] 기술면접

by happyhelen 2024. 4. 3.
  • Java란?
    • 객체지향 언어로 요소들을 객체로 표현하고 상속, 추상화, 캡슐화, 다형성이 특징.
    • JVM위에서 동작하기 때문에 운영체제에 독립적이고, GC를 통해 메모리 관리가 가능.
    • JVM위에서 동작하기 때문에 실행속도가 조금 더 걸린다.
  • JVM이란?
    • 운영체제에 종속받지 않고 CPU가 Java를 실행할 수 있게 하는 가상머신
    • 자바 컴파일러가 .java -> .class (bytecode) 로 변환하고 나면 JVM이 이 bytecode를 해석해 실행한다.
  • 자바 컴파일 과정
    • Java 파일 작성 -> java compiler 의 javac 명령어를 통해 .class 생성 -> Class Loader를 통해 JVM 내로 로드 -> 실행엔진(인터프리터 & JIT컴파일러)을 통해 기계어로 해석
  • 오버라이딩과 오버로딩
    • 오버라이딩 : 상위 클래스에 있는 메소드를 하위 클래스에서 재정의
    • 오버로딩 : 파라미터의 타입이나 개수를 다르게 한 같은 이름의 메소드를 여러개 정의하는 것
  • OOP란?
    • 프로그래밍 구현에 필요한 객체를 파악하고, 상태와 행위를 가진 객체를 만들어 객체간의 상호작용을 통해 프로그램을 만드는 것
    • 특징은 상추캡다이고, 모듈 재사용으로 확장 및 유지보수가 용이함
  • 추상클래스와 인터페이스
    • 인터페이스는 모든 메소드가 추상 메소드로만 이루어져 있는 것이고, 추상 클래스는 클래스 내 추상 메소드가 하나 이상 포함 된 것
    • 둘 다 사용하기 위해서는 하위 클래스에서 구현해야하고, 인스턴스 생성이 불가능하다.
    • 인터페이스는 인터페이스를 구현하는 모든 클래스에 대해 메소드가 존재하게 하는 강제성이 있고 다중상속이 가능.
    • 추상클래스는 상속받는 클래스들의 공통적인 로직을 추상화하고 기능 확장을 위해 사용하며 다중상속 불가능.
  • 싱글톤 패턴?
    • 하나의 인스턴스만을 생성해서 사용하는 패턴으로 private로 생성자를 선언하고, getInstance() 메소드로 받아서 사용하도록 구현.
    • 메모리 낭비 방지가 목적이고, 대표적인 예시로 스프링 빈, db 커넥션 풀이 있다.
    • 조건문으로 인스턴스 존재 여부 확인 후, 인스턴스를 생성하는 코드가 싱글톤패턴이다
  • 자바의 메모리 영역
    • 메소드 영역 : 전역변수와 static 변수 저장. JVM동작 후 클래스 로딩시 할당
    • 스택 : 지역변수와 매개변수, 메소드 호출시 메모리에 할당되고 종료되면 해제됨. 메소드 호출시 할당
    • 힙 : new 로 생성되는 인스턴스, 배열 등. GC에 의해 메모리 관리. 런타임시 할당
  • 객체지향의 설계원칙(SOLID)
    • SRP 단일책임의 원칙 : 한 클래스는 하나의 책임만 가져야
    • OCP 개방폐쇄의 원칙: 확장에는 열려있고 변경에는 닫혀야. 기존 코드를 변경하지 않으면서 확장할 수 있어야.
    • LSP 리스코프 치환 원칙: 하위 타입은 항상 상위 타입을 대체할 수 있어야 한다
    • ISP 인터페이스 분리 원칙 : 하나의 통합적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다 
    • DIP 의존관계 역전 원칙 : 구체적인 클래스에 의존하지 말고 상위 클래스, 인터페이스 등 변하지 않을 가능성이 높은 클래스와 관계를 맺어라, DI
  • 가비지 컬렉션
    • JVM의 메모리 기법 중 하나로 시스템에서 동적으로 할당된 메모리 영역 중 필요 없어진 메모리 영역을 회수하며 관리하는 기법
    • 컬렉션 과정은 JVM이 어플리케이션 실행을 멈추고, GC 실행 스레드를 제외한 모든 스레드 작업을 중단한 후(Stop The World 과정) 사용하지 않는 메모리를 제거함
  • Synchronized?
    • 여러 개의 스레드가 한 개의 자원을 사용하고자 할 때, 현재 데이터를 사용하고 있는 스레드를 제외하고 나머지 스레드들은 데이터에 접근할 수 없게 하는 것
  • String vs StringBuffer vs StringBuilder
    • String : 불변
    • StringBuffer : 가변, 동기화 지원해 멀티스레드 환경에서 사용
    • StringBuilder : 가변, 동기화를 지원하지 않음
  • 컬렉션 프레임워크
    • 여러 형식의 데이터를 쉽게 관리하기 위해 표준화된 방법을 제공하는 클래스의 집합
    • 자바 컬렉션에는 List, Set, Map, Stack, Queue 인터페이스가 있다
    • List : 순서 O 데이터 중복 O
    • Set : 순서 X 데이터 중복 X
    • Map : 키와 값, 키 중복 X, 순서 X
    • Stack : new 키워드로 사용

 

 

 

 

링크 : https://dev-coco.tistory.com/153