subindev 님의 블로그

Java #1 본문

기술 면접 준비

Java #1

subindev 2025. 1. 10. 17:43

Q. Java의 장점은 어떤 것들이 있나요?

제가 사용해보면서 느낀 Java의 가장 큰 장점은 코드의 재사용성이 높다는 것입니다.
어떠한 기능을 수행하는 클래스를 만들어두고, 필요할 때마다 호출해서 사용하면 코드도 간결해지고
같은 코드를 여러 번 작성해야 하는 수고가 덜어져서 편리하다고 생각했습니다.

Q. 객체 지향 프로그래밍에 대해 설명해 주세요.

객체 지향 프로그래밍이란 객체와 객체 간의 관계를 형성하거나 
상호작용시킴으로써 프로그램을 구현하는 방법론입니다.
-
객체란 상태와 속성을 갖는 구체적인 개체입니다.

Q. SOLID 원칙에 대해 설명해 주세요.

S
하나의 클래스는 하나의 책임만을 가져야 합니다.
O
클래스는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 합니다.
L
상위 타입의 객체를 하위 타입으로 치환해도 프로그램은 일관성을 유지해야 합니다.
I
클래스는 자신이 사용하지 않는 인터페이스의 영향을 받지 않아야 합니다.
D
상위 모듈은 하위 모듈에 의존해선 안되고, 하위 모듈이 상위 모듈에 의존해야 합니다.

Q. 메서드 오버라이딩과 메서드 오버로딩에 대해 설명해 주세요.

메서드 오버라이딩은 부모 클래스의 메서드를 자식 클래스가 재정의해서 사용하는 것입니다.
메서드 오버로딩은 같은 이름의 메서드가 서로 다른 매개변수들을 갖도록 여러 번 선언해서 
사용하는 것입니다. 

Q. 다형성에 대해 설명해 주세요.

다형성은 하나의 타입에 여러 객체를 대입할 수 있게 해서 다양한 형태로 동작하게 하는 것입니다.
자료형을 다양한 형태로 바라봄으로써, 같은 코드에서 여러 실행 결과가 나타날 수 있게 합니다.
-
다형성을 활용한 사례
제 첫 팀프로젝트인 1945 게임 구현 프로젝트에서, 각 적군 유닛들을 instanceof라는 연산자를 
활용해서 유닛별로 총알 피격 범위를 다르게 판정하는 방식으로 활용한 경험이 있습니다.

Q. 상속에 대해 설명해 주세요.

상속이란, 부모 클래스의 멤버변수나 메서드를 자식 클래스가 물려 받을 수 있게 하는 것입니다.
상속을 활용하면 부모 클래스의 기능을 유지하면서 새로운 기능을 추가하는 방식으로 기능을 
확장할 수 있습니다.

Q. 업 캐스팅과 다운 캐스팅에 대해 설명해 주세요.

업 캐스팅이란, 다형성을 통해 자식 클래스를 부모 클래스 타입으로도 바라볼 수 있다는 것을 
활용해서 자식 클래스의 생성자로 부모 클래스 타입의 변수를 생성하는 것입니다.

다운 캐스팅이란, 부모 클래스의 참조를 자식 클래스의 참조로 변환하는 것입니다. 
업 캐스팅된 경우 자식 클래스의 멤버변수나 메서드에 접근할 수 없기 때문에
자식 클래스로 다운 캐스팅해서 사용합니다.

Q. 인터페이스에 대해 설명해 주세요.

인터페이스는 기능을 명시적으로 선언하는 설계도이자, 강제성이 있는 약속입니다.
해당 인터페이스를 구현하는 클래스가 어떤 메서드를 반드시 구현해야 하는지를 지시합니다.
멤버변수를 가질 수 없고 상수만 가질 수 있으며, 일반적으로 추상 메서드만 가질 수 있습니다.
-
추상 메서드로 정의한 경우에는 해당 클래스에서 사용하지 않을 메서드도 반드시 재정의해야 하는데
필요한 경우에만 해당 메서드를 구현해서 사용하도록 하려면 default 키워드를 추가하면 됩니다.

