25/02/03 (월)
연휴가 끝나고 안 즐거운 월요일입니다.
연휴 내내 기사공부만 한것같네요
어제 조원 한분이 수강정정을 해서 제가 발표를 하게 되었습니다.
코딩천재님.. 여기 있을 인재가 아니긴했습니다..
자기소개에 발표까지.. 발표 준비는 제대로 못했지만 어찌저찌 잘 해보겠습니다.
내일은 오후 5시에 객관식 20문제로 시험이 있습니다
1. WorkShop 발표
프리스타일로 발표 준비하느라 다른조 발표가 머리에 안들어왔습니다
어째서 이런 시련을
2. 강의
2.1. CH08 인터페이스
1) 인터페이스 마무리 정리
- 인터페이스의 extends와 implements 관계 최종 정리
2.2. CH09 중첩 선언과 익명 객체
1) 중첩 클래스
- 클래스 안에 또 다른 클래스 '정의'
- 복잡도가 증가하기 때문에 정적 멤버 클래스 외에는 잘 안씀
2) 정적 클래스
- static 클래스 안에 inner 클래스는 static으로 구현해야한다
3) 익명 객체
- 새로운 클래스를 만들고 정의한 것 처럼 동작하는 객체
- 새로 객체를 생성하는 것보다 간편하게 생성할 수 있음
- 인터페이스도 익명 객체 생성이 가능
- 굳이 이름을 줘서 만들지 않고, 부분에서만 사용할 객체를 만드는 것
2.3. CH10 라이브러리와 모듈
1) 라이브러리, 모듈
- 생략 (한번씩 읽어보기)
2.4. CH11 예외처리
1) 예외와 예외 클래스
- 예외처리는 자바에서 굉장히 중요하다
- 일반 예외(Exception/Checked Ex) : 컴파일러가 예외 처리 코드 여부를 검사하는 예외 (문법적으로 문제)
- 실행 예외(Runtime Exception/Unchecked Ex) : 컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외 (실행 과정 예외)
2) 예외 처리 코드
예외 처리
public class Test {
public static void main(String[] args) {
//Error vs Exception
// m();
m2();
m3();
}
//Exception in thread "main" java.lang.StackOverflowError
static void m() {
m();
}
//Exception in thread "main" java.lang.NullPointerException
//Compile Error (X)
static void m2() {
String str = null;
System.out.println(str.length());
}
//Compile Error (O)
//Unhandled exception type FileNotFoundException
//Checked exception
static void m3() {
//throws FileNotFoundException으로 만들어진 메소드를 호출할 때 만약 파일이 없으면 어떻게 대응?
//대응책이 없으면 문법 오류 발생
FileInputStream fis = new FileInputStream("readme.md");
}
}
static void m() throws FileNotFoundException {
System.out.println("m");
}
==========================================================
m(); //대응책이 없어 호출 안됨
- 예외 발생 시 프로그램의 갑작스러운 종료(Runtime Exception)를 막고 실행을 유지할 수 있게 처리하는 코드
- 자바는 기본적으로 돌다리도 두드려보고 건너라 개념
- 생성자나 메소드를 만들 때 발생할 수 있는 문제를 예외로 만들고, 그 상황에 대한 대응책도 미리 만들어 둠
#1 직접 처리 : try-catch로 처리된 m() 호출
static void m() {
//#1 직접 처리 : try-catch로 처리된 m() 호출
try {
FileInputStream fis = new FileInputStream("read.md");
System.out.println("정상 수행");
fis.read(); //1.1) IOException이 상위기 때문에 오류
}catch (FileNotFoundException e) { //1.2) IOException e를 넣으면 해결
System.out.println("파일 없으면 처리");
}finally {
System.out.println("항상 수행됨");
}
}
#2 회피 : 나를 호출한 곳으로 toss
//#2 회피 : 나를 호출한 곳으로 toss
// 메소드 선언부에 throws 처리
public static void main(String[] args) throws Exception {
}
static void m() throws FileNotFoundException{
}
- 최상단부 class에도 throws Exception을 해두면 오류가 사라짐
#3 RuntimeException 처리
//throws가 없어도 자동으로 위로 toss
//try-catch 적용 가능
m();
static void m() {
String str = null;
//#3 RuntimeException 처리
try {
System.out.println(str.length());
}catch(NullPointerException e) {
System.out.println("NullPointerException 발생");
}
}
- RuntimeException은 발생하지 않아야 하는 오류인데 이렇게 묻어두면 좋은 코드가 아님
- 원인을 찾아서 반드시 해결해야 됨
WorkShop> 예외처리 한 사람씩 반드시 설명해보기
3) 예외 종류에 따른 처리
다중 예외 처리
//복수개의 예외 처리
{
//#1 복수 예외 처리
try{
m1();
m2();
}catch(ClassNotFoundException e){
//처리 코드
}catch(FileNotFoundException e){
//처리 코드
}
//#2 or 연산자 처리
try{
m1();
m2();
}catch(ClassNotFoundException | FileNotFoundException e){
//처리 코드
}
//#3 상위 처리
try{
m1();
m2();
}catch(Exception e){
//처리 코드
}
//#4 복수 예외 처리 순서
// try{
// m1();
// m2();
// }catch(Exception e){
// //처리 코드
// }catch(FileNotFoundException e){ //오류 발생
// //처리 코드
// }
}
4) 사용자 정의 예외
- 사용자 정의 예외 처리 : 발생 = 객체생성 + toss
- 비지니스 로직적 오류를 해결할 수 있음
- throw사용
5) 리소스 자동 닫기
WorkShop> try-resource 부분 학습하고 테스트 코드 작성
- 리소스(resource)란 데이터를 제공하는 객체
- 사용하기 위해서는 open해아하며, 끝나면 close 해야 다른 프로그램에서 사용할 수 있음
FileInputStream fis = null;
try {
fis = new FileInputStream("file.txt");
...
} catch(IOException e) {
...
} finally {
fis.close();
}
try-with-resources
try(FileInputStream fis = new FileInputStream("file.txt")){
...
} catch(IOException e) {
...
}
2.5. CH12 java.base 모듈
1) API 도큐먼트
https://docs.oracle.com/javase/8/docs/api/
Java Platform SE 8
docs.oracle.com
- 구글링해서 한번씩 찾아보기
2) Object 클래스
- 어떤 클래스를 만들고 overriding을 안하면 Object에 있는 클래스가 사용 됨
객체 동등 비교
객체 해시코드
- hashCode()가 리턴하는 정수값이 같은지 확인하고
- equals() 메소드가 true를 리턴하는지 확인해서 동등 객체인지 판단
객체 문자 정보
레코드 선언
- 클라이언트 요청이 외부로 오면
- 레이어드 아키텍처(controller | service | repository) 구조에서 중간중간 데이터를 담는 목적으로 사용
- 거의 사용 안함(Lombok 사용)
Lombok 사용하기
- 넘어가서 백엔드 공부할때 배운다
3) System 클래스
화장실점
4) 문자열 클래스
String 클래스
- 만약에 인코딩이 다른 애들로 넘어오게 되면 byte 배열로 분해해야 함
- 그러면 low한 데이터가 되고 다시 UTF-8로 인코딩 해야 함
StringBuilder 클래스
- String+String 작업이 잦으면 새로운 객체가 계속 생성됨
- StringBuilder를 사용하자
- 문자열을 저장하기 위한 char 타입의 배열을 만듦
- append를 사용하여 문자열 수정
StringBuffer : String Builder와 유사
- 쓰레드에서 공유되는 상황이면 StringBuffer를 사용해아 함
- thread safe하기 때문에 무겁다
StringTokenizer 클래스
- 알고리즘때 한다 넘어가자
5) 포장 클래스
public class Test1 {
public static void main(String[] args) {
//Boxing
Integer obj = 100;
System.out.println(obj);
//Unboxing
int value = obj;
System.out.println(value);
int result = obj + 100; //자동으로 연산자에 의해 unboxing
System.out.println(result);
}
}
- 객체로 처리하고 싶은 경우
박싱과 언박싱
- 박싱 : 기본 타입 값을 포장 객체로 만드는 과정
- 언박싱 : 포장 객체에서 기본 타입으로 만드는 과정
Integer obj = 100;
int value = obj;
문자열 기본 타입 값으로 변환
포장 값 비교
Integer obj1 = 300;
Integer obj2 = 300;
System.out.println(obj1 == obj2); >>false
System.out.println(obj1.equals(obj2)); >>true
//-128 ~ 127의 수는 동일 객체로 관리
Integer obj3 = 100;
Integer obj4 = 100;
System.out.println(obj3 == obj4);
System.out.println(obj3.equals(obj4));
- ==, != 불가 equals 사용
- -128 ~ 127의 수는 동일 객체로 관리
6) 수학 클래스
Math 클래스
//절대값
int num = Math.abs(-5);
//올림값
double num = Math.ceil(5.3);
//버림값
double num = Math.floor(5.3);
//최대값
int num = Math.max(5,9);
//최소값
int num = Math.min(5,9);
//랜덤값
double num = Math.random();
//반올림값
long num = Math.round(5.3)
- 알고리즘 풀때 주로 사용
- static 메소드
7) 날짜와 시간 클래스
Date 클래스
Date now = new Date();
Calendar 클래스
Calendar now = Calendar.getInstance();
날짜와 시간 조작
- java.time 패키지의 LocalDateTime 클래스 (기억, java8부터 지원)
날짜와 시간 비교
8) 형식 클래스
DecimalFormat
- 거의 쓸 일 없음
SimpleDateFormat
- 올드하다 거의 쓸 일 없음
9) 정규 표현식 클래스
정규 표현식 작성 방법
- DB를 쓰지 않을때 쓴다
Pattern 클래스로 검증
10) 리플렉션
- 자바는 .class 파일만 있으면 정보를 들여다 볼 수 있다(리플렉션 API가 존재한다)
패키지와 타입 정보 얻기
- 넘어감
멤버 정보 얻기
- 넘어감
리소스 경로 얻기
- 넘어감
11) 어노테이션
- 코드에서 @으로 작성되는 요소
- 코드의 자동화 가능해진다
어노테이션 타입 정의와 적용
- @interface 뒤에 사용할 어노테이션 이름 작성
어노테이션 적용 대상
어노테이션 유지 정책
어노테이션 설정 정보 이용
WorkShop> 사용자 정의 어노테이션을 어떻게 만들고 쓸지
3. 마무리
1) WorkShop
WorkShop> 사용자 정의 어노테이션을 어떻게 만들고 쓸지
WorkShop> 예외처리 한 사람씩 반드시 설명해보기
WorkShop> try-resource 부분 학습하고 테스트 코드 작성
2) 오늘의 식사
'LG 유플러스 유레카 > 소프트웨어 엔지니어링' 카테고리의 다른 글
[7일 차] 소프트웨어 엔지니어링 (Ch13 ~ Ch16) (0) | 2025.02.04 |
---|---|
[5일 차] 소프트웨어 엔지니어링 (Ch07 ~ Ch08) (2) | 2025.01.24 |
[4일 차] 소프트웨어 엔지니어링 (Ch06 ~ Ch07) (3) | 2025.01.23 |