Hyeok의 웹 개발 블로그

<2025.03.06>Java 챕터 [3-1] ~[3~3] 본문

TIL/Java

<2025.03.06>Java 챕터 [3-1] ~[3~3]

Yhyeok 2025. 3. 6. 23:37
  • 예외
    - 예외는 프로그램 실행 중 예상하지 못한 상황이 발생하는 것
    - 의도적으로 예외를 발생 시킬때는 throw 를 사용해 발생시킨다.
    - 예외를 처리 하지 않으면 프로그램이 중단 될 수 있음.
    - 그래서 예외처리는 try-catch를 사용해 프로그램을 실행함

 

  • RuntimeException -UncheckedException 
    - 컴파일러가 예외 처리를 강제하지 않는 예외
    - 예외 처리를 하지 않아도 컴파일 오류(빨간줄)가 발생하지 않습니다.
    - 처리 되지않는 예외는 계속 프로그램 시작 지점까지 전파
    -끝내 예외가 처리되지 않으면 프로그램이 비정상적으로 종료
    - RuntimeException을 상속 받는 모든 예외를 UncheckedException이라 한다.

 

  • Exception-CheckedException
    - Exception 클래스를 직접 상속받는 모든 예외를 CheckedException이라한다.
    - 컴파일러가 예외 처리를 강제하는 예외
    - 예외 처리를 하지 않으면 "컴파일 오류가 발생한다(코드에 빨간줄)"라고 이해
    - 반드시 `try-catch`로 예외를 처리하거나 `throw` 키워드로 사용
      -> `throw` 로 예외처리의 책임을 호출자에게 전가할 수 있음

  • try-catch


throws 활용

 

 


- 실습 과제
[요구 사항]
1. 사용자로부터 아이디와 비밀번호를 입력 받는다.
2. 아이디가 "admin", 비밀번호가 "1234"가 아니면 로그인 실패 예외를 발생
3. 로그인 실패 시 "로그인 실패! 아이디 또는 비밀번호가 잘못 되었습니다." 출력 후 다시 입력 받기

 

우선 아이디와 비밀번호를 입력 받고 로그인 성공 문구 까지 코딩을 진행했습니다.

System.out.print("아이디 입력: ");
String name = sc.nextLine();
System.out.print("비밀번호 입력: ");
String password = sc.nextLine();

login(name, password);
System.out.println("로그인 성공!");
break;

여기서 로그인 과정에서 예외 발생 가능이 있어서 try-catch 를 사용합니다.

 

try {
    System.out.print("아이디 입력: ");
    String name = sc.nextLine();
    System.out.print("비밀번호 입력: ");
    String password = sc.nextLine();

    login(name, password);
    System.out.println("로그인 성공!");
    break;

} catch (Exception e) {
    System.out.println(e.getMessage());
}

 

while 문을 사용해 로그인 실패하는 경우를 만들고 로그인 실패 문구를 나타내줍니다.

public class Home {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            try {
                System.out.print("아이디 입력: ");
                String name = sc.nextLine();
                System.out.print("비밀번호 입력: ");
                String password = sc.nextLine();

                login(name, password);
                System.out.println("로그인 성공!");
                break;

            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }

    }
    public static void login(String name, String password) throws  Exception{
        if(!name.equals("admin")||!password.equals("1234")){
            System.out.println("로그인 실패! 아이디 또는 비밀번호가 잘못되었습니다.");
    }

    }

}

  • Optional
    Optional 객체는 null을 안전하게 다루게 해주는 객체
    • Optional 객체는 값이 있을 수도 있고 없을 수도 있는 컨테이너라고 생각하시면 됩니다.
    • Optional 객체를 메서드 반환 자료형에 선언해서 해당 메서드가 null 이 반환될 가능성을 명확하게 전달할 수 있습니다.
    • Optional.ofNullable() 을 사용하여 null 이 반환될 수 있는 객체를 감쌉니다.
    • 활용할 때는 isPresent() 와 같은 Optional API 를 통해 안전하게 null 처리를 할 수 있습니다.


  • null
    null은 프로그래밍에서 값이 없음, 참조하지 않음을 나타내는 키워드

 

  • Null 을 직접 처리의 한계

 

  • isPresent() 활용

 

  • orElseGet() 활용


  • Collection 이란?
    • 프로그래밍 세계에는 다양한 자료구조가 존재합니다.
    • 자바 컬렉션 프레임워크는 이러한 자료구조들을 쉽게 사용할 수 있도록 인터페이스와 구현체(ArrayList, HashSet, HashMap 등)를 제공하는 집합입니다.
    • 컬렉션을 통해 데이터 저장, 조회, 삭제, 정렬 등 다양한 기능을 간편하게 구현할 수 있습니다.
    • 배열과 다르게 컬렉션은 길이를 동적으로 변경할 수 있습니다.(추가 삭제 시 유연하게 길이가 변경됩니다.)
  • Collect 종류와 특징


  • List 인터페이스 구현한 ArrayList 
    • ArrayList 는 요소의 순서를 유지하고 중복된 값을 저장할 수 있는 자료구조입니다.
    • 요소 추가 → add("값")
    • 요소 조회 → get(인덱스)
    • 요소 제거 → remove("값")
    • 대표적인 구현체로는 ArrayList , LinkedList가 있습니다.


  • Set 인터페이스를 구현한 HashSet
    • HashSet순서를 유지하지 않고 중복을 허용하지 않습니다.
    • → 순서를 보장하지 않기 때문에 get() 지원을 하지 않습니다.
    • 요소 추가 → add("값")
    • 요소 제거 → remove("값")
    • 대표적인 구현체로는 HashSet , TreeSet 이 있습니다.

 


  • Map 인터페이스를 구현한 HashMap
    • HashMap 은 키(Key) - 값(Value) 구조로 데이터를 저장합니다.(키: 값)
    • 키(Key) 는 중복될 수 없지만 값(Value) 은 중복 가능합니다.
    • 순서를 보장하지 않습니다.
    • 요소 추가 → put(”키”, 값)
    • 요소 조회 → get(”키”)
    • 요소 제거 → remove("Steve")
    • 키 확인 → keySet()
    • 값 확인 → values()
    • 대표적인 구현체로는 HashMap, TreeMap 이 있습니다.