Q. 가비지 컬렉션에 대해 설명해 주세요.

가비지 컬렉션은 Java의 메모리 관리를 자동화하는 역할을 합니다.
가비지 컬렉션의 존재 덕분에 개발자는 객체의 메모리 해제에는 신경쓰지 않고
객체의 생성에만 집중할 수 있습니다.
하지만 메모리가 해제되는 시점을 정확히 예측할 수 없다는 문제가 있습니다.

Q. 자료 구조에 대해 설명해 주세요.

자료 구조는 많은 데이터들을 메모리 상에서 효율적으로 관리하는 구현 방법입니다.
자료의 효율적인 관리는 프로그램의 수행 속도와 밀접한 관련이 있기 때문에,
프로그램에 맞는 최적의 자료 구조를 활용하는 것이 중요합니다.
대표적인 자료 구조로 배열이 있습니다.

Q. 컬렉션 프레임워크에 대해 설명해 주세요.

컬렉션 프레임워크는 데이터를 표현하고 조작하는 데 사용되는 클래스와 인터페이스의 집합입니다.
제가 배운 대표적인 인터페이스로는 List, Map, Set이 있습니다.
List는 순서가 있는 데이터들을 저장하는 것입니다.
그리고 Map은 키와 값의 쌍으로 이뤄진 데이터들을 저장하는 것입니다.
마지막으로 Set은 주머니에 물건들을 담듯이 순서가 없는 데이터들을 저장하는 것입니다.

Q. JVM에 대해 설명해 주세요.

JVM은 자바 가상 머신의 약자이며, 컴파일러에 의해 변환된 .class 파일을 운영체제에 특화된 
코드로 변환하여 실행하는 역할을 하는 가상의 실행 환경입니다.
JVM 덕분에 한 번 작성된 Java 코드는 어떤 플랫폼에서든 실행 가능하다는 장점이 있습니다.

Q. JVM의 단점은?

실행속도 느림
메모리 이슈

Q. JRE란?

Java Runtime Environment
-
자바 애플리케이션을 실행하는 데 필요한 소프트웨어 구성 요소들

Q. JDK란?

Java Development Kit
-
자바 프로그램을 개발, 컴파일, 디버깅, 실행하기 위한 환경 및 도구

Q. 웹 컨테이너, 웹 서버, WAS에 대해 설명해 주세요.

웹 컨테이너는 JSP와 서블릿이 실행될 수 있는 환경을 제공하는 컴포넌트입니다.
서블릿을 찾아서 실행하고, 서블릿으로부터 결과를 받아 클라이언트에게 전달합니다.

웹 서버는 클라이언트에서 전송된 HTTP 메시지를 다루는 서버입니다.
정적 리소스 요청만 처리할 수 있습니다.

WAS (웹 애플리케이션 서버)는 웹 서버가 처리하지 못하는 동적 리소스 요청을 처리해서
동적인 컨텐츠를 제공하는 서버입니다.

Q. 디자인 패턴에 대해 설명해 보세요.

디자인 패턴은 공통적으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴입니다.
개발자 간 소통이 원활해지고, 구조 파악이 용이하다는 등의 장점이 있습니다.
-
생성 구조 행위

Q. 제네릭 프로그래밍에 대해 설명해 보세요.

제네릭 프로그래밍은 다양한 자료형이 적용될 수 있는 클래스를 만드는 것입니다.
변수의 이름과 기능이 동일하면서, 자료형만 달라지는 변수들을 사용할 때 고려할 수 있습니다.

Q. 람다 표현식에 대해 설명해 보세요.

컴파일러가 데이터 타입을 추론할 수 있다는 점을 이용해서, 코드를 간소화하는 방법입니다.

Q. 함수형 프로그래밍

함수를 기반으로 하는 프로그래밍 방식
매개변수로 전달받는 입력 외에 외부 자료를 사용하지 않음

