TIL 9 [ Java(예외처리, Optional, 제네릭, 컬렉션) ]

2025. 2. 27. 21:46·[내일배움캠프-Sparta]/Spring 6기
반응형

1. 오늘 학습 키워드 : Java 프로그래밍 ( 예외처리, Optional, 컬렉션, 제네릭 )

2. 학습 내용을 나만의 언어로 정리

예외 발생이 예외처리는 필수적이며, 배열은 정적인 메소드 고정된 형태, 컬렉션 ArrayList로 길이제한 해제!

 

3. 학습내용
14:00 ~ 15:00  프로그래밍 기초 발제 (객체활용 강의 , 박성원 튜터님 ) 

[3-1 예외처리]

예외 - 프로그램 실행중 예상하지 못한 상황이 발생하는 것  의도적인 예외를 발생시킬 때 throw(책임전가) 키워드 사용 → 예외 처리를 안하면, 프로그램이 중단 될 수 있음.의도하지 않은 예외는 10을 0으로 나누는 연산 수행을 예로 들수 있다. [ ◆예외처리는 선택이아닌 필수◆ ]

 

RuntimeException - UncheckedException ( 예외처리를 컴파일러가 확인 X { 빨간줄 X} ) 

Exception - CheckedException ( 예외처리를 컴파일러가 확인 O { 빨간줄 O } )

☞ try-catch 문이나 throws 키워드 사용

 

예외 전파 - 메소드에서 발생한 예외가 해당 메서드 내에서 처리되지 않을 때, 메서드를 호출한 상위 메서드로 전달되는 과정  → 예외가 main() 까지 전파되고 처리되지 않으면 프로그램이 비정상 종료 ( 메인에서도 예외처리 가능 )

 

*실습문제*

💬 Q1. 로그인 예외처리

💡요구사항

  • 사용자로부터 아이디와 비밀번호를 입력받습니다.
  • 아이디가 “admin”, 비밀번호가 “1234” 가 아니면 로그인 실패 예외를 발생시킵니다.
  • 로그인 실패 시 “로그인 실패! 아이디 또는 비밀번호가 잘못되었습니다.” 출력 후 다시 입력을 받습니다. 

Q1 풀이 ( 예외처리 )

※ 해당 클래스내에서 둘다 try-catch로 에러부분을 예외처리 가능.

[3-2 Optional - null 잘 다루기] 

Optional - null을 안전하게 다루는 객체 

null -  프로그래밍에서 값이없음 or 참조하지 않음을 의미

프로그래밍에서 값이 없음 or 참조하지 않음을 의미

Optional을 사용하면, NullPointerException ( 런타임예외, 컴파일러가 잡아주지 못함 ) 방지 가능

 

null 직접처리 한계 - if문을 활용해 null 처리 가능하지만, 모든 코드에서 null 발생할 가능성을 미리 예측하고 처리하는것은 매우 어렵다.

→ Optional을 통한 활용

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

*실습문제*

💬 Q1. 수강생의 이름을 입력받고 해당 이름이 캠프에 등록되어 있는지 확인하는 프로그램을 만드세요.

 💡 요구사항

  • Student , CampService , Main 클래스를 활용하세요.
  • 캠프에는 3 명의 학생이 존재합니다. Spartan, Steve, John
  • private static Student[] students = { new Student("Spartan"), new Student("Steve"), new Student("John") };
  • Optional.ofNullable() 로 Optional 객체를 만드세요.
  • isPresent() 로 Optional 에 값이 있는지 확인하세요.
  • get() 으로 안전하게 데이터를 꺼내오세요. 

Q1 실습문제 풀이 ( Optional )
결과값

[3-3 컬렉션]

  • 자바 컬렉션 프레임워크는 자료구조들을 쉽게 사용하도록, 인터페이스와 구현체를 제공하는 집합

컬렉션을 통해서 데이터 저장, 조회, 삭제 ,정렬

배열과 다르게 컬렉션은 길이를 동적으로 변경 가능 ( 추가/삭제 시 유연하게 길이가 변경 , 길이제한 X)

 

배열의 한계

