본문 바로가기

기술면접 대비/면접 질문 모음

기술면접 대비 질문 50개

반응형

CORS란 무엇인지 아는 만큼 설명해주세요. *

  • 추가 HTTP 헤더를 사용하여 한 출처에서 실행 중인 웹 어플리케이션이 다른 출처의 선택한 자원에 접근 할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다.
  • 다른 출처의 구분의 기준은 프로토콜, 도메인 포트번호가 다른 경우이다.

 

 

 

RESTful이란 무엇인지 아는 만큼 설명해주세요. *

  • RESTful은 Rest원리를 따르는 시스템의 특성을 의미한다. 여기서 Rest란 Representational State Transfer” 의 약자로 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.

 

 

 

 

HTTP 메서드와 이것이 하는 역할에 대해서 설명해주세요. *

  • HTTP Method는 클라이언트가 웹 서버에게 요청의 목적이나 종류를 알리는 수단입니다. 대표적으로 GET, POST, PUT, PATCH, DELETE가 있습니다.

 

 

 

데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해주세요. *

  • Index 추가적인 쓰기 작업과 저장공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조

즉 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 성능을 향상시키는 것.

장점으로는 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있으며, 전반적인 시스템의 부하를 줄일 수 있다.

단점으로는 인덱스의 관리를 위해 추가 작업과 저장공간이 필요하며 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생한다.

 

 

 

트랜잭션에 대해서 설명해주세요. *

 

  • 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위, 

1.원자성 :  DB에 모두 반영되거나, 전혀 반영되지 않거나

2.일관성 : 작업 처리의 결과가 항상 일관되어야 한다

3.독립성  : 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 마찬가지로 독립적임

4.지속성 : 트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 함

 

 

 

 

JOIN에 대해서 설명해주세요. *

  • 여러 테이블을 결합하여 데이터를 검색하는 방법

관계형 DB에서 데이터를 효율적으로 사용하기 위해 나누어 둔 테이블들을 Primary Key 혹은 Foreign Key를 이용해 두 테이블을 연결하는 Join이라 불리는 과정

 

 

 

 

RDBMS vs NOSQL에 대해서 설명해주세요. *

 

  • RDBMS는 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터구조를 보장하며, 관계는 각 데이터를 중복없이 한 번만 저장할 수 있다.

단점으로는 테이블간 관계를 맺고 있어 시스템이 커질 경우 복잡한 쿼리가 만들어질 수 있고, 성능 향상을 위해서는 서버의 성능을 향상시켜야 하므로 비용이 기하급수적으로 늘어날 수 있으며, 스키마로 인해 데이터가 유연하지 못하다는 것이다.

  • NOSQL은 스키마가 없기 때문에 유연하고 자유로운 데이터 구조를 가질수 있으며, 데이터 분산이 용이하고 많은 양의 데이터를 저장과 처리를 할수있다.

단점으로는 스키마가 없기 때문에 명확한 데이터 구조를 보장하지 않고, 데이터 구조 결정이 어려울수 있다. 또 데이터 중복이 발생할 수 있으며 중복된 데이터를 변경 할 경우 모든 컬렉션에서 수행을 해야한다.

 

 

 

배열과 링크드 리스트의 차이를 설명해주세요. *

  • 배열은 입력된 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조이다. Index를 통한 접근이 용이하다.

단점으로는 삽입과 삭제가 오래걸리며 배열 중간에 있는 데이터가 삭제되면 공간 낭비가 발생한다.

  • 링크드 리스트 즉 연결리스트는 여러 개의 노드들이 순차적으로 연결된 형태를 갖는 자료구조이며 첫번째 노드를 헤드, 마지막 노드를 테일이라고 한다.

각 노드는 데이터와 다음 노드를 가리키는 포인터로 이루어져 있어 삽입과 삭제가 용이하다.

배열과 다르게 메모리를 연속적으로 사용하지 않는다.

단점으로는 임의 접근이 불가능하여 처음부터 탐색을 진행해가야 한다.

 

 

JWT에 대해서 간단히 설명해주세요. *

  • JSON Web Token 토큰 기반 인증 방식이며 클라이언트에 저장이 되어서 서버의 부담을 덜 수 있다.

토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함하여 발급 할 수있다.

전자 서명된 토큰이며 이에 따라 변조를 체크 할 수 있게 되어있다.

header.payload.signature 의 3가지 요소로 구성되어있다.