Q. 변수에 대해 설명해 보세요.

변수는 값을 저장할 수 있는 메모리 공간입니다.

Q. 클래스와 객체에 대해 설명해 보세요.

클래스는 객체를 정의하는 설계도이고,
객체는 클래스를 기반으로 실제 메모리에 생성된 구체적인 대상입니다.

Q. 빌더 패턴에 대해 설명해 보세요. (+ 롬복 ? 원형 ?)

빌더 패턴은 객체를 생성하는 클래스와 객체를 표현하는 클래스를 분리하는 디자인 패턴입니다.
멤버변수가 많은 객체를 다룰 때 빌더 패턴을 사용해서 코드의 가독성을 높이고 실수를 방지했습니다.
-
처음 배울 때에는 원형으로 만드는 법을 배웠었고, 스프링부트를 사용하게 된 후부터는
롬복으로 사용했습니다.

Q. 싱글톤 패턴과 프로토타입 패턴에 대해 설명해 보세요.

싱글톤 패턴은 프로그램 내에서 해당 클래스의 객체가 단 하나만 생성되도록 하는 패턴입니다.
-
프로토타입 패턴은 원본 객체를 새로운 객체에 복사하고, 필요에 따라 수정해서 사용하는 
패턴입니다.

Q. 어댑터 패턴에 대해 설명해 보세요.

어댑터 패턴은 호환되지 않는 클래스들을 함께 이용할 수 있도록 중간에서 맞춰주는 역할을
하는 인터페이스를 생성해서 사용하는 패턴입니다.

Q. final 변수와 static 변수의 차이에 대해 설명해 보세요.

final 키워드는 변하지 않는 값을 저장하는 상수를 선언할 때 사용합니다.
-
static 키워드는 해당 클래스를 기반으로 만들어진 여러 객체들이 공유하는 하나의 변수가
필요할 때 사용합니다.

Q. 자료형에 대해 설명해 보세요.

자료형은 기본 자료형과 참조 자료형으로 나눠지고,
기본 자료형은 정수형, 실수형, 문자형, 논리형으로 나눠집니다.

Q. Call by Value와 Call by Reference의 차이에 대해 설명해 보세요.

call by value는 값을 할당할 때 값 자체를 넘겨주는 방식입니다.
call by reference는 값이 담긴 변수의 주솟값을 넘겨주는 방식입니다.

Q. 깊은 복사와 얕은 복사의 차이에 대해 설명해 보세요.

얕은 복사는 객체의 주솟값을 복사
깊은 복사는 객체의 실제 값을 복사

Q. 자료 구조에서 스택과 큐의 차이에 대해 설명해 보세요.

스택은 가장 나중에 입력된 자료가 가장 먼저 출력되는 자료 구조이고,
큐는 가장 먼저 입력된 자료가 가장 먼저 출력되는 자료 구조입니다.

Q. 스택 오버플로우에 대해 설명해 보세요.

스택형 자료 구조에서 오버플로우가 발생하는 것을 말합니다.
오버플로우란 저장 용량을 초과하는 양의 데이터가 입력되었을 때 발생하는 현상입니다.
이는 기존 자료 중 일부가 지워지는 문제를 일으킬 수 있습니다.

Q. 프로세스와 쓰레드의 차이에 대해 설명해 보세요.

프로세스는 메모리를 할당받아 실행되고 있는 프로그램이고,
쓰레드는 하나의 프로세스 안에서 실제 작업을 수행하는 작업 단위입니다.

Q. 멀티 쓰레드에 대해 설명해 보세요.

멀티 쓰레드는 여러 쓰레드가 수행되는 프로그래밍 환경을 말합니다.
여러 작업이 동시에 실행되는 효과를 얻을 수 있습니다.

Q. 인터페이스와 abstract class의 차이에 대해 설명해 보세요.

