[IT국비지원] 개발자 교육 22일 차 : JAVA(2023.08.25)fit.구디아카데미,김지훈 강사님

Nicole Gold·2023년 8월 25일
0

K-digital training

목록 보기
23/60

이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함!

String 관련 메서드들 재확인 및 추가 예시 진행

문자열(String)의 기능들

util.jsp

  • My First Program Language is JAVA 에 대하여
  • utils 라는 경로에 action 속성의 값은 charAt, val 는 4
  • 만약 EL 태그 charAt 이 null 이 아니면 "답 : ${charAt}"을 표시
  • 이하 동일

controller

  • utils 경로를 가져옴
  • http 를 상속받는 클래스 / doGet 방식을 오버라이드 함
  • action의 파라미터를 가져와 변수 action에 저장
  • val 의 파라미터를 가져와 변수 val 에 저장
  • "My First Program Language is JAVA" 문자열을 text 변수에 넣음
  • Object 변수 result 선언
  • switch 문을 사용해 axcion 의 값이 바뀌는 case 마다 다른 메서드 실행
  • case 가 charAt 일 때 text 에 charAt 함수를 실행. val의 값이 4인데 인덱스 넘버로 변경하기 위해 Integer.parseInt 를 사용해 줌 -> 값은 i
    charAt() : 특정 인덱스의 문자 확인
  • case 가 substring 일 때 text에 substring 메서드 사용 -> 17번 인덱스부터 보여 주고 25번 인덱스부터 버리고 결과를 result 에 담음 -> 값은 Language
    substring() : 문자열 특정 부분을 잘라냄
  • case 가 toCharArray 일 때 text에 toCharArray 메서드 사용-> 문자 하나씩 잘라냄 - > M, y, , F, i, r, s, t, , P, r, o, g, r, a, m, , L, a, n, g, u, a, g, e, , i, s, , J, A, V, A,
    toCharArray() : 문자열을 캐릭터 배열로 변환
  • case 가 split 일 시 text 에 split 메서드 실행 - > " "(공백) 기준으로 문자열 자름 - > 값은 My, First, Program, Language, is, JAVA,
    split() : 문자열을 특정 구분자로 나눠줌
  • case 가 indexOf 일 시 text 에 indexOf 메서드 실행 - > a 가 들어간 인덱스 넘버 찾음 - > 값은 14
    indexOf() : 특정 문자가 있는 인덱스 확인(1개)
  • case 가 indexOf 일 시 첫 번째 인덱스 넘버 x, a가 포함된 전체 인덱스 넘버 찾는 새로운 메서드 생성을 위해 StringUrils 클래스를 객체화 해서 가져옴 - > utils 객체에 매개변수로 text(첫 언어 자바 어쩌고) 와 val(a)을 넣는 메서드 search 생성

StringUtils 의 search 메서드

  • text에 toLoweCase 메서드 적용(전체 문자열 소문자로 변환)하여 변수 lowerText 에 담음
  • for 문 사용하여 i를 0부터 문자열의 길이만큼 증가 -> 만약 문자열에 메서드 charAt 에 i를 담고, i의 값이 a와 같다면 i+공백을 result에 담아줌



StringBuffer 와 StringBuilder

  • String 은 용량이 고정되기 때문에 문자열 추가 시 객체를 계속 생성한다.

    • String str = "문자열을";
    • str += "추가하면";
    • str += "각 객체가 생성된다.";
  • StringBuffer 와 StringBuilder 는 용량이 변화하므로 새로운 객체를 생성하지 않는다.

    • StringBuffer buffer =new
    • StringBuffer("문자열을");
    • buffer.append("추가하면");
    • buffer.append("한 객체의 크기만 늘어 난다.");
    • System.out.println(buffer);
  • StringBuffer 와 StringBuilder 의 차이

    접근성 문제로 일반적으로 StringBuffer 사용

  • StringBuffer 메서드에 매개변수 val+" 의 인덱스"를 넣어 변수 buffer 로 객체화

  • idx 변수 값 0으로 선언

  • while 문을 통해 idx 가 -1 보다 클 동안 반복 실행

  • 소문자열에 indexOF 함수 사용, 매개변수로 val(a) 와 idx 를 넣어 변수 idx 에 담음

  • 만약 idx가 -1보다 크다면 변수 buffer에 append 메서드 실행(문자열 끝에 문자열을 넣어줌) idx+공백;

  • 그 후 idx 를 증가시켜줌

  • idx 값이 누적된 buffer 변수를 리턴함



요약

  • String 은 char 배열을 다루기 위한 class 이다.
  • String 에는 문자열을 다룰 수 있는 여러 메서드들이 존재 한다.
  • String 에서 문자열을 추가할 때마다 객체가 증가한다.
  • 이런 객체의 남발을 막기 위해 StringBuffer 와 StringBuilder 가 생겼다.



Exception

