이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함!
String 관련 메서드들 재확인 및 추가 예시 진행
문자열(String)의 기능들
util.jsp
![](https://velog.velcdn.com/images/ritina21/post/bb9d2768-3b87-4f61-9242-4e216648da88/image.png)
- My First Program Language is JAVA 에 대하여
- utils 라는 경로에 action 속성의 값은 charAt, val 는 4
- 만약 EL 태그 charAt 이 null 이 아니면 "답 : ${charAt}"을 표시
- 이하 동일
![](https://velog.velcdn.com/images/ritina21/post/2e19ba83-704d-4328-b297-fb850cc7bf3a/image.png)
controller
![](https://velog.velcdn.com/images/ritina21/post/c2925832-dbff-4cd6-b7bb-0627a9775d5a/image.png)
- 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 메서드
![](https://velog.velcdn.com/images/ritina21/post/47228419-cbd5-45f7-a502-bc28da3f2347/image.png)
- text에 toLoweCase 메서드 적용(전체 문자열 소문자로 변환)하여 변수 lowerText 에 담음
- for 문 사용하여 i를 0부터 문자열의 길이만큼 증가 -> 만약 문자열에 메서드 charAt 에 i를 담고, i의 값이 a와 같다면 i+공백을 result에 담아줌
![](https://velog.velcdn.com/images/ritina21/post/55c73aa5-1e2a-4366-8c89-b515b676a131/image.png)
StringBuffer 와 StringBuilder
-
String 은 용량이 고정되기 때문에 문자열 추가 시 객체를 계속 생성한다.
- String str = "문자열을";
- str += "추가하면";
- str += "각 객체가 생성된다.";
![](https://velog.velcdn.com/images/ritina21/post/58e21c7d-517a-4122-89d9-50fb90db5de6/image.png)
-
StringBuffer 와 StringBuilder 는 용량이 변화하므로 새로운 객체를 생성하지 않는다.
- StringBuffer buffer =new
- StringBuffer("문자열을");
- buffer.append("추가하면");
- buffer.append("한 객체의 크기만 늘어 난다.");
- System.out.println(buffer);
![](https://velog.velcdn.com/images/ritina21/post/60f7fbf4-19c4-4a3c-8c1e-2ae123aebb27/image.png)
-
StringBuffer 와 StringBuilder 의 차이
![](https://velog.velcdn.com/images/ritina21/post/8af9d63c-b14d-4778-a8a6-584dffcf5454/image.png)
접근성 문제로 일반적으로 StringBuffer 사용
![](https://velog.velcdn.com/images/ritina21/post/90b3f75e-d472-4b2f-a0a4-ec630f82f6c1/image.png)
-
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): 사용자의 오조작이나 외부 문제로 발생하는 오류
![](https://velog.velcdn.com/images/ritina21/post/01538b82-298a-4216-8607-6cc4d5daa10b/image.png)
Exception의 종류
- 예외는 또 일반 예외(Exception)와 실행 예외(Runtime Exception)로 분리된다.
![](https://velog.velcdn.com/images/ritina21/post/1a402ec1-46ff-4ab0-8062-cdb64fb83707/image.png)
- 일반 예외는 JVM 에서 필요하다고 판단하면 자동으로 예외처리를 해준다.
- 그래서 우리는 주로 Runtime Exception 에 대해서만 신경을 쓰도록 하자.
- 아래는 앞으로 많이 접하게 될 Runtime Exception 들이다.
![](https://velog.velcdn.com/images/ritina21/post/5a4119b9-d202-44f8-9cdf-b6eaa1f20d11/image.png)
예외 처리
- Exception 은 불가피한 외부 문제로 발생하므로 프로그램이 정지하지 않도록 해야 한다.
- 그래서 예외 처리를 통해 exception 발생 시에도 프로그램이 정상작동 하도록 한다.
- 예외 처리에는 try-catch 와 throws 라는 두 가지 방법을 사용한다.
![](https://velog.velcdn.com/images/ritina21/post/83877093-c64e-4da8-8bc5-f963c5cd31a8/image.png)
Exception과 예외 처리 예시
index
![](https://velog.velcdn.com/images/ritina21/post/e2fcc8e3-8fbd-41dc-af2d-fc72b4ea8801/image.png)
![](https://velog.velcdn.com/images/ritina21/post/13702be2-c838-4b0b-89e0-5d5d83a8beaa/image.png)
- action 속성 이름이 join 인 로그인 페이지 생성
- EL 태그 msg 를 변수 msg에 담음
- 만약 msg 가 공백이 아닐 시 msg 를 담은 경고창 뜸
JoinModel
![](https://velog.velcdn.com/images/ritina21/post/c6ef2f49-e3fa-48cc-babc-f38f830f7b75/image.png)
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
![](https://velog.velcdn.com/images/ritina21/post/de7f06b0-f601-4971-9a5f-c5002d540b12/image.png)
- 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 이다.
벌써 금요일이다.. 시간 왜 이리 빨러😮