abstract class는 추상 클래스라고 불리며, 하나 이상의 추상 메서드를 포함하거나 abstract
키워드를 가진 클래스입니다.
추상 클래스는 추상 메서드가 아닌 메서드도 가질 수 있으나,
인터페이스는 추상 메서드만 가질 수 있다는 차이가 있습니다. 

Q. 배열과 리스트의 차이

배열은 선언 시에 크기 지정 (정해진 크기의 메모리를 먼저 할당받아 사용)
-
리스트는 선언 시에 크기를 지정하지 않아, 요소를 유연하게 관리할 때 사용

Q. 암호화 처리에 대해 설명해 보세요.

데이터의 무결성/기밀성 확보를 위해 정보를 쉽게 해독할 수 없는 형태로 변환하는 기법
프로젝트에서는 회원가입 및 로그인 처리를 할 때 활용했습니다.

Q. 암호화 방식

대칭 키 암호 방식 (비밀 키 암호 방식)
암호화와 복호화에 같은 암호 키를 사용하는 방식
-
비대칭 키 암호 방식 (공개 키 암호 방식)
누구나 알 수 있는 공개 키로 암호화된 메시지를
키의 소유자만 알 수 있는 비밀 키로 복호화해서 안전하게 통신하는 방식

Q. PKI

PKI (Public Key Infrastructure, 공개 키 기반 구조)
공개 키 암호 방식 기반의 전자서명된 인증서를 발급받아서 네트워크 상에서
안전하게 통신이 가능하도록 하는 기술
-
전자서명
서명자를 확인하고, 서명자가 해당 전자문서에 서명했다는 사실을 나타내는 정보

Q. hash 알고리즘

값을 특수한 문자열로 암호화하는 단방향 암호화 알고리즘입니다.
단방향이기 때문에 암호화되고 나면 복호화할 수 없습니다.

Q. HashMap

HashMap은 컬렉션 프레임워크에 속하는, key와 value의 쌍으로 자료 구조를 구현한 
클래스입니다.

Q. 접근 제어 지시자의 차이에 대해 설명해 보세요.

클래스 외부로부터의 접근 권한을 부여하는 명령어
-
public : 같은 프로젝트 내 어디에서든지 접근 가능
protected : 같은 패키지 내부거나, 다른 패키지라도 상속 관계라면 접근 가능
default : 같은 패키지 내부에서만 접근 가능
private : 같은 클래스 내부에서만 접근 가능

Q. 캡슐화란?

객체의 데이터를 외부에서 직접 접근할 수 없도록 숨기고, 함수를 통해서만 접근 가능하게 함

Q. 추상화란?

클래스를 정의할 때, 불필요한 부분을 생략하고 객체의 속성 중 중요한 것들에만 중점을 두어
개략화하는 것입니다.

Q. 생성자, GETTER, SETTER 메서드 손 코딩

public class 클래스명 {

	// 기본 생성자
	public 클래스명() {}
	
	// 사용자 정의 생성자
	public 클래스명(자료형 매개변수1, 자료형 매개변수2, ...) {
		this.멤버변수1 = 매개변수1;
		this.멤버변수2 = 매개변수2;
		...
	}

	// getter
	public 반환자료형 get변수() {
		return this.멤버변수;
	}

	// setter
	public void set변수(자료형 매개변수) {
		this.멤버변수 = 매개변수;
	}	

}

Q. TCP와 UDP

네트워크 7계층 중 전송 계층의 프로토콜
-
TCP (전송 제어 프로토콜)
신뢰성 있는 통신
데이터가 올바르게, 누락되지 않고 순서대로 수신되도록 보장함
연결 지향 (컴퓨터가 먼저 연결을 설정한 후 통신)
-
UDP (사용자 데이터그램 프로토콜)
무연결 (통신 전에 연결이 설정되지 않음)
수신자 측이 데이터가 수신되었는지 여부를 신경쓰지 않음
따라서 TCP보다 신뢰성이 떨어지지만, 전송 속도가 빠름

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

Spring #1  (0) 2025.01.10