Exception & Error

  • 에러(Error) : 문법이나 메모리 사용 문제로 실행에 문제가 생겨 발생하는 오류
  • 예외(Exception): 사용자의 오조작이나 외부 문제로 발생하는 오류

Exception의 종류

  • 예외는 또 일반 예외(Exception)와 실행 예외(Runtime Exception)로 분리된다.
  • 일반 예외는 JVM 에서 필요하다고 판단하면 자동으로 예외처리를 해준다.
  • 그래서 우리는 주로 Runtime Exception 에 대해서만 신경을 쓰도록 하자.
  • 아래는 앞으로 많이 접하게 될 Runtime Exception 들이다.

예외 처리

  • Exception 은 불가피한 외부 문제로 발생하므로 프로그램이 정지하지 않도록 해야 한다.
  • 그래서 예외 처리를 통해 exception 발생 시에도 프로그램이 정상작동 하도록 한다.
  • 예외 처리에는 try-catch 와 throws 라는 두 가지 방법을 사용한다.

Exception과 예외 처리 예시

index


  • action 속성 이름이 join 인 로그인 페이지 생성
  • EL 태그 msg 를 변수 msg에 담음
  • 만약 msg 가 공백이 아닐 시 msg 를 담은 경고창 뜸

JoinModel

NumberFormatException 발생 상황

try-catch 처리

  • 매개변수로 age를 받는 boolean 타입 메서드 ageCheck 실행하는 클래스
  • boolean 타입 변수 pass 에 false를 넣음
  • try catch 사용
  • 문자열 age를 int 로 변경해 int 변수 n에 담음
  • n이 20 보다 작으면 false, 그렇지 않다며 true 를 pass 에 담음
  • 넘버 포멧이 예외가 발생 시(숫자 형태가 아닌 문자열을 숫자로 변환하려는 상황) catch 안에 있는 구문으로 처리함
  • false를 pass 에 담음
  • pass 를 반환함

NullPointerException,ArrayIndexOutOfBoundsException 발생 상황

throws 처리

  • int 메서드 registHobby 생성. 매개변수는 hobby 문자열로 받음
  • NullPointerException, ArrayIndexOutOfBoundsException 예외상황이 일어났을 땐 일 시킨 클래스인 controller 가 처리하라고 함
  • hobby 문자열의 length 를 cnt 변수에 담음
  • 배열 크기가 2인 새로운 배열을 list 라는 객체로 생성
  • for 문을 사용해 0 부터 hobby 의 length 까지 i를 증가시키며 반복
  • hobby 의 i를 list 의 i에 담음( lisg의 i는 2개를 넘을 수 없게 됨)
  • 메서드 결과로 cnt(하비의 길이) 를 뱉음

LoginController

  • join 경로 처리
  • doPost 오버라이드
  • - req.setCharacterEncoding("UTF-8");
    - post 로 전달 시 한글 표시를 위해 추가
  • "id"의 파라메터를 변수 id 에 담음~age까지 동일
  • "hobby"의 파라메터를 getParameterValues 메서드를 사용하여 배열 변수 hobby에 담음
  • JoinModel 클래스를 가져와 model 로 객체화
  • 변수 msg 에 "가입이 완료되었습니다." 문자열 담음
  • 만약 model 객체의 매개변수 age를 넣은 ageCheck 메서드를 실행한 반환값이 false 와 같다면 msg 변수에는 "20 세 이상만 가입이 가능합니다." 문자열 담음
  • 기본적으로 입력값이 20보다 작으면 false 처리되어 "20 세 이상만 가입이 가능합니다." 문자열 출력, 넘버 포멧 예외 발생 시에는 무조건 false 처리되어 동일 문자열 출력되도록 함.

throws 처리

  • try-catch 를 사용
  • 만약 model 객체의 registHobby 메서드를 실행 결과가 0 과 같다면(취미를 하나도 선택하지 않음) msg 에 "취미는 1개 이상 선택해 주세요." 담음
  • NullPointerException 이 일어난다면 msg 에 "취미를 선택해 주세요." 담음
  • ArrayIndexOutOfBoundsException 이 일어난다면 "취미는 두 개를 넘을 수 없습니다." 를 msg에 담음
  • 어떤 경우라도 finally는 실행 - > msg를 index.jsp 로 보냄

요약

  • 예외란 사용자의 오조작이나 외부 문제로 발생하는 오류를 말한다.
  • 예외 발생 시 프로그램이 멈추지 않고 진행할 수 있도록 예외 처리를 해준다.
  • Try-catch 는 예외가 발생한 곳에서 처리하는 방법이다.
  • Throws 는 작업을 지시한 메서드 에게 처리를 넘기는 것이다.
  • Runtime Exception 은 실행해 봐야 알 수 있다.
  • Exception 은 coding 중에 알 수 있다.
  • 모든 exception 의 부모는 Exception class 이다.

벌써 금요일이다.. 시간 왜 이리 빨러😮

profile
JAVA 개발자로 가는 길

0개의 댓글

관련 채용 정보