header에는 토큰의 타입이나 서명 생성에 어떤 알고리즘이 사용되었는지 저장하며 payload는 앞서 말한 권한 정보나 서비스를 사용하기 위한 정보가 key-value 형태로 저장되어 있다. 중요한 것은 민감한 정보를 담지 않는 것이다.

Signature는 header와 payload를 base64 URL-safe Encode를 적용하고 해싱한 뒤 이를 대상으로 secretkey로 서명한 것이다.

 

 

OAuth에 대해서 간단히 설명해주세요. *

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.

 

 

JWT와 OAuth의 차이는 무엇이 있을까요? *

  • JWT는 토큰의 한 형식이고, OAuth는 하나의 프레임워크이다. 그렇지만 OAuth에서 나온 OAuth Token과 비교를 한다면, OAuth Token은 사용자의 정보와 같이 중요한 정보를 가지고 있는 토큰이 아니다. OAuth Token은 랜덤한 문자열을 가지고 있고, OAuth 프레임워크로 들어가서 해당 정보가 저장되어 있는 정보를 확인할 수 잇는 인식표이다. JWT는 명확한 정보를 가지고 있고, 이 때문에 토큰이 커지면 주고 받는 데이터 트래픽 크기에 영향을 미칠 수 있다. 

 

 

 

 

JVM의 구조와 Java의 실행방식을 설명해주세요. *

  • JVM의 구조는 Class Loader, Runtime Data Area, Execution Engine, Native Method Interface, Native Method Library 로 이루어져 있습니다.

자바 코드의 실행방식은 소스코드 -> 자바 바이트코드 -> 기계어의 순서로 컴파일되어 CPU가 읽을 수 있는 기계어가 되어 실행되게 됩니다.

 

 

제네릭에 대해서 설명해주세요. *

  • 다양한 타입의 객체에 재사용을 높일 수 있는 기법으로 클래스에서 사용할 타입을 

외부에서 설정하는 것을 말합니다.

선언 시 클래스 또는 인터페이스 에 "<>" 를 붙이고 타입파라미터를 지정합니다.

 

 

 

 

애노테이션에 대해서 설명해주세요. *

프로그램 실행 관점에서보면 프로그램이 처리할 메인 데이터가 아니라 실행과정에서 데이터를 어떻게 처리할것인지

알려주는 서브 데이터라고 볼 수 있는 것 이다.

 

 

 

 

오버라이딩과 오버로딩이 무엇이며 어떤 차이가 있을까요? *

오버로딩이란 이름은 같지만 파라미터수, 타입 는 다른 메소드를 중복으로 선언하는 것

오버라이딩이란 부모 클래스의 메소드의 동작 방법을 변경하여 우선적으로 사용하는 것.

 

 

 

인터페이스와 추상클래스의 차이점에 대해 설명해주세요. *

추상 클래스는 그 추상 클래스를 상속 받아서 기능을 이용하고 확장시키는데에 있다.

반면에 인터페이스는 함수의 껍데기만 있는데, 그 이유는 함수의 구현을 강제하기 위함이다. 

 

 

 

객체지향에 대해서 설명해주세요. *

코드 재사용 용이, 유지보수가 쉬움, 대형 프로젝트에 적합

처리 속도가 느림, 객체가 많으면 용량이 커질 수 있음, 설계 시 많은 시간과 노력이 필요

 

 

 

 

Spring DI/IoC는 어떻게 동작하나요? *

의존성 주입(DI)이란 오브젝트 레퍼런스를 외부로부터 제공(주입)받고, 이를 통해 다른 오브젝트와 동적인 의존 관계가 만들어지는 것이 핵심입니다.

객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.

DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

 

IoC(Inversion of Control)란 "제어의 역전" 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.

 

https://velog.io/@gillog/Spring-DIDependency-Injection

 

 

 

IoC 컨테이너의 역할은 무엇이 있을까요? *

인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해줍니다.

객체관리 주체가 프레임워크(Container)가 되기 때문에 개발자는 로직에 집중할 수 있는 장점이 있습니다.

  • IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
  • POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
  • 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
  • 개발자는 비즈니스 로직에 집중할 수 있다.
  • 객체 생성 코드가 없으므로 TDD가 용이하다.

 

 

출처: https://dev-coco.tistory.com/80 [슬기로운 개발생활😃]

 

 

 

DI 종류는 어떤것이 있고, 이들의 차이는 무엇인가요? *

