JAVA

자바 기초 문법 다지기 3

도원좀비 2025. 2. 26. 17:32

예외(Exception)란?

  • 예외는 프로그램 실행 중 예상하지 못한 상황이 발생하는 것을 의미
  • 의도적으로 예외를 발생시킬 때는 throw 키워드를 통해 발생
  • 예외를 처리하지 않으면 프로그램이 중단
  • 그래서 예외처리(try-catch)를 통해 프로그램이 안정적으로 실행 가능

예외 종류

  • 의도하지 않은 예외( RuntimeException - UncheckedException )
  • 의도한 예외( Exception - CheckedException)

 

의도하지 않은 예외( RuntimeException - UncheckedException )

  • 컴파일러가 예외 처리를 강제하지 않는 예외
  • 예외 처리를 하지 않아도 컴파일 오류(빨간 줄) 가 발생하지 않음
  • 처리되지 않은 예외는 계속 프로그램 시작 지점까지 전파
  • 끝내 예외가 처리되지 않으면 프로그램이 비정상적으로 종료.
  • RuntimeException 을 상속받는 모든 예외는 UncheckedException
public class ExceptionPractice {
    public void callUncheckedException() {
        if (true) {
            System.out.println("언체크 예외 발생");
            throw new RuntimeException(); // 예외발생 
        }
    }
}

 

의도한 예외( Exception - CheckedException)

  • Exception 클래스를 직접 상속받는 모든 예외는 CheckedException
    • RuntimeException 을 상속받는 예외는 제외.
  • 컴파일러가 예외 처리를 강제하는 예외
  • 반드시 try-catch로 예외를 처리하거나 throws 키워드를 사용해야 합니다. → throws 로 예외 처리의 책임을 호출자에게 전가할 수 있습니다.

(try-catch 활용)

public class ExceptionPractice {

    public void callCheckedException() {
		    // try-catch 로 예외 처리
        try { 
            if (true) {
                System.out.println("체크예외 발생");
                throw new Exception();
            }
        } catch (Exception e) {
            System.out.println("예외 처리");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        
        // 예외 실습 객체 인스턴스화
        ExceptionPractice exceptionPractice = new ExceptionPractice();

        // 체크예외 호출
        exceptionPractice.callCheckedException();
    }
}

 

(throws 활용)

public class ExceptionPractice {

    public void callCheckedException() throws Exception { // throws 예외를 상위로 전파
        if (true) {
            System.out.println("체크예외 발생");
            throw new Exception();
        }
    }
}

package chapter3.exception;

public class Main {
    public static void main(String[] args) {

        // 예외 실습 객체 인스턴스화
        ExceptionPractice exceptionPractice = new ExceptionPractice();

        // 체크 예외 사용
        // 반드시 상위 메서드에서 try-catch 를 활용해 주어야합니다.
        try {
            exceptionPractice.callCheckedException();
        } catch (Exception e) {
            System.out.println("예외처리");
        }
    }
}

 

 

Optional 이란?

  • Optional 객체는 null 을 안전하게 다루게 해주는 객체입니다.null 이란?
    • null은 프로그래밍에서 값이 없음 또는 참조하지 않음 을 나타내는 키워드
  • null 을 직접 다루는 대신 Optional 을 사용하면 NullPointerException 을 방지할 수 있습니다.

(isPresent()활용)

import java.util.Optional;

public class Camp {

    // 속성
    private Student student;

    // 생성자

    // 기능
    // ✅ null 이 반환될 수 있음을 명확하게 표시
    public Optional<Student> getStudent() {
        return Optional.ofNullable(student);
    }
    
    public void setStudent(Student student) {
		    this.student = student;    
    }
}


public class Main {

    public static void main(String[] args) {

        Camp camp = new Camp();
        
        // isPresent() 활용시 true 를 반환하고 싶을때 활용
        // Student newStudent = new Student();
        // camp.setStudent(newStudent);

        //  Optional 객체 반환받음
        Optional<Student> studentOptional = camp.getStudent();

        // Optional 객체의 기능 활용
        boolean flag = studentOptional.isPresent(); // false 반환
        if (flag) {
            // 존재할 경우
            Student student = studentOptional.get(); // ✅ 안전하게 Student 객체 가져오기
            String studentName = student.getName();
            System.out.println("studentName = " + studentName);

        } else {
            // null 일 경우
            System.out.println("학생이 없습니다.");
        }
    }
}

 

 

(orElseGet()활용)

import java.util.Optional;

public class Camp {

