이 글에서는 자바의 객체지향 개념 중 심화 주제를 다룹니다.
추상 클래스, 인터페이스, 예외 처리, 컬렉션은 자바 실무 프로그래밍에서 자주 사용되는 핵심 기능입니다.
1. 추상화 (Abstraction)
1-1. 추상 클래스 (abstract class)
추상 클래스는 하나 이상의 추상 메서드(구현되지 않은 메서드)를 포함하는 클래스입니다. 공통 기능은 구현하고, 특수 기능은 하위 클래스에서 구현하도록 강제할 수 있습니다. 추상 클래스는 클래스 간의 공통적인 기능을 정의하고, 구체적인 구현은 자식 클래스에 맡깁니다.
abstract class Animal {
abstract void makeSound(); // 추상 메서드
void eat() {
System.out.println("먹는 중...");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("멍멍");
}
}
- 추상 클래스는 인스턴스를 직접 생성할 수 없습니다.
- 추상 메서드를 포함하고 있으며, 이를 상속받은 클래스는 반드시 해당 메서드를 구현해야 합니다.
- 일반 메서드도 포함할 수 있어 공통 동작을 정의할 수 있습니다.
예: 동물(Animal)은 소리를 내는 방식이 다르므로 makeSound()는 추상 메서드로, 먹는 방식은 동일하므로 eat()은 일반 메서드로 정의합니다.
1-2. 인터페이스 (interface)
인터페이스는 순수한 추상 메서드의 집합으로, 클래스가 반드시 구현해야 하는 동작(규칙)을 정의합니다. 클래스는 implements 키워드를 사용해 인터페이스를 구현합니다. 하나의 클래스가 여러 인터페이스를 구현할 수 있어, 다중 상속이 가능합니다.
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
class Duck implements Flyable, Swimmable {
@Override
public void fly() {
System.out.println("오리가 납니다");
}
@Override
public void swim() {
System.out.println("오리가 헤엄칩니다");
}
}
- 자바 8부터 default 메서드(구현 포함)와 static 메서드를 인터페이스에 선언할 수 있습니다.
- 인터페이스를 통해 느슨한 결합(Loosely Coupled) 구조를 만들 수 있습니다.
인터페이스는 설계의 핵심으로, 클래스가 어떤 기능을 제공할지를 명확히 정의할 수 있습니다.
2. 예외 처리 (Exception Handling)
예외(Exception)는 프로그램 실행 중 발생하는 비정상적인 상황입니다. 자바는 try-catch-finally 구조로 예외를 안전하게 처리하고, 프로그램이 중단되지 않도록 합니다.
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
} finally {
System.out.println("항상 실행됩니다");
}
- try: 예외가 발생할 수 있는 코드 블록
- catch: 특정 예외가 발생했을 때 실행할 코드
- finally: 예외 발생 여부와 관계없이 무조건 실행됨
2-1. 주요 예외 클래스
예외 종류설명
ArithmeticException | 수학적 계산 오류 (예: 0으로 나누기) |
NullPointerException | null 객체에 접근했을 때 |
ArrayIndexOutOfBoundsException | 배열 인덱스 초과 접근 시 |
ClassCastException | 잘못된 형변환 시 발생 |
IOException | 파일, 스트림 등 입출력 작업 오류 |
2-2. 예외 던지기
예외를 직접 발생시키거나, 상위 메서드로 전가할 수도 있습니다.
public void divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("0으로 나눌 수 없습니다");
}
System.out.println(a / b);
}
예외 처리는 프로그램의 안정성과 유지보수성을 높이는 중요한 기법입니다.
3. 컬렉션 프레임워크 (Collection Framework)
컬렉션은 데이터를 효율적으로 저장하고 관리할 수 있는 자료구조입니다. 배열보다 유연하고 다양한 기능을 제공합니다. 컬렉션은 List, Set, Map 인터페이스를 중심으로 구성됩니다.
3-1. List (순서 O, 중복 O)
순서가 유지되며, 동일한 값을 여러 개 저장할 수 있습니다. 대표 클래스: ArrayList, LinkedList
import java.util.ArrayList;
ArrayList<String> fruits = new ArrayList<>();
fruits.add("사과");
fruits.add("바나나");
System.out.println(fruits.get(0)); // 사과
3-2. Set (순서 X, 중복 X)
중복을 허용하지 않는 집합 형태입니다. 대표 클래스: HashSet, TreeSet
import java.util.HashSet;
HashSet<String> names = new HashSet<>();
names.add("철수");
names.add("철수"); // 중복 무시
System.out.println(names.size()); // 1
3-3. Map (Key-Value 쌍 저장)
고유한 key에 value를 매핑하여 저장합니다. 대표 클래스: HashMap, TreeMap
import java.util.HashMap;
HashMap<String, Integer> price = new HashMap<>();
price.put("콜라", 1500);
price.put("사이다", 1400);
System.out.println(price.get("콜라")); // 1500
3-4. 반복문과 함께 사용
컬렉션은 향상된 for문과 함께 자주 사용됩니다.
for (String fruit : fruits) {
System.out.println(fruit);
}
컬렉션은 실무에서 데이터를 저장, 탐색, 수정, 삭제할 때 매우 자주 사용됩니다. 상황에 맞는 컬렉션 구조 선택이 중요합니다.
'KT에이블스쿨 7기' 카테고리의 다른 글
[KT AIVLE School 7기] Spring Framework(2) (0) | 2025.06.24 |
---|---|
[KT AIVLE School 7기] Spring Framework (0) | 2025.06.24 |
[KT AIVLE School 7기] 객체지향 프로그래밍 기초: 클래스와 상속 이해 (0) | 2025.05.26 |
[KT AIVLE School 7기] 2차 미니프로젝트 후기 (0) | 2025.05.26 |
[KT AIVLE School 7기] LangChain 기초 (0) | 2025.05.26 |