생성자 주입 방식 : 순환 참조 방지

필드 주입 방식

수정자 주입 방식

 

 

 

Spring Web MVC의 Dispatcher Servlet의 동작 원리에 대해서 간단히 설명해주세요. *

클라이언트의 요청이 있을 시 가장 앞단에서 요청을 가로채어(Front Controller) 요청에 매핑되는 Controller에 작업을 전달하고 비지니스 로직 처리 후 해당 결과 View를 클라이언트에 전달하는 역할

 

 

Autowiring 과정에 대해서 설명해주세요. *

의존관계 주입(DI)을 할 때 사용하는 어노테이션(Annotation)이며,
의존 객체의 타입에 해당하는 빈(Bean)을 찾아 주입하는 역할을 한다.

 

빈의 라이프사이클은 크게 '객체생성 - 의존관계 설정 - 초기화 - 소멸' 의 순으로 나눈다.

https://beststar-1.tistory.com/40

 

 

 

POJO란 무엇인가요? Spring Framework에서 POJO는 무엇이 될 수 있을까요? *

POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트/

특정 '기술'에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 말하는 겁니다.

IOC/DI

AOP

PSA

 

 

 

Spring에서 CORS 에러를 해결하기 위한 방법을 설명해주세요. *

웹 MVC CONFIGURER를 활용하는 방법이 있다.

Bean으로 해당 configurer를 추가해주면 된다.

 

 

 

JPA는 무엇인가? *

RDBS와 객체지향 프로그래밍 언어의 패러다임이 불일치하는 상황에서 객체를 데이터베이스에 저장하려고 하니 여러 문제가 발생하였다.

문제의 해결책으로 JPA라는 자바 표준 ORM(Object Relational Mapping) 기술이 등장했다. JPA는 객체지향 프로그래밍 언어와 RDBMS를 중간에서 패러다임 일치를 시켜주기 위한 기술이다.

 

 

N + 1 문제가 발생하는 이유와 이를 해결하는 방법을 설명해주세요. *

JPQL에서는 글로벌 패치 전략을 완전히 무시하고 SQL을 생성하기 떄문에 N+1이 생긴다.

Batch size나, 지연 로딩을 활용

 

 

 

대용량 트래픽에서 장애가 발생하면 어떻게 대응할 것인가요? *

Scale Up

: Scale Up이란 서버의 사양을 높이는 것에 해당한다. 수직적 확장이라고도 불리며 하나의 기존 서버에 자원 (ex. CPU,

RAM, 메모리 등) 을 추가하거나 서버 자체를 고사양의 서버로 교체하여 서버의 성능을 향상시키는 것을 말한다. 즉, 서버

한 대의 성능만 높이는 것이다. 가령, 서버가 여러 대여도 서비스를 운영할 때 하나의 서버에서만 트래픽을 받는다면 이는

나머지 서버들이 함께 트래픽을 분담하기 위해 존재하는 것이 아니라 현재 운영 중인 서버에 장애가 발생할 때 이를 대체

하기 위한 스페어 역할로 존재하는 것이므로 Scale Out이 아닌 Scale Up이라고 할 수 있다.

 

Scale Out이란 서버의 수를 늘리는 것에 해당한다. 수평적 확장이라고도 불리며 기존 서버와 비슷한 사양의 새로운 서버

여러 대를 추가하여 서버를 재구성하는 것을 말한다. 즉, 서버를 병렬적으로 확장하는 것이라고 할 수 있다.

 

https://chagokx2.tistory.com/92

 

 

 

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

어플리케이션이 시작될 떄 어떤 클래스가 최초 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴

 

 

 

TDD를 알고 있나요? TDD에 대해서 어떻게 생각하나요? *

Test Driven Development로서, 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.

짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtream Programming(XP)의 ‘Test-First’ 개념에 기반을 둔 단순한 설계를 중요시한다.

 

 

 

 

인스턴스화 된다라는게 무슨의미인가요? *

인스턴스는 추상화 개념 또는 클래스 객체, 컴퓨터 프로세스 등과 같은 템플릿 실제 구현된 것이다. 인스턴스화는 클래스 내의 객체 대해 특정한 변형을 정의하고, 이름을 붙인 다음, 그것을 물리적인 어떤 장소에 위치시키는 등의 작업을 통해, 인스턴스를 만드는 것을 의미한

http://www.terms.co.kr/instance.htm

 

 

String과 StringBuffer에 차이점이 무엇인가요? *

