일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 깃허브
- 부트캠프
- 프론트엔드부트캠프
- 자바스크립트 코딩테스트
- 프로그래머스코테
- 영상처리
- js코테
- 패캠부트캠프
- 국비지원취업
- 개발블로그
- 프론트엔드
- 자바스크립트
- 코딩테스트
- 프론트엔드개발자
- pokeapi
- 프로그래머스
- 프로그래머스 JS 코테
- 패캠
- 개발 프로젝트
- 패스트캠퍼스부트캠프
- 미니 프로젝트
- 국비지원
- Java
- 개인프로젝트
- 패스트캠퍼스
- 딥러닝
- FE
- 프로젝트
- JS
- 깃
- Today
- Total
가쟤의 해변일기 🐳
풀스택과정 Java- Collection API | HashSet | Exception | Abstract Class | 람다식 본문
풀스택과정 Java- Collection API | HashSet | Exception | Abstract Class | 람다식
바닷가쟤 2025. 5. 19. 14:33💡 2025 04 30
1. Collection API
HashMap 방식으로 객체 관리하기 심화
2. Collection API
HashSet 방식으로 객체 관리하기
3. Abstract Class 사용법과 용도
4. Exception 예외 처리
+람다 Collectiokn Stream
Exception 예외 처리
Throwable
- Exception - Mild 한 손상
- Runtime Exception실행 때 에러를 감지 !NullPointer ExceptionArithmeticException - 0분의 1 이런거 안댐
- … 등등
- ArrayIndexOutOfBoundsException
- ex)
- 컴파일러가 이 버그를 인식하지 못함(컴파일이 된다)
- Compile Exception
- 컴파일부터 에러가 난다.
- 프로그램 적으로 살려낼 수 있음
- Error - Serious 한 손상개발자 영역이 아님 신경 X
- PhsicalMemory Full Down, JWM Death
— 예외가 어떤 상황에서 발생하는지
— 예외가 발생하면 어떤 결과가 나타나는지
— 예외를 처리한다는 것이 프로그램으로 어떤 작업인지
예외를 명시적으로 처리하는 방법
package com.edu.exception.test;
public class RunTimeExceptionTest1 {
public static void main(String[] args) {
String[] str = {
"Hello",
"No, I Mean it",
"Nice to meet you"
};
int i = 0;
while(i <= 3) {
try {
System.out.println(str[i]);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Nice Catch~");
}
i++;
}
System.out.println("The end....");
}
}
사용자 정의 Exception
- 내가 특정한 조건에서 고의적으로 폭탄을 터트리겠다.
- 폭탄을 내가 직접 제조해서 사용하겠다.
package com.edu.exception.test;
/*
* 1) try ~ catch :: 즉각적으로 예외를 처리
* 2) throw :: 폭탄을 던진다 ... method 선언부에서 발생한 폭탄을 던진다
*/
class ZeroBoom extends Exception {
ZeroBoom() {
this("This is ZeroBoom Exception");
};
ZeroBoom(String message) {
super(message);
}
}
public class UserExceptionTest1 {
public static void main(String[] args) {
Users u = new Users();
try {
System.out.println("go() 메소드를 호출합니다.");
u.go();
} catch(ZeroBoom e) {
System.out.println(e.getMessage());
}
System.out.println("이 부분을 수행하고 프로그램을 마칩니다.");
}
}
class Users {
public void go() throws ZeroBoom {
int i = 10;
int j = 0;
// 저 아랫 부분에서 i를 j로 나누는 연산이 진행된다라고 치고
if (j == 0)
throw new ZeroBoom("분모가 0이면 폭탄이 터집니다.");
}
}
💡 2025 05 02
1. Exception
Compile계열 Exception
2. Abstract Class
Interface → Abstract Class → Class
3. Abstract 클래스 용도
프로그램을 수행하는 도중에 발생하는 예기치 못한 사건이나 상황
일종의 버그 혹은 에러
예외처리의 상당 부분이 강력한 제어문으로 사용
특정한 조건일 때 고의적으로 에러를 발생시켜서 프로그램을 제어하는 수단
사용자 정의 예외처리
e.printStackTrace(); ← 개발할 때는 좋으나 보안에 취약하기 때문에 배포 시 주석처리
Stream
데이터의 흐름
source(데이터의 근원) → Sink(데이터의 종착지)
keyboard console
[source와 sink는 하드웨어 적인 부분이다.]
내부적으로 이미 연결되어있다.
FileReader에 에러가 나는 이유는
FileReader에서 Throw했기 때문 !
fileReader의 new는 생성의 의미가 아니고 stream이다.
이미 만들어져 있는 것을 사용하겠다는 관 의 의미이다.
그래서 호출한 이 곳에서 try catch를 해줘야 한다.
FileReader는 파일을 읽어들이는 일종의 스트림이다.
스트림을 생성한다는 것은 객체를 생성하는 것이 아니라
자원을 열어서 사용하겠다는 의미이다.
이 때 사용을 한 후에는 반드시 닫아줘야만
자원이 누수 되는 현상을 막을 수 있다.
~Service 클래스는 기능 중심의 클래스이다.
기능에 대한 코드 가독력이 높아야 좋은 코드가 만들어진다.
이 때 예외처리로 인한 블락들은 코드 가독력을 저해하는 치명적인 요인이다.
그래서 메소드 구현부에는 반드시 예외를 직접 잡지 않고 반드시 던져야 한다.
try-with-resources
package com.edu.exception.test3;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
class FileService4 {
public void readFile(String fileName) throws FileNotFoundException, IOException {
System.out.println("2. FileReader Creating...");
// finally 블락 안에서 자원을 반납해야 하는 경우에는 try-with-resource 구문 사용
try (FileReader fr = new FileReader(fileName)) {
System.out.println("3. 파일을 성공적으로 찾았습니다.");
int data;
while((data=fr.read()) != -1)
System.out.print((char)data);
}
}
}
public class CompileExceptionTest4 {
public static void main(String[] args) throws FileNotFoundException, IOException {
System.out.println("1. readFile() calling...");
FileService4 service = new FileService4();
try {
service.readFile("test.txt");
} catch(IOException e) {
System.out.println(e.getMessage());
}
}
}
💡 2025 05 13 수업
1. 자바 프로젝트 발표
2. 람다식
3. Functional Interface(함수형 인터페이스)
4. Collection Stream
+추가로 자바 플젝 발표 자료 리드미에 정리
람다, 람다식(Lambda)
::
함수형 프로그램
자바 8버전에서 새롭게 추가된 기술
::
- 익명 함수(함수명이 없다)
- 코드가 간결하고 성능상 좋다
- Collection(List, Map, Set)안에 데이터를 처리할 때 유용하다 - Collection Stream
- 병렬 처리가 가능하다
함수 정의
// 함수 정의
int add(int x, int y) {
return x + y;
}
// 람다식
(x, y) -> x + y;
// 메소드 이름, 인자값 타입, {}, return, 반환 타입이 생략
람다식 — 함수형 인터페이스에서 주로 사용됨
Functional Interface
→ 추상 메소드가 오직 1개만 존재 ! ⭐
// 이건 함수형 인터페이스 ! 추상 메소드 1개.
interface MyFunction {
public int max(int a, int b);
}
class Test {
public static void main(String[] args) {
// max 구현 이 부분 람다로 구현 가능 !!!
MyFunction mg = new (implements) MyFunction() {
public int max(int a, int b) {
return a > b ? a : b;
}
} // 여기까지 아래에 람다로 구현해보겠음
}
}
// 위 부분 람다식으로 구현
MyFunction mf = (a, b) -> a > b ? a : b;
// 호출
mf.max(1, 20);
람다식 코드 구현
package step1;
@FunctionalInterface
interface Calculable {
void calc(int a, int b); // 매개변수 2, 반환타입 X
}
public class LambdaTest4 {
public static void main(String[] args) {
// 1. Calculable를 구현.. 람다식으로 구현
Calculable c = (a, b) -> System.out.println(a + b); // 함수형 인터페이스의 구현체
c.calc(2, 3);
action((x, y) -> {
int result = x+y;
System.out.println("RESULT=> " + result);
});
}
// 2. 메소드를 정의(Calculable을 인자값으로 hasing)
public static void action(Calculable cal) {
System.out.println("action...method");
cal.calc(10, 20);
}
}
람다식은 내 마음대로 그때그때 구현이 가능하다.
함수형 인터페이스
구성 요소
- 추상 메소드⭐ (핵심)
- default 메소드
- static 메소드
:::
대표적인 functional Interface
매개변수 X, 반환 타입 X —————> Runnable - void run()
매개변수 O, 반환 타입 X —————> Consumer - void accept(T)
매개변수 X, 반환 타입 O —————> Supplier - R get()
매개변수 O, 반환 타입 O —————> Function - R apply(T)
매개변수 O, 반환 타입 O(boolean) —> Predicate - boolean test(T)