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” 가 아니면 로그인 실패 예외를 발생시킵니다.
- 로그인 실패 시 “로그인 실패! 아이디 또는 비밀번호가 잘못되었습니다.” 출력 후 다시 입력을 받습니다.

※ 해당 클래스내에서 둘다 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() 으로 안전하게 데이터를 꺼내오세요.


[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)


[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 |