스트링은 불변의 속성을 갖는다. 따라서 추가나 수정이 빈번하다면 좋지 않다.

이를 해결하기 위해 자바에서는 가변성을 가지는 스트링버퍼/스트링빌더를 만듦.

동일 객체 내에서 문자열을 변경하는 가능하다.

https://ifuwanna.tistory.com/221

 

 

MVC에 대해서 설명해주세요. *

  • MVC란 Model View Controller의 약자이다.
  • MVC는 소프트웨어가 서비스하는 방식에 대한 패턴을 지칭한다.
  • MVC는 어떤 프로임워크나 라이브러리를 지칭하는 것이 아니다.
  • MVC는 서비스하는 방식에 대한 하나의 아이디어 디자인 패턴이다.

 

 

 

 

JPA에서 Entity를 설계할때 주의점을 말해주세요. *

  • 일대다, 다대일 양방향 관계에서는 외래키가 있는(1:N에서 N 부분) 엔터티를 주인으로 정하는 것이 좋다. 연관관계의 주인쪽의 값을 세팅해야 값이 변경된다.
  • 일대다에서 일 부분에 있는 mappedBy는 단순히 읽기만 하는 역할(즉, 단순 조회용)이며, 연관관계의 주인쪽에 세팅을 해야 값이 변경된다.

 

 

 

 

Refresh Token을 사용했을 때 보안에 어떤 점이 좋은지? *

인증 토큰이 탈취당했을 떄, 그 인증 토큰의 유효기간 동안은 서버는 피해자와 탈취자를 구분할 수 없다. 즉 서버측에서는 이 토큰을 갖고있는 클라이언트가 본인이 맞는지 확인할 수 없는데, 이를 보완하기 위해 사용되는 것이 리프레쉬 토큰이다. 사용자 인증이 아닌 새로운 액세스 토큰을 생성하는 용도로만 사용된다. 

  • Access Token의 유효 기간을 짧게 설정한다.
  • Refresh Token의 유효 기간은 길게 설정한다.
  • 사용자는 Access Token과 Refresh Token을 둘 다 서버에 전송하여 전자로 인증하고 만료됐을 시 후자로 새로운 Access Token을 발급받는다.
  • 공격자는 Access Token을 탈취하더라도 짧은 유효 기간이 지나면 사용할 수 없다.
  • 정상적인 클라이언트는 유효 기간이 지나더라도 Refresh Token을 사용하여 새로운 Access Token을 생성, 사용할 수 있음.

 

https://velog.io/@park2348190/JWT%EC%97%90%EC%84%9C-Refresh-Token%EC%9D%80-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%9C%EA%B0%80

 

 

어떤 코드가 좋은 코드인가? *

재사용성이 높고, 요구 사항이 빈번하게 바뀌어도 쉽게 바꿀 수 있는 코드, 가독성이 좋은 코드

 

 

 

http VS 웹소켓 차이? *

http 통신은 클라이언트에서 서버로 요청을 보내고 서버가 응답하는 방식으로 통신이 이루어진다. 

소켓 통신이란 서버와 클라이언트 양방향 연결이 이루어지는 통신 

 

https://kotlinworld.com/75

 

HATEOAS 란 무엇인가? *

Hypermedia As The Engine Of Application State의 약자로, 기본적인 아이디어는 

하이퍼미디어를 애플리케이션의 상태를 관리하기 위한 메커니즘으로 사용한다는 것입니다.

 

 

 

즉시 로딩과 지연 로딩의 차이 *

즉시 로딩은 엔티티를 조회할 때, 연관된 엔티티도 조회.

지연로딩은 연관된 엔티티를 실제 사용할 때 조회.

 

 

 

WAS와 WS의 차이 *

정적인파일(html,js,이미지 파일 등)을 제공하기 위한 서버로, HTTP 프로토콜에 의해 제공

- 정적인 파일로만 처리 가능한 것은 WAS로 요청을 넘기지않고 바로 요청 처리

 

동적인 데이터를 제공하기 위한 서버, 웹서버에서 처리할 수 없는 동적인 정보를 처리하여 웹서버에 정적인 정보를 제공

- 일반적으로 웹서버의 기능을 내제하고 있어 웹 서버 없이도 서비스가 가능

 

 

 

아파치는 멀티 프로세스인가 멀티 쓰레드인가? *

기본적으로 멀티프로세스 (컴퓨터에서 연속적으로 실행되고 있는 프로그램)

