프로그래밍 언어란?
프로그래밍 언어는 소프트웨어나 웹 애플리케이션을 개발하기 위해 사용되는 문법과 규칙의 집합입니다. 예를 들어, Python, Java, JavaScript 등이 있습니다. 각 언어는 고유의 문법과 특성을 가지고 있으며, 이를 통해 개발자는 컴퓨터에게 특정 작업을 수행하도록 명령할 수 있습니다. 예를 들어, Python을 사용하여 데이터 분석을 수행하거나, Java를 사용하여 대규모 엔터프라이즈 애플리케이션을 개발할 수 있습니다.
JAVA란?
Java는 객체 지향 프로그래밍 언어로, 대규모 애플리케이션 개발에 주로 사용됩니다. 플랫폼 독립적인 언어로, 한 번 작성된 코드는 어디서든 실행할 수 있습니다.
예시:
- 은행 시스템: Java는 안정성과 보안성이 높아 금융 기관에서 널리 사용됩니다. 트랜잭션 관리, 데이터 보안, 실시간 처리와 같은 기능이 요구되는 환경에서 유용합니다.
- 전자 상거래 사이트: 대규모 전자 상거래 사이트는 높은 트래픽과 복잡한 비즈니스 로직을 처리해야 합니다. Java의 강력한 라이브러리와 프레임워크(Spring, Hibernate 등)는 이러한 요구사항을 충족시켜줍니다.
- 안드로이드 애플리케이션: Java는 안드로이드 애플리케이션 개발의 주요 언어로 사용됩니다. 안드로이드 운영체제는 Java 기반으로 작성되었으며, 다양한 기기에서 원활하게 실행됩니다.
- 대기업의 서버 애플리케이션: Java는 서버 측 애플리케이션에서 높은 성능과 확장성을 제공합니다. 대규모 데이터를 처리하고 여러 사용자가 동시에 접근하는 시스템에서 자주 사용됩니다.
Java는 강력한 라이브러리와 프레임워크를 제공하며, 안정성과 보안성이 높아 기업 환경에서 많이 사용됩니다. 또한, 플랫폼 독립성, 객체 지향 프로그래밍의 장점, 커뮤니티와 생태계의 풍부함이 Java를 선택하는 주요 이유 중 하나입니다.
컴파일러 (Compiler)란?
컴파일러는 소스 코드를 한꺼번에 기계어 또는 바이트코드로 변환하여 실행 파일을 생성하는 프로그램입니다. 예를 들어, C++과 같은 언어는 컴파일러를 사용합니다. 소스 코드를 컴파일하여 생성된 실행 파일은 빠르게 실행될 수 있지만, 코드 수정 후에는 다시 컴파일 과정을 거쳐야 합니다. 이는 처음에는 시간이 더 걸리지만, 실행 속도에서는 큰 이점을 제공합니다.
런타임 환경?
런타임 환경은 프로그램이 실행되는 동안 필요한 시스템 및 소프트웨어 환경을 의미합니다. 예를 들어, Java 프로그램은 JVM(Java Virtual Machine)이라는 런타임 환경에서 실행됩니다. 런타임 환경은 프로그램이 원활하게 실행되기 위해 필요한 모든 라이브러리, 메모리, CPU 등의 자원을 포함합니다.
JVM (Java Virtual Machine)?
JVM은 자바 프로그램을 실행할 수 있게 해주는 가상 머신입니다. 주요 역할은 다음과 같습니다:- 로드: JVM은 바이트코드를 메모리에 로드합니다.
- 검증: 바이트코드가 유효하고 자바의 보안 제약을 위반하지 않는지 확인합니다.
- 실행: 바이트코드를 해석하거나 기계어로 컴파일하여 실행합니다.
- 런타임 관리: 가비지 컬렉터를 통한 메모리 관리, 스레드 관리 등 런타임 자원을 관리합니다.
자바의 컴파일 과정?
- 소스 코드 작성: 자바 소스 코드는
.java파일에 작성됩니다. - 컴파일: 자바 컴파일러(
javac)가.java파일을 바이트코드가 포함된.class파일로 변환합니다. - 로딩: JVM이
.class파일을 로드합니다. - 실행: JVM이 로드된 바이트코드를 실행합니다.
자바의 데이터 타입?
- Primitive Type (기본형 타입): 직접 값을 저장하는 타입. 예:
int,float,char,boolean - Reference Type (참조형 타입): 객체의 주소를 저장하는 타입. 예:
String, 배열, 클래스
Call by Value와 Call by Reference?
Java에서 값 전달(Call by Value)과 참조 전달(Call by Reference)의 개념은 다음과 같습니다:
- Call by Value: 값을 복사하여 전달하는 방식. 자바에서는 기본 데이터 타입이 이에 해당합니다.
- 값을 복사하여 전달: 메서드 호출 시 인자로 전달되는 값을 복사하여 사용합니다. 따라서 메서드 내에서 값이 변경되어도 원래의 값에는 영향을 미치지 않습니다.
- 기본 데이터 타입: Java에서는 기본 데이터 타입(예: int, float, double, boolean 등)이 값으로 전달됩니다.
- Call by Reference: 참조를 전달하는 방식. 자바에서는 객체가 이에 해당합니다.
- 참조를 전달: 메서드 호출 시 인자로 객체의 참조(주소)를 전달합니다. 메서드 내에서 참조를 통해 객체의 상태를 변경하면 원래 객체에 영향을 미칩니다.
접근 제한자(Access Modifier)에 대해 설명해주세요?
자바에서 접근 제한자는 클래스, 메서드, 변수의 접근 범위를 설정합니다:
- private: 같은 클래스 내에서만 접근 가능.
- default: 같은 패키지 내에서만 접근 가능. 접근 제한자를 명시하지 않으면 적용.
- protected: 같은 패키지 내, 그리고 다른 패키지의 하위 클래스에서 접근 가능.
- public: 모든 클래스에서 접근 가능.
자바에서 제공하는 원시 타입과 각각의 바이트 크기?
- byte: 1바이트
- short: 2바이트
- int: 4바이트
- long: 8바이트
- float: 4바이트
- double: 8바이트
- char: 2바이트
- boolean: 자바 명세서에 명확히 정의되어 있지 않지만, 보통 1바이트로 간주
java class란?
Java 클래스는 객체 지향 프로그래밍에서 객체를 생성하기 위한 설계도 또는 청사진입니다. 클래스는 데이터(필드)와 행동(메서드)을 포함하며, 이를 통해 객체를 정의합니다. 클래스는 인스턴스화되어 객체를 생성할 수 있습니다. 예를 들어, Car라는 클래스는 자동차의 속성(예: 색상, 모델)과 행동(예: 주행, 정지)을 정의할 수 있습니다.
OOP란?
객체 지향 프로그래밍(OOP, Object-Oriented Programming)는 프로그램을 객체들의 상호작용으로 구성하여 소프트웨어를 설계하고 개발하는 방법론입니다. 주요 개념은 다음과 같습니다:
- 캡슐화(Encapsulation): 데이터를 보호하고 외부에서 직접 접근할 수 없도록 하는 것.
- 상속(Inheritance): 기존 클래스의 특성을 재사용하고 확장할 수 있는 메커니즘.
- 다형성(Polymorphism): 동일한 인터페이스를 사용하여 서로 다른 구현을 할 수 있게 하는 것.
- 추상화(Abstraction): 복잡한 시스템을 단순하게 표현하는 것.
- OOP의 목적은 코드의 재사용성, 확장성, 유지보수성을 향상시키는 것입니다.
생성자에 대해 설명하시오?
생성자는 객체가 생성될 때 호출되는 특별한 메서드입니다. 클래스 이름과 동일하며 반환 타입이 없습니다. 객체의 초기화를 담당하며, 디폴트 생성자와 사용자 정의 생성자가 있습니다.
Java의 메서드란? 왜 함수라고 하지 않는가?
Java에서 "메서드(Method)"라는 용어를 사용하는 이유는 객체 지향 프로그래밍(OOP)과 관련이 있습니다. 메서드는 특정 클래스에 속하는 기능 또는 동작을 정의하는 코드 블록을 의미합니다. 다음은 메서드와 함수의 차이점을 이해하기 위한 설명입니다.
메서드(Method):
- 클래스에 속함: 메서드는 특정 클래스에 속하며, 객체의 동작을 정의합니다.
- 인스턴스화: 메서드는 클래스의 인스턴스(객체)에서 호출됩니다. 예:
myObject.methodName(). - this 참조: 메서드는 클래스의 인스턴스 변수에 접근할 수 있으며,
this키워드를 통해 현재 객체를 참조할 수 있습니다. - 다형성: 메서드는 다형성(polymorphism)을 지원하여, 같은 이름의 메서드가 여러 클래스에서 서로 다른 방식으로 동작할 수 있습니다.
함수(Function):
- 독립적: 함수는 클래스에 속하지 않으며 독립적으로 존재할 수 있습니다.
- 클래스 없이 호출: 함수는 클래스의 인스턴스 없이 호출됩니다. 예:
functionName(). - 독립적 상태: 함수는 독립적으로 상태를 가지며, 일반적으로 다른 상태(클래스의 인스턴스 변수 등)에 의존하지 않습니다.
- 범용성: 함수는 특정 클래스에 속하지 않기 때문에 재사용성이 높습니다.
Java는 객체 지향 프로그래밍 언어로서, 객체의 상태와 동작을 캡슐화하는 클래스 개념을 따릅니다. 따라서 클래스의 동작을 정의하는 메서드라는 용어를 사용합니다. 반면, 함수는 클래스와 독립적으로 존재하는 절차적 또는 함수형 프로그래밍의 개념입니다.
예시:
public class Dog {
private String name;
// 생성자
public Dog(String name) {
this.name = name;
}
// 메서드
public void bark() {
System.out.println(name + " is barking!");
}
// 메인 메서드
public static void main(String[] args) {
Dog myDog = new Dog("Buddy");
myDog.bark(); // Buddy is barking!
}
}
new String()과 리터럴("")의 차이에 대해 설명하시오?
new String(): 새로운 String 객체를 힙 영역에 생성합니다.- 리터럴(""): String 상수 풀에서 객체를 생성하거나 기존 객체를 참조합니다.
String, StringBuffer, StringBuilder의 차이를 설명하시오?
- String: 불변(immutable) 객체로, 문자열을 변경할 수 없습니다.
- StringBuffer: 가변(mutable) 객체로, 멀티스레드 환경에서 안전합니다. 동기화(synchronized) 기능을 제공합니다.
- StringBuilder: 가변 객체로, 멀티스레드 환경에서 안전하지 않지만 성능이 우수합니다. 동기화를 제공하지 않습니다.
String 객체가 불변인 이유에 대해 아는대로 설명하시오?
String 객체가 불변인 이유는 다음과 같습니다:
- 문자열의 캐싱을 통한 성능 향상
- 해시코드의 캐싱으로
HashMap과 같은 컬렉션에서 성능 최적화 - 보안성 강화 (예: 문자열을 통한 네트워크 연결, 파일 경로 등이 변경되지 않도록)
static에 대해 설명하고 static을 사용하는 이유에 대해 설명하시오?
static 키워드는 클래스 레벨에서 사용되는 변수와 메서드를 정의합니다. 객체 인스턴스가 아니라 클래스 자체에 속하기 때문에 클래스 이름으로 접근할 수 있습니다. 주로 공통적으로 사용되는 값을 정의할 때 사용합니다.
static: 클래스 레벨에서 변수와 메서드를 정의할 때 사용됩니다. 객체 인스턴스가 아닌 클래스 자체에 속합니다. 클래스 이름으로 접근할 수 있으며, 공통으로 사용되는 값을 정의하거나 메서드를 만들 때 사용됩니다.
오버라이딩(Overriding)과 오버로딩?
- 오버라이딩 (Overriding): 상위 클래스의 메서드를 하위 클래스에서 재정의하는 것. 메서드의 시그니처(이름, 매개변수, 반환 타입)가 동일해야 합니다.
- 오버로딩 (Overloading): 같은 이름의 메서드를 매개변수의 타입이나 개수를 다르게 하여 여러 개 정의하는 것.
다형성이란?
다형성은 동일한 인터페이스나 상위 클래스 타입을 통해 다양한 객체를 다룰 수 있는 능력을 의미합니다. 이는 주로 오버라이딩과 인터페이스를 통해 구현됩니다.
Casting이란?
형 변환(Casting)은 데이터 타입을 다른 타입으로 변환하는 과정입니다. 자바에서는 주로 객체의 타입을 변환하는 데 사용됩니다.
- 업캐스팅 (Upcasting): 하위 클래스 타입을 상위 클래스 타입으로 변환.
- 다운캐스팅 (Downcasting): 상위 클래스 타입을 하위 클래스 타입으로 변환.
Wrapper Class란 무엇이며, Boxing과 UnBoxing은 무엇인지 ?
Wrapper Class: 기본 자료형을 객체로 다룰 수 있게 해주는 클래스입니다. 예: Integer, Double, Character.
Boxing: 기본 자료형을 Wrapper 클래스 객체로 변환하는 과정입니다. 예: int -> Integer.
UnBoxing: Wrapper 클래스 객체를 기본 자료형으로 변환하는 과정입니다. 예: Integer -> int.
상속이란?
상속은 하나의 클래스가 다른 클래스의 속성과 메서드를 물려받는 것입니다. 이를 통해 코드 재사용성을 높이고 계층 구조를 형성할 수 있습니다.
캡슐화란?
캡슐화는 객체의 상태를 외부에서 직접 접근하지 못하도록 하고, 대신 공개된 메서드를 통해서만 접근할 수 있도록 하는 원칙입니다. 이를 통해 데이터 보호와 객체의 무결성을 유지합니다.
추상클래스란 무엇인가?
추상 클래스는 인스턴스를 생성할 수 없는 클래스입니다. 하나 이상의 추상 메서드(구현되지 않은 메서드)를 포함할 수 있으며, 이를 상속받는 하위 클래스에서 구현해야 합니다.
인터페이스란?
인터페이스는 메서드의 시그니처만을 정의하고 실제 구현은 제공하지 않는 추상 타입입니다. 클래스가 여러 인터페이스를 구현할 수 있기 때문에 다중 상속의 효과를 제공합니다.
추상클래스와 인터페이스의 차이?
- 추상클래스: 부분적으로 구현된 메서드를 가질 수 있고, 단일 상속만 가능합니다.
- 인터페이스: 모든 메서드가 구현되지 않은 상태로 선언되며, 다중 구현이 가능합니다.
싱글톤 패턴 이란?
싱글톤 패턴은 클래스의 인스턴스가 하나만 생성되도록 보장하는 디자인 패턴입니다. 전역 접근을 제공하며, 자원의 효율적인 사용이 가능합니다. **대표적인 예:** 데이터베이스 연결 풀, 설정 파일 로더, 로깅 클래스 등에서 사용됩니다. 예를 들어, 데이터베이스 연결 풀은 애플리케이션에서 하나의 인스턴스를 사용하여 다수의 데이터베이스 연결을 관리합니다.자바 컬렉션?
자바 컬렉션 프레임워크는 객체 그룹을 저장하고 조작하는 데 사용되는 클래스와 인터페이스의 집합입니다. 주요 인터페이스는 다음과 같습니다:- List: 순서가 있는 요소의 집합 (예: ArrayList, LinkedList)
- Set: 중복을 허용하지 않는 요소의 집합 (예: HashSet, TreeSet)
- Map: 키-값 쌍의 집합 (예: HashMap, TreeMap)
- Queue: FIFO(First-In-First-Out) 방식으로 요소를 처리하는 집합 (예: LinkedList, PriorityQueue)
컬렉션 프레임워크에 대해서 설명하고 각각 List, Set, Map, Stack, Queue의 특징에 대해 설명하시오?
자바 컬렉션 프레임워크는 데이터의 그룹을 저장하고 조작하기 위한 표준화된 클래스와 인터페이스의 집합입니다. 주요 인터페이스는 다음과 같습니다:
- List: 순서가 있는 요소의 집합으로 중복을 허용합니다. 예: ArrayList, LinkedList.
- Set: 중복을 허용하지 않는 요소의 집합으로 순서가 없습니다. 예: HashSet, TreeSet.
- Map: 키-값 쌍으로 이루어진 집합으로 키는 중복을 허용하지 않습니다. 예: HashMap, TreeMap.
- Stack: LIFO(Last In First Out) 구조로, 나중에 삽입된 요소가 먼저 제거됩니다. 예: Stack.
- Queue: FIFO(First In First Out) 구조로, 먼저 삽입된 요소가 먼저 제거됩니다. 예: LinkedList, PriorityQueue.
Stack과 Queue?
- Stack: LIFO(Last In First Out) 구조로, 나중에 삽입된 요소가 먼저 제거됩니다. 주요 연산으로는
push,pop,peek등이 있습니다. - Queue: FIFO(First In First Out) 구조로, 먼저 삽입된 요소가 먼저 제거됩니다. 주요 연산으로는
enqueue,dequeue,peek등이 있습니다.
JDBC란?
JDBC(Java Database Connectivity)는 자바에서 데이터베이스와 연결하고 SQL 쿼리를 실행할 수 있도록 하는 API입니다. 다양한 데이터베이스에 대해 일관된 인터페이스를 제공합니다.
스레드란?
스레드(Thread)는 프로세스 내에서 실행되는 가장 작은 단위입니다. 하나의 프로세스는 여러 스레드를 가질 수 있으며, 각 스레드는 독립적으로 실행될 수 있습니다.
주요 특징:
- 경량 프로세스: 스레드는 경량 프로세스로, 동일한 프로세스 내에서 메모리와 자원을 공유합니다.
- 병렬 처리: 스레드를 사용하면 여러 작업을 동시에 수행할 수 있어 프로그램의 성능을 향상시킬 수 있습니다.
- 컨텍스트 스위칭: 스레드는 운영체제에 의해 관리되며, 필요에 따라 컨텍스트 스위칭을 통해 실행됩니다.
스레드 생성 방법:
- Thread 클래스 상속:
Thread클래스를 상속하여 새로운 스레드를 생성할 수 있습니다. public class MyThread extends Thread { public void run() { System.out.println("Thread is running"); } public static void main(String[] args) { MyThread t1 = new MyThread(); t1.start(); } }- Runnable 인터페이스 구현:
Runnable인터페이스를 구현하여 스레드를 생성할 수 있습니다. public class MyRunnable implements Runnable { public void run() { System.out.println("Thread is running"); } public static void main(String[] args) { MyRunnable runnable = new MyRunnable(); Thread t1 = new Thread(runnable); t1.start(); } }
이유 및 장점:
- 동시성: 여러 작업을 동시에 실행할 수 있어 응답성이 향상됩니다.
- 자원 공유: 동일한 프로세스 내에서 자원을 공유하여 효율적인 메모리 사용이 가능합니다.
- 백그라운드 작업: 긴 작업을 백그라운드에서 실행할 수 있어 메인 프로그램의 실행을 방해하지 않습니다.
- 주의점*:
- 동기화 문제: 여러 스레드가 공유 자원에 접근할 때는 동기화를 적절히 처리해야 합니다.
- 데드락: 잘못된 스레드 관리로 인해 데드락(교착 상태)이 발생할 수 있습니다.
- 복잡성 증가: 스레드를 적절히 관리하지 않으면 프로그램의 복잡성이 증가하고 디버깅이 어려워질 수 있습니다.
- 예시*:
public class Counter { private int count = 0; // 스레드에서 실행할 메서드 public synchronized void increment() { count++; } public int getCount() { return count; } public static void main(String[] args) { Counter counter = new Counter(); // Runnable 인터페이스를 사용하여 스레드 생성 Runnable task = () -> { for (int i = 0; i < 1000; i++) { counter.increment(); } }; // 두 개의 스레드 생성 Thread t1 = new Thread(task); Thread t2 = new Thread(task); // 스레드 시작 t1.start(); t2.start(); // 스레드가 모두 종료될 때까지 대기 try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } // 최종 카운트 출력 System.out.println("Final count: " + counter.getCount()); } }
멀티 프로세스와 멀티 쓰레드의 특징?
- 멀티 프로세스: 독립된 메모리 공간을 가지며, 하나의 프로세스가 종료되어도 다른 프로세스에 영향을 미치지 않습니다. 프로세스 간의 통신이 어렵고 비용이 많이 듭니다.
- 멀티 쓰레드: 하나의 프로세스 내에서 여러 쓰레드가 실행되어 메모리와 자원을 공유합니다. 쓰레드 간의 통신이 쉽고 효율적이지만, 하나의 쓰레드가 오류를 일으키면 전체 프로세스에 영향을 미칠 수 있습니다.
자바의 메모리 영역에 대해 설명하시오?
자바의 메모리 영역은 크게 네 가지로 나뉩니다:
- 메서드 영역 (Method Area): 클래스 로더에 의해 로드된 클래스 데이터(메타데이터), 클래스 변수, 상수 등이 저장됩니다.
- 힙 영역 (Heap Area): 객체와 배열이 동적으로 생성되는 영역입니다.
- 스택 영역 (Stack Area): 각 스레드마다 생성되며, 지역 변수와 메서드 호출 시 생성되는 스택 프레임이 저장됩니다.
- PC 레지스터 (PC Register): 현재 실행 중인 JVM 명령의 주소를 저장합니다.
- 네이티브 메서드 스택 (Native Method Stack): 자바 외부의 네이티브 메서드가 호출될 때 사용됩니다.
각 메모리 영역이 할당되는 시점은 언제인가요?
- 메서드 영역: 클래스가 처음 로드될 때.
- 힙 영역: 객체가 생성될 때.
- 스택 영역: 메서드가 호출될 때.
- PC 레지스터: 스레드가 생성될 때.
- 네이티브 메서드 스택: 네이티브 메서드가 호출될 때.
Synchronized에 대해 아는 대로 설명하시오?
synchronized 키워드는 여러 스레드가 동시에 접근할 수 없는 임계 영역을 정의합니다. 이를 통해 데이터의 일관성과 무결성을 보장합니다.
- 주요 특징*:
- 메서드 동기화: 메서드 선언에
synchronized를 추가하여 해당 메서드가 한 번에 하나의 스레드만 접근하도록 합니다. public synchronized void synchronizedMethod() { // 동기화된 메서드의 코드 }- 블록 동기화: 특정 코드 블록을
synchronized키워드로 감싸서 동기화할 수 있습니다. 주로 객체의 모니터 락을 사용합니다. public void synchronizedBlock() { synchronized(this) { // 동기화된 블록의 코드 } }- 클래스 락: 클래스의 모든 인스턴스가 공유하는 클래스 수준의 락을 사용할 수 있습니다. 주로
static메서드에서 사용됩니다. public static synchronized void synchronizedClassMethod() { // 동기화된 클래스 메서드의 코드 } public void anotherSynchronizedBlock() { synchronized(SomeClass.class) { // 동기화된 클래스 수준의 코드 블록 } }
이유 및 장점:
- 데이터 일관성: 여러 스레드가 동시에 접근하여 발생할 수 있는 데이터 불일치를 방지합니다.
- 상호 배제: 임계 영역 내에서 한 번에 하나의 스레드만 실행됨을 보장하여 스레드 간의 경쟁 조건을 방지합니다.
- 주의점*:
- 성능 저하: 과도한 동기화는 성능 저하를 초래할 수 있습니다.
- 데드락 위험: 잘못된 동기화는 데드락(교착 상태)을 유발할 수 있습니다.
- 예시*:
public class Counter { private int count = 0; // 동기화된 메서드 public synchronized void increment() { count++; } // 동기화된 블록 public void incrementWithBlock() { synchronized(this) { count++; } } public int getCount() { return count; } }
제네릭에 대해 설명하고 왜 사용하는지 이유를 설명하시오?
제네릭(Generic): 클래스나 메서드를 정의할 때 타입을 파라미터로 사용할 수 있게 하는 기능입니다. 타입 안정성을 높이고, 형변환을 줄이며, 코드 재사용성을 높이기 위해 사용합니다.
import java.util.ArrayList;
public class GenericExample {
public static void main(String[] args) {
// 제네릭을 사용하지 않은 경우
ArrayList list = new ArrayList();
list.add("Hello");
String str = (String) list.get(0); // 형변환 필요
System.out.println(str); // 출력: Hello
// 제네릭을 사용한 경우
ArrayList<String> genericList = new ArrayList<>();
genericList.add("World");
String genericStr = genericList.get(0); // 형변환 불필요
System.out.println(genericStr); // 출력: World
}
}
Inner Class(내부 클래스)의 장점에 대해 설명해주시오?
- 캡슐화: 내부 클래스는 외부 클래스의 멤버에 쉽게 접근할 수 있습니다.
- 코드의 논리적 그룹화: 관련 있는 코드를 하나의 클래스 안에 그룹화할 수 있습니다.
- 코드 가독성 향상: 코드의 가독성과 유지 보수성을 높일 수 있습니다.
Error와 Exception의 차이를 설명하시오?
- **Error:** 애플리케이션에서 복구할 수 없는 심각한 문제를 나타냅니다. 예: OutOfMemoryError, StackOverflowError. - **Exception:** 애플리케이션에서 복구할 수 있는 예외 상황을 나타냅니다. 예: IOException, NullPointerException.'신입 개발자 기술면접 준비' 카테고리의 다른 글
| [IT기술면접 준비] 인성면접 (0) | 2024.06.13 |
|---|---|
| [IT기술면접 준비] 머신러닝(Machine Learning) (0) | 2024.06.13 |
| [IT기술면접 준비] 웹 프로그래밍(Web Programing) (0) | 2024.05.26 |
| [IT기술면접 준비] 데이터베이스(Oracle) (0) | 2024.05.26 |