크기가 고정되어 있어 1번 설정하면 변경 불가능 → 배열길이 초과시 에러 발생 (치명적)\

// 컬렉션객체<자료형> 변수명 = new 컬렉션객체<자료형>(); 
ArrayList<String> nameList = new ArrayList<>(); // 뒷부분의 <> 내용은 생략가능함.

ArrayList  ( 순서 유지, 중복 허용 )   ex) ArrayList, LinkedList

  • 요소 추가 .add(값)
  • 요소 조회 .get(인덱스);
  • 요소 삭제 .remove(값);

HashSet   ( 순서 , 중복 x ) ex) HashSet,TreeSet

ArrayList와 추가,삭제 동일하나, 순서가 없기 때문에 인덱스 지원하지않아 get() 함수 사용x

 

HashMap ( 순서 , 키 중복 x ( 값은 중복됨 )  = 키:값 구조

  • 요소 추가 .put("키",값)
  • 요소 조회 .get("키") { 인덱스 개념 x }
  • 요소 삭제 .remove("키")
  • *HashMap 고유 기능*
  • 키 확인 .KeySet()
  • 값 확인 .Values()

*실습문제*

 💬 Q1. ArrayList 로 장바구니를 구현해 보세요.

 💡요구사항

  • 장바구니 상품: 양파, 사과, 생선, 두부
  • 기능1: 상품추가(addProduct)
  • 기능2: 장바구니 목록 출력(printCart)
  • 기능3: 상품 삭제(removeProduct)
  • 기능4: 총 가격 계산(calculateTotalPrice) 

Q1 풀이 ( 컬렉션 )
결과값

[3-4 제네릭]

  • 클래스, 메소드 등에 사용되는 <T>타입 매개변수를 의미 
  • ★ 타입을 미리 정하지않고, 사용 시점에서 유연하게 결정할수 있는 문법 

<T> 타입을 의미하는 자리, 실제 데이터 타입으로 대체되어 활용됨.

→ <T>타입 매개변수부분은 Object로 대체함.

타입소거 - 컴파일 시점에 제네릭 타입 정보를 제거하는 과정

필요한 경우 컴파일러가 자동으로 강제 다운 캐스팅 코드를 삽입해 타입 안정성을 보장함.

 

제네릭 메소드 - 클래스 제네릭 타입과 별개로 독립적인 타입 매개변수를 가짐.

일반 메서드와 제네릭 메서드 차이
메인에서 타입 쓸수있는 범위가 다르다.

4. 내일 학습 할 것: 자바 3주차완강후 전체복습 

반응형

'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글

TIL 11 [Java(접근제어자, 클래스란?, 객체지향?) + 계산기 과제 2단계 ]  (0) 2025.03.04
TIL 10 [ Java(람다식, 스트림, 쓰레드) + 계산기 과제 1단계 ]  (0) 2025.02.28
TIL 8 [ Java(final, static, 인터페이스, 객체지향) ]  (0) 2025.02.26
TIL 7 [ Java(조건/반복문, 배열 , 메소드) ]  (0) 2025.02.25
TIL 6 [ Java( 개념,변수,입출력, 데이터타입, 연산자) ]  (0) 2025.02.24
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 11 [Java(접근제어자, 클래스란?, 객체지향?) + 계산기 과제 2단계 ]
  • TIL 10 [ Java(람다식, 스트림, 쓰레드) + 계산기 과제 1단계 ]
  • TIL 8 [ Java(final, static, 인터페이스, 객체지향) ]
  • TIL 7 [ Java(조건/반복문, 배열 , 메소드) ]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Testcode
    spring
    세션
    AWS
    CPU
    web
    db
    백엔드
    It
    웹
    트랜잭션
    코딩테스트
    Python
    Til
    내일배움캠프
    SQL
    알고리즘
    KPT
    개발자
    컴퓨터구조
    Java
    배포
    메모리
    OS
    운영체제
    SQLD
    network
    docker
    네트워크
    cs
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 9 [ Java(예외처리, Optional, 제네릭, 컬렉션) ]
상단으로

티스토리툴바