프로세스는 메모리 영역을 독립적으로 할당받아 실행됩니다. 따라서 각 프로세스는 서로 영향을 미치지 않습니다.

아파치는 상황에 따라 멀티쓰레드 (프로세스 내에서 실행되는 여러 흐름의 단위)

쓰레드의 단점은 단점은 같은 프로세스내의 여러 스레드 중 1개가 문제가 생겼을 때 그프로세스 내의 모든 스레드가 영향을 받는다는 것입니다. 

 

https://phiz.kr/hosting/10076

 

 

 

톰캣은 멀티 프로세스인가 멀티 쓰레드인가? *

톰캣은 요청을 처리하기 위한 쓰레드 풀을 관리하고 있다. 그리고 요청이 오면 해당 쓰레드 풀에서 쓰레드를 꺼내 요청을 처리하도록 한다.

 

 

 

 

 

Call By Value와 Call By Reference 차이 *

Call by value(값에 의한 호출)

  • 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다.
  • 단점 : 복사를 하기 때문에 메모리가 사용량이 늘어난다.

Call by reference(참조에 의한 호출)

  • 장점 : 복사하지 않고 직접 참조를 하기에 빠르다.
  • 단점 : 직접 참조를 하기에 원래 값이 영향을 받는다.(리스크)

 

 

 

 

스프링 프레임워크의 특징은 무엇인가? *

스프링은 제어 반전(IoC : Inversion of Control)을 지원. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

스프링은 의존성 주입(DI : Dependency Injection)을 지원. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

 

출처: https://ooz.co.kr/170 [이러쿵저러쿵]

 

 

 

DI 가 뭔지 DI와 객체지향관점을 연결지어서 말하시오. *

유지보수가 쉬운 객체지향 프로그래밍을 위해서 의존성을 주입한다.

 

 

 

가비지컬렉터는 무엇인가? *

불필요한 메모리를 알아서 정리해주는 것. JVM은 이를 알아서처리해준다.

 

 

 

메모리에서 힙영역과 스택영역은 무엇인가? *

스택(stack) 영역

메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.

스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.

이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다.

스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다.

이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.

스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.

힙(heap) 영역

메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 ‘그리고 해야만 하는’ 메모리 영역입니다.

힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.

힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다

 

 

 

 

자바 메모리에서 메소드영역은 무엇을 하는지? *

JVM은 OS로부터 메모리를 나누어 관리한다. JVM이 뭔가를 실행하려면 바이트 코드들이 메모리에 저장되어있어야한다. 이 바이트 코드는 자바 컴파일러에 의해서 컴파일된 친구들이다. 이렇게 메서드 에어리어에 바이트 코드가 올라가는 것은 클래스 로딩이라고 한다.

 

 

자바의 최상위 부모클래스가 무엇인지? *

Object.

https://sjh836.tistory.com/144

 

 

직렬화(serialization)란? *

객체의 직렬화는 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서 스트림(송수신)이 가능하도록 하는 것을 의미한다. 

 

출처: https://weicomes.tistory.com/63 [25%]

 

 

 

final / finally / finalize() 차이는 무엇인가요? *

final은 사용되는 문맥에 따라 다르다.

변수에 적용하면 : 해당 변수의 값은 변경이 불가능해진다. 상수가 되기 때문

변수의 참조에 적용하면 : 참조 변수가 힙 내의 다른 객체를 가리키도록 변경할 수 없다.

 

메서드에 적용하면 : 해당 메서드를 상속받는 하위 클래스에서 오버라이딩 할 수 없다.(상속받는 하위 클래스에서도 변경이 되지 않아야 하는 메서드의 경우 final을 붙이면 된다.)

 

 

finally는 try-catch 블록 뒤에 둘 수 있는 선택적인 블록인데 try-catch문이 끝나기전에 항상 꼭 실행되어야하는 로직이 있을 경우 finally절에 두면된다.

 

 

finalize() 메서드는 java garbage collector가 더 이상의 참조가 존재하지 않는 객체를 발견한 순간 호출하는 메서드다. 즉 더이상 사용되지 않는 객체가 있을때 메모리 낭비를 막기 위해서 garbage collector가 이 객체를 없애버리는데 이때 해당객체의 finallize 메서드를 호출해서 없앤다.

 

출처https://wjheo.tistory.com/entry/final-finally-finalize-차이점 [우공공]

반응형