IT 강좌(IT Lectures)/Java

4강. 기본 클래스 사용

소울입니다 2024. 6. 21. 08:30
728x90
반응형

챕터 4: 기본 클래스 사용


Java는 다양한 기본 클래스를 제공하여 프로그래밍을 보다 효율적이고 편리하게 합니다. 이 장에서는 문자열 처리, 배열 및 컬렉션 프레임워크, 그리고 예외 처리에 대해 다룹니다.

4.1 문자열 처리

문자열 처리는 Java 프로그래밍에서 매우 중요합니다. Java는 문자열을 처리하기 위한 다양한 클래스를 제공합니다.

 

4.1.1 String 클래스와 문자열 조작 메서드

String 클래스는 불변(immutable) 문자열을 나타냅니다.

 

예제: String 클래스와 주요 메서드

public class StringExample {
    public static void main(String[] args) {
        String message = "Hello, World!";

        // 문자열 길이
        System.out.println("Length: " + message.length());

        // 특정 문자 접근
        System.out.println("Character at index 1: " + message.charAt(1));

        // 부분 문자열 추출
        System.out.println("Substring from index 7 to 12: " + message.substring(7, 12));

        // 문자열 대체
        System.out.println("Replace 'World' with 'Java': " + message.replace("World", "Java"));

        // 문자열 분할
        String[] words = message.split(", ");
        System.out.println("First word: " + words[0]);
        System.out.println("Second word: " + words[1]);
    }
}
 

설명:

  • length 메서드: 문자열의 길이를 반환합니다.
  • charAt 메서드: 문자열의 특정 인덱스에 있는 문자를 반환합니다.
  • substring 메서드: 문자열의 부분 문자열을 추출합니다.
  • replace 메서드: 문자열의 특정 부분을 다른 문자열로 대체합니다.
  • split 메서드: 문자열을 주어진 구분자를 기준으로 분할하여 배열로 반환합니다.

4.1.2 StringBuilder와 StringBuffer의 차이점 및 활용

StringBuilder와 StringBuffer는 가변(mutable) 문자열을 나타냅니다. StringBuffer는 스레드 안전하지만, StringBuilder는 스레드 안전하지 않습니다.

 

예제: StringBuilder 사용

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");

        // 문자열 추가
        sb.append(", World!");

        // 문자열 삽입
        sb.insert(5, " Java");

        // 문자열 삭제
        sb.delete(5, 10);

        // 문자열 역순
        sb.reverse();

        System.out.println(sb.toString());  // 출력: !dlroW ,olleH
    }
}
 

설명:

  • append 메서드: 문자열을 추가합니다.
  • insert 메서드: 특정 위치에 문자열을 삽입합니다.
  • delete 메서드: 특정 범위의 문자열을 삭제합니다.
  • reverse 메서드: 문자열을 역순으로 만듭니다.

4.2 배열과 컬렉션 프레임워크

배열과 컬렉션 프레임워크는 데이터를 저장하고 관리하는 기본적인 방법을 제공합니다.

 

4.2.1 배열 선언 및 초기화

배열은 동일한 데이터 타입의 값들을 저장할 수 있는 자료 구조입니다.

 

예제: 배열 선언 및 초기화

public class ArrayExample {
    public static void main(String[] args) {
        // 배열 선언 및 초기화
        int[] numbers = {1, 2, 3, 4, 5};

        // 배열 요소 출력
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("numbers[" + i + "] = " + numbers[i]);
        }
    }
}
 

설명:

  • 배열 선언 및 초기화: int[] numbers = {1, 2, 3, 4, 5};는 정수형 배열을 선언하고 초기화합니다.
  • 배열 요소 접근: 배열의 각 요소에 접근하려면 인덱스를 사용합니다. 배열의 인덱스는 0부터 시작합니다.
  • numbers.length: 배열의 길이를 반환합니다.

4.2.2 주요 컬렉션(List, Set, Map)과 그 활용 방법

컬렉션 프레임워크는 다양한 데이터 구조를 제공하여 데이터를 효율적으로 관리할 수 있게 합니다.

 

예제: List 인터페이스

import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        // List 선언 및 초기화
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // List 요소 출력
        for (String fruit : list) {
            System.out.println(fruit);
        }
    }
}
 

설명:

  • List 인터페이스: 순서가 있는 데이터의 집합을 나타냅니다.
  • ArrayList 클래스: List 인터페이스를 구현한 가변 크기 배열입니다.
  • add 메서드: 리스트에 요소를 추가합니다.

예제: Set 인터페이스

