1. 자바에서 객체 지향 프로그래밍(OOP)의 주요 특징
자바는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)을 지원하는 언어이다. 객체 지향 프로그래밍의 주요 특징은 다음과 같다:
- 캡슐화(Encapsulation): 데이터와 그 데이터를 처리하는 메서드를 하나로 묶는 개념이다. 객체 내부의 상태는 직접 접근할 수 없고, 외부에서 접근할 때는 메서드를 통해서만 이루어진다. 이를 통해 객체의 상태를 보호하고, 불필요한 외부 간섭을 차단할 수 있다.
- 상속(Inheritance): 부모 클래스의 속성과 메서드를 자식 클래스가 상속받아 사용할 수 있게 해주는 개념이다. 이를 통해 코드 재사용성과 유지보수성이 향상된다. 상속을 사용하면 계층적인 구조를 만들 수 있으며, 다형성과 결합해 더욱 유연한 코드 작성을 가능하게 한다.
- 다형성(Polymorphism): 동일한 메시지나 메서드를 호출하더라도 객체의 타입에 따라 다른 동작을 하도록 만드는 기능이다. 다형성은 메서드 오버로딩과 오버라이딩을 통해 구현된다. 이를 통해 코드가 더욱 유연하고 확장 가능한 구조가 된다.
- 추상화(Abstraction): 복잡한 시스템을 단순화하여 중요한 부분만을 드러내는 개념이다. 자바에서는 추상 클래스나 인터페이스를 통해 구현되며, 세부 구현을 숨기고 필요한 기능만 제공하여 시스템을 단순화하고, 코드의 관리성을 높인다.
이 네 가지 특징은 객체 지향 프로그래밍에서 매우 중요한 개념들로, 자바의 클래스 기반 설계에서 모든 기능을 가능하게 하는 핵심이다.
2. 자바에서 자료형(Primitive Data Type)과 참조형(Reference Type)의 차이
자바의 데이터 타입은 크게 **기본 자료형(Primitive Type)**과 **참조 자료형(Reference Type)**으로 구분된다.
- 기본 자료형(Primitive Type): 자바에서 제공하는 8개의 기본형 자료형으로, 값을 직접 저장한다. 기본 자료형은 메모리 상에 데이터를 직접 할당하므로 연산이 빠르다.
- 예: int, char, double, boolean 등
- 참조 자료형(Reference Type): 객체나 배열과 같은 참조형 데이터를 저장하며, 실제 값은 객체가 저장된 메모리 주소를 참조한다. 참조형은 크기가 일정하지 않고, 동적으로 크기가 변할 수 있다.
- 예: String, Array, Class 등
기본 자료형은 스택(stack) 메모리에 저장되지만, 참조형은 힙(heap) 메모리에 저장된다. 따라서 참조형은 객체의 주소를 저장하고, 객체의 상태를 변경할 수 있는 특징이 있다.
3. 자바에서의 예외 처리(Exception Handling)
자바에서는 프로그램 실행 중 발생할 수 있는 오류나 예외를 처리하는 방법으로 예외 처리(Exception Handling)를 사용한다. 예외는 프로그램이 예기치 않게 종료되지 않도록 해준다.
- 예외(Exception): 프로그램이 실행되는 중에 발생하는 예기치 못한 상황이나 오류로, 예외가 발생하면 프로그램은 중단되며 예외를 처리해야만 정상 실행이 계속된다.
- try-catch 구문: 예외가 발생할 가능성이 있는 코드를 try 블록에 넣고, 발생한 예외를 catch 블록에서 처리한다. 예외를 처리하고 나면 프로그램은 계속해서 실행된다.
- 예시:
- finally 구문: 예외가 발생하든 발생하지 않든 항상 실행되는 코드 블록으로, 자원 해제나 종료 작업을 수행하는 데 사용된다.
java복사편집try { // 코드 실행 } catch (Exception e) { // 예외 처리 } finally { // 자원 해제 등의 작업 }
- 예시:
try {
int result = 10 / 0; // ArithmeticException 발생
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
}
자바에서는 throw와 throws 키워드를 사용하여 예외를 발생시키거나 예외를 메서드 선언부에 전달할 수 있다. 예외 처리는 프로그램의 안정성을 높이고, 예기치 못한 오류를 효과적으로 처리할 수 있게 도와준다.
4. 자바의 final, finally, finalize 키워드 차이
자바에서 final, finally, finalize는 비슷한 이름을 가지고 있지만, 각각의 역할이 다르다.
- final: 변수, 메서드, 클래스에 사용할 수 있는 키워드로, 특정 항목의 변경을 금지한다.
- 변수: 값을 한 번만 할당할 수 있는 상수로 만든다.
- 메서드: 오버라이딩을 금지한다.
- 클래스: 상속을 금지한다.
- finally: 예외 처리에서 try-catch 블록과 함께 사용되며, 예외가 발생하든 발생하지 않든 항상 실행되는 코드 블록이다. 주로 자원 해제, 파일 닫기 등 종료 작업을 처리할 때 사용된다.
- finalize: 객체가 가비지 컬렉터에 의해 수거되기 전에 호출되는 메서드로, 자원을 해제하거나 종료 작업을 수행하는 데 사용된다. 하지만, 이 메서드는 자주 사용되지 않으며, try-with-resources 구문을 통한 자원 관리가 더 권장된다.
5. 자바의 static 키워드
static은 클래스의 인스턴스와는 별개로, 클래스 자체에 속하는 멤버를 정의할 때 사용한다. static이 붙은 변수나 메서드는 클래스 레벨에서 공유되므로 객체를 생성하지 않고도 접근할 수 있다.
- static 변수: 클래스가 메모리에 로딩될 때 초기화되며, 모든 객체가 동일한 값을 공유한다.
- static 메서드: 인스턴스 객체 없이 클래스명으로 직접 호출할 수 있다. static 메서드는 인스턴스 변수나 메서드에 접근할 수 없다.
- static 블록: 클래스가 로드될 때 한 번만 실행되는 블록이다. 주로 클래스 초기화 작업을 수행할 때 사용된다.
예시:
public class MyClass {
static int counter = 0;
public static void increment() {
counter++;
}
}
static은 메모리 절약과 성능 개선을 위해 적절히 사용해야 하며, 과도하게 사용하면 프로그램의 유연성과 확장성을 떨어뜨릴 수 있다.
섹션2. 자바 고급개념 면접 질문 정리 ↓
면접에서 진짜 자주 나오는 자바 질문 - 섹션 2. 자바 고급 개념
1. static 키워드의 의미와 활용static은 클래스 수준의 메모리 영역에 할당되며, 객체 생성 없이 접근 가능하다. 정적 변수, 정적 메서드 정의 시 사용된다.static 변수: 클래스 로딩 시 메모리에 1회
biesil.tistory.com
'Programming > Java' 카테고리의 다른 글
면접에서 진짜 자주 나오는 자바 질문 - 섹션 3. 자바 동시성 및 멀티스레딩 (0) | 2025.04.17 |
---|---|
면접에서 진짜 자주 나오는 자바 질문 - 섹션 2. 자바 고급 개념 (0) | 2025.04.17 |
쓰레드 풀(Thread Pool)의 개념과 최적화 방법 (1) | 2025.04.15 |
JAVA 데드락(Deadlock)과 이를 방지하는 방법 (교착상태) (0) | 2025.04.15 |
JAVA synchronized 키워드와 ReentrantLock의 차이점 (멀티스레딩) (0) | 2025.04.15 |