    // 속성
    private Student student;

    // 생성자

    // 기능
    // null 이 반환될 수 있음을 명확하게 표시
    public Optional<Student> getStudent() {
        return Optional.ofNullable(student);
    }
}


import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        Camp camp = new Camp();

        // Optional 객체의 기능 활용 (orElseGet 사용)
        Student student = camp.getStudent()
                              .orElseGet(() -> new Student("미등록 학생"));

        System.out.println("studentName = " + student.getName());
    }
}

 

컬렉션(Collection)이란?

  • 자바 컬렉션 프레임워크는 이러한 자료구조들을 쉽게 사용할 수 있도록 인터페이스와 구현체(ArrayList, HashSet, HashMap 등)를 제공하는 집합
  • 컬렉션을 통해 데이터 저장, 조회, 삭제, 정렬 등 다양한 기능을 간편하게 구현 가능
  • 배열과 다르게 컬렉션은 길이를 동적으로 변경 가능
인터페이스 특징 구현체
List 순서 유지, 중복 허용 ArrayList
Set 순서 없음, 중복 불가 HashSet
Map 키-값 구조, 키 중복 불가 HashMap

 

// List 를 구현한 ArrayList
ArrayList<String> names = new ArrayList<>();
names.add("Spartan");      // 1 번째 요소 추가
names.add("Steve");        // 2 번째 요소 추가
names.add("Isac");         // 3 번째 요소 추가
names.add("1");
names.add("2");

 // 순서 보장
System.out.println("names = " + names);

// 중복 데이터 허용
names.add("Spartan");
System.out.println("names = " + names);

// 단건 조회
System.out.println("1 번째 요소 조회: " + names.get(0)); // 조회 Spartan

// 데이터 삭제
names.remove("Steve"); 
System.out.println("names = " + names);


// Set 을 구현한 HashSet
HashSet<String> uniqueNames = new HashSet<>();

// 추가
uniqueNames.add("Spartan");
uniqueNames.add("Steve");
uniqueNames.add("Isac");
uniqueNames.add("1");
uniqueNames.add("2");

//  순서를 보장 안함
System.out.println("uniqueNames = " + uniqueNames); 
uniqueNames.get(0); // ❌ get 사용 불가

//  중복 불가
uniqueNames.add("Spartan");
System.out.println("uniqueNames = " + uniqueNames); 

//  제거
uniqueNames.remove("Spartan");
System.out.println("uniqueNames = " + uniqueNames); 


// Map 을 구현한 HashMap
HashMap<String, Integer> memberMap = new HashMap<>();

//  추가
memberMap.put("Spartan", 15);
memberMap.put("Steve", 15); //  값은 중복 가능
memberMap.put("Isac", 1);
memberMap.put("John", 2);
memberMap.put("Alice", 3);

// 순서 보장 안함 
System.out.println("memberMap = " + memberMap);

// 키 중복 불가: 값 덮어쓰기 발생
memberMap.put("Alice", 5);
System.out.println("memberMap = " + memberMap);

// 조회: 15
System.out.println(memberMap.get("Steve"));

// 삭제 가능
memberMap.remove("Spartan"); 
System.out.println("memberMap = " + memberMap);

// 키 확인
Set<String> keys = memberMap.keySet();
System.out.println("keys = " + keys);

// 값 확인
Collection<Integer> values = memberMap.values();
System.out.println("values = " + values);

 

'JAVA' 카테고리의 다른 글

자바 기본 다지기 최종  (2) 2025.02.27
자바 기초 문법 다지기 4  (1) 2025.02.26
자바 기초 문법 다지기3  (0) 2025.02.26
자바 기초 문법 다지기 2  (1) 2025.02.25
자바 기초 문법 다지기  (2) 2025.02.24