[6일 차] 소프트웨어 엔지니어링 (Ch08 ~ Ch12)

2025. 2. 3. 11:41·LG 유플러스 유레카/소프트웨어 엔지니어링

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를 사용하자
    1. 문자열을 저장하기 위한 char 타입의 배열을 만듦
    2. 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) 오늘의 식사

[아침] 식빵과 써니사이드업 계란 그리고 우유 / [점심] 군만두 10개

 

'LG 유플러스 유레카 > 소프트웨어 엔지니어링' 카테고리의 다른 글

[7일 차] 소프트웨어 엔지니어링 (Ch13 ~ Ch16)  (0) 2025.02.04
[5일 차] 소프트웨어 엔지니어링 (Ch07 ~ Ch08)  (2) 2025.01.24
[4일 차] 소프트웨어 엔지니어링 (Ch06 ~ Ch07)  (3) 2025.01.23
'LG 유플러스 유레카/소프트웨어 엔지니어링' 카테고리의 다른 글
  • [8일 차] 소프트웨어 엔지니어링 (Ch16 ~ Ch18)
  • [7일 차] 소프트웨어 엔지니어링 (Ch13 ~ Ch16)
  • [5일 차] 소프트웨어 엔지니어링 (Ch07 ~ Ch08)
  • [4일 차] 소프트웨어 엔지니어링 (Ch06 ~ Ch07)
문태신
문태신
꾸준함은 모든 것을 이긴다.
  • 문태신
    별 될 시간
    문태신

  • 전체
    오늘
    어제
    • 전체 글 (119) N
      • LG 유플러스 유레카 (106) N
        • 강의 정리 (1)
        • 소프트웨어 엔지니어링 (8)
        • 알고리즘 (13)
        • 데이터베이스 활용 (5)
        • 미니 프로젝트 1 (3)
        • 데이터베이스 심화 (5)
        • 프론트엔드 이해 (3)
        • 깃허브 특강 (2)
        • 취업 특강 (2)
        • 스프링 프레임워크 (17)
        • REST API (10)
        • 미니 프로젝트 2 (7)
        • 프로젝트 기획 분석 설계 (5)
        • 애자일 방법론 (5)
        • 종합 프로젝트 (15)
        • 클라우드 특강 (3)
        • 최종 융합 프로젝트 (1) N
        • 회고 (1)
      • 알고리즘 공부 (5)
      • 자바 공부 (3)
      • 자격증 (2)
      • 디자인 (2)
      • 감상문 (1)
        • 책 (0)
        • 영화 (1)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
문태신
[6일 차] 소프트웨어 엔지니어링 (Ch08 ~ Ch12)
상단으로

티스토리툴바