import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        // Set 선언 및 초기화
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Cherry");
        set.add("Apple");  // 중복된 요소 추가 시도

        // Set 요소 출력
        for (String fruit : set) {
            System.out.println(fruit);
        }
    }
}
 

설명:

  • Set 인터페이스: 중복되지 않은 요소의 집합을 나타냅니다.
  • HashSet 클래스: Set 인터페이스를 구현한 해시 테이블 기반의 집합입니다.
  • 중복 요소 추가 불가: Set은 중복된 요소를 허용하지 않습니다.

예제: Map 인터페이스

import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        // Map 선언 및 초기화
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);

        // Map 요소 출력
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}
 

설명:

  • Map 인터페이스: 키와 값의 쌍으로 이루어진 데이터를 저장하는 구조입니다.
  • HashMap 클래스: Map 인터페이스를 구현한 해시 테이블 기반의 맵입니다.
  • put 메서드: 맵에 키와 값을 추가합니다.
  • entrySet 메서드: 맵의 키-값 쌍을 Set 형태로 반환합니다.

4.3 예외 처리

예외 처리(Exception Handling)는 프로그램 실행 중에 발생하는 오류 상황을 처리하는 방법입니다.

 

4.3.1 예외의 종류 (Checked, Unchecked)

  • Checked 예외: 컴파일 시에 검사되며, 반드시 예외 처리를 해야 합니다. 예: IOException
  • Unchecked 예외: 실행 시에 발생하며, 예외 처리가 강제되지 않습니다. 예: NullPointerException

예제: Checked 예외

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
            String line = reader.readLine();
            System.out.println(line);
        } catch (IOException e) {
            System.out.println("An error occurred: " + e.getMessage());
        }
    }
}
 

설명:

  • Checked 예외: IOException은 파일 입출력 시 발생할 수 있는 예외로, 반드시 예외 처리를 해야 합니다.

예제: Unchecked 예외

public class UncheckedExceptionExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;  // ArithmeticException 발생
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("An error occurred: " + e.getMessage());
        }
    }
}
 

설명:

  • Unchecked 예외: ArithmeticException은 실행 시에 발생하며, 예외 처리가 강제되지 않습니다.

4.3.2 try-catch-finally 구문

예외 처리는 try, catch, finally 블록을 사용하여 이루어집니다.

 

예제: 기본 예외 처리 구조

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;  // ArithmeticException 발생
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("An error occurred: " + e.getMessage());
        } finally {
            System.out.println("This is the finally block.");
        }
    }
}
 

설명:

  • try 블록: 예외가 발생할 가능성이 있는 코드를 포함합니다.
  • catch 블록: 예외가 발생했을 때 실행되는 코드를 포함합니다.
  • finally 블록: 예외 발생 여부와 상관없이 항상 실행되는 코드를 포함합니다.

4.3.3 사용자 정의 예외

Java에서는 사용자 정의 예외를 생성할 수 있습니다.

 

예제: 사용자 정의 예외

// 사용자 정의 예외 클래스
class InvalidAgeException extends Exception {
    public InvalidAgeException(String message) {
        super(message);
    }
}

public class CustomExceptionExample {
    // 나이를 검증하는 메서드
    static void validateAge(int age) throws InvalidAgeException {
        if (age < 18) {
            throw new InvalidAgeException("Age is not valid for voting.");
        } else {
            System.out.println("Welcome to vote.");
        }
    }

    public static void main(String[] args) {
        try {
            validateAge(16);
        } catch (InvalidAgeException e) {
            System.out.println("Caught the exception: " + e.getMessage());
        }
    }
}
 

설명:

  • 사용자 정의 예외 클래스: InvalidAgeException은 Exception 클래스를 상속받아 사용자 정의 예외 클래스를 만듭니다.
  • 예외 던지기: throw 키워드를 사용하여 예외를 던집니다.
  • 예외 처리: catch 블록에서 사용자 정의 예외를 처리합니다.

이로써 Java의 기본 클래스 사용에 대해 자세히 설명하고, 각 개념을 코드와 예시를 통해 설명했습니다. 이를 통해 문자열 처리, 배열 및 컬렉션 프레임워크, 그리고 예외 처리 등의 기본 개념과 사용법을 이해하고 활용할 수 있게 됩니다. 다음 챕터에서는 Java API 활용에 대해 다루겠습니다.

반응형

'IT 강좌(IT Lectures) > Java' 카테고리의 다른 글

6강. 고급 객체 지향 기법  (0) 2024.06.23
5강. Java API 활용  (0) 2024.06.22
3강. 객체 지향 프로그래밍  (0) 2024.06.20
2강. Java 기본문법  (0) 2024.06.19
1강. 시작하기  (0) 2024.06.18