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

Nicole Gold·2023년 8월 28일
0

K-digital training

목록 보기
24/60

비 와서 10분 늦고 앞부분 놓침 😢 넘나리 힘들다

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

Custom Exception

  • 기존 예외 이외에도 새로운 예외를 만들 수도 있다.
  • 한 가지 규칙이 있다면 반드시 [Exception | RuntimeException] 클래스를 상속받아야 한다.
  • 또한 테스트를 위해서 강제로 특정 예외를 발생시킬 수 있다.

index


1. action 속성이 join 이고 method 가 post 인 폼 생성
2. name 이 id 인 ID 입력창 생성
3. name 이 age 이고 placeholder 로 "20세 이상만 가입 가능"이라고 적힌 입력 창 생성
4. 서버에 form 전송하는 가입 버튼 생성
5. EL 태그를 가져와서 변수 msg에 담음
6. 만약 msg가 공백이 아니면 alert 창으로 msg 출력


controller


1. /join 경로로 들어온 것을 처리한다.
2. 이름이 id인 것의 파라메터를 가져와서 변수 id에 담음
3. 이름이 age인 것의 파라메터를 가져와서 변수 age에 담음
4. JoinModel 이라는 클래스를 model 로 객체화 해옴
5. page 변수에 result.jsp 를 담음

JoinModel 로 이동

model

  1. String id 를 매개변수로 한 reservedCheck 메서드를 실행하면(이때 throws 를 넣어야 하지만 runtime 예외라(발생할지 알 수 없기 때문에 넣지 않아도 동작된다)
    String 배열인 변수 list 에 "admin","tester","member" 가 담김
    변수 str 에 list 배열을 하나씩 넣고
    만약 id 가 str 과 같다면 ReserveException을 객체화한 것으로 throw 해서 id+"는 예약어라 사용할 수 없습니다." 라고 개발자용으로 보여 준다.
  2. String age 를 매개변수로 받는 adultCheck 메서드를 실행하면 예외가 발생했을 때 AdultException, NumberFormatException 로 던진다.
    age 를 숫자로 변환해서 변수 n 에 담는다.
    만약 n이 20보다 작으면 객체화한 AdultException 을 throw 해서 "20세 미만은 가입 불가" 라고 개발자용으로 보여 준다.

ReserveException


1. ReserveException 클래스는 RuntimeException 을 상속받음
2. 매개변수 message를 받는 메서드이며 message 를 반환한다.

AdultException


1. AdultException 는 Exception 을 상속받음
2. 매개변수 message를 받는 메서드이며 message 를 반환한다.

다시 controller

  • try / catch 문을 사용하여 만약 model의 reservedCheck 메서드에 id 를 매개변수로 넣어 실행

  • "id" 라는 이름에 id 값을 넣어줌

  • ReserveException 예외가 캐치되면 간단한 예외 메시지를 출력

  • "msg" 라는 이름으로 id+"는 예약어입니다." 를 담음

  • index.jsp 를 page 변수에 담음

  • try / catch 문을 사용

  • model 의 adultCheck 메서드에 age 매개변수 넣음

  • "age" 이름에 age 값 담음

  • NumberFormatException 캐치 시 예외 메시지 보여줌

  • index.jsp 를 page 변수에 담음

  • "msg" 이름에 "숫자 외의 문자를 넣지 마세요." 담음

  • AdultException 캐치 시 예외 메시지 보여줌

  • index.jsp 를 page 변수에 담음

  • "msg" 이름에 "20세 미만은 가입할 수 없습니다." 담음

  • 변수 dis 에 page 를 담고 dis 를 forward 해줌

Collection Framework

  • Collection Framework 는 Collection interface 를 최상위 로 하는 자료구조 interface 이다.
  • List, Set, Map interface 를 implements 하여 각 collection 으로 사용한다.

  • Collection Framework 에서 데이터 추가, 삭제, 검색 방법은 거의 비슷하다.
  • collection interface 에서 같은 메서드를 오버라이드 받기 때문에

요약

  • Collection framework 자료구조 최상위 interface 이다.
  • 크게 list, set, map interface 로 나눌 수 있다.
  • 이들은 선언 시 크기를 지정하지 않는다. (크기가 거의 무한하다)
  • 각 interface 를 구현 받은 class 들의 사용법은 비슷하다.

List Collection

ArrayList

  • Array List 는 index 로 객체를 관리한다는 점에서는 Array 와 유사하다.
  • 차이점은 Array 와 달리 index 가 유연하다는 점이다.
  • Array List 는 객체 삭제 추가 시 인덱스가 1 씩 당겨지거나 미뤄지게 된다.
  • 때문에 빈번한 객체의 추가, 삭제가 일어날 때 다소 무리가 간다.

index

  • TO DO LIST 라는 테이블 생성
    class 는 list 이고 colgroup 으로 width 를 먼저 설정해 준다.

    colgroup 태그는 사용되는 테이블의 컬럼(td 태그)에 적용할 스타일 width와 bakcground를 해당 태그에서 미리 적용할 수 있게 한다. 특히 각 컬럼의 길이를 설정하는 데 가장 많이 쓰인다.

  • 들어갈 내용은 순서대로 순서/해야 할 일/ 삭제

  • forEach 문을 이용하여 EL 태그로 가져온 list 덩어리를 todo 라는 이름을 설정하고 안의 값을 stat 라는 이름으로 설정한다.

  • 2행의 1열에는 stat의 index 를

  • 2행의 2열에는 todo 값을( 아래 form 태그 내의 name 속성의 "todo")

  • 2행의 3열에는 delete 경로의 idx 파라미터로 stat의 index를 가져온다.

  • action 이름이 add 이고 method 가 post 인 form 생성

  • 테이블 생성, class 이름은 input

  • input type 이 text 이고 name 속성이 todo 인 col 생성 button 생성

controller

  • url 패턴이 /add 와 /delete 인 경로를 처리하는 controller
  • 변수 addr 에 URI 값을 가져와서 contextPath의 길이만큼부터 자른 값을 넣음
  • ListModel 을 객체화

ListModel

  • String 데이터 타입만 받는 ArrayList 를 list 라는 변수로 객체화해옴

  • getList 메서드는 변수 list 를 반환값으로 뱉음

  • addList 라는 메서드는 todo 를 매개변수로 받아 실행됨

  • list의 가장 뒤에 todo 를 넣음

  • delList 메서드는 idx 를 매개변수로 받아서 실행됨

  • idx 를 int 타입으로 변환해 변수 index에 넣음

  • list 에서 index 를 지운 값을 변수 val 에 넣음

다시 controller

  • 만약 addr 이 /delete 와 같다면

  • idx 의 파라메터를 변수 idx 에 담음

  • model의 delList 메서드에 idx 를 넣고 실행 > 해당 인덱스의 val 을 반환함

  • "list" 이름으로 model 의 getList 메서드 실행 값을 넣음

  • 결과를 index.jsp 로 보냄

  • "todo" 의 파라메터를 변수 todo 에 담음

  • 변수 addr 에 URI 값을 가져와서 contextPath의 길이만큼부터 자른 값을 넣음

  • 만약 addr 이 "/add" 와 같다면

  • ListModel 을 객체화해서 model 변수에 담음

  • model의 addList 메서드를 매개변수 todo 를 넣고 실행

  • model 의 getList 메서드 실행 결과를 list 변수에 넣음

  • 그 값을 "list"라는 이름으로 index.jsp 로 보냄

Vector

  • Vector 와 Array List 와의 차이점은 하나이다.
  • 바로 특정 Thread 가 접근 시 다른 Thread 가 접근할 수 없다는 점이다.
  • 쉽게 말해 누군가가 사용하고 있다면 다른 사람은 기다려야 한다는 것이다.

index



body
  1. action 이름이 add 인 post 타입 form 생성
  2. 텍스트를 입력할 수 있는 입력창 name 속성은 todo / 입력 버튼
  3. c:if 문 사용 : EL 태그로 가져온 list의 size 가 0일 때는 "나만의 할 일을 입력하세요." 출력
  4. 만약 list size 가 0보다 크다면 clear 라는 이름을 가진 '모두 삭제' 링크 출력
  5. 그리고 테이블 출력 : 각 컬럼의 width % 설정해 주고 컬럼 이름 지정
  6. c:if 문 사용하여 EL 태그로 가져온 list 덩어리를 이름은 todo, 값은 stat 라고 굴려줌
  7. 1열에 stat 의 인덱스 넘버 출력
    2열에 text 타입의 name 속성이 val 이고 값은 EL 태그로 가져온 todo 가 출력됨
    3열에 onclick 이벤트가 걸려 있는 수정 버튼 출력함. 이벤트가 벌어지면 update 라는 함수가 실행됨. 매개변수는 el 태그로 자겨온 stat의 인덱스 넘버이며 this(이벤트 당사자 객체) 에 적용됨
    4열에 삭제가 출력. 링크된 위치는 remove 라는 이름이며 파라메터는 idx 라는 이름인데 값에 stat의 index 를 넣을 것임(즉 stat 의 index 삭제할 거)
script
  1. 함수 update 는 매개변수 idx 와 당사자 객체를 받아서 실행됨
  2. 당사자 객체의 tr의 자손 중 input 타입이고 name이 val 인 녀석의 값을 변수 val 에 담는다.
  3. 콘솔에 인덱스와 값을 찍어준다.
  4. 세팅된 인덱스 값에 인덱스를 넣고 세팅된 val 값을 val에 넣어서 링크로 보낸다.
controller


1. url "/"(다 받음), "/add", "/remove", "/clear", "/set" 경로를 처리하는 컨트롤러
2. doGet 메서드와 doPost 메서드를 오버라이드 받아서 둘 다 dual 이라는 메서드에 리퀘스트 리스폰스 매개변수로 넣어 실행시킴

  1. dual 메서드 실행(get, post 모두 이 메서드에서 처리)
    uri 변수에 uri 를 요청해서 넣고, ctx 변수에 contextPath 를 넣음

ContextPath는 특정 웹 애플리케이션을 가리키는 URL의 일부를 말함. 클라이언트에서 URL을 요청할 때 어떤 애플리케이션에 요청을 할지에 대한 구분이 된다. 예를 들어, http://www.velog.com/ritina21 라는 URL에서 ContextPath는 ritina21가 된다.

addr 변수에 uri 에서 ctx 의 길이 이후를 잘라 넣음
RequestDispatcher 변수 dis 에는 우선 값을 비워놓고
VectorModel 클래스를 model 로 객체화 해옴

  1. 만약 addr 이 "/"와 같다면 "list"라는 이름으로 model 객체의 getList 라는 메서드를 실행해서 list.jsp 로 보냄
  2. 만약 addr이 "/add"와 같다면 todo의 파라메터를 가져와서 todo 변수에 담고 model 객체의 addList 메서드를 실행함.
    그리고 ctx로 값이 전송됨(투두 리스트에 목록이 추가된 후에 다시 ctx 경로로 돌아가는 것)
  3. 만약 addr 이 "/remove" 와 같다면 idx 파라메터를 변수 idx 에 넣음
    int로 변경된 idx에 model 객체의 delList 메서드를 실행해 준 후 ctx 로 값이 전송됨(지운 후에 지워진 화면 표시)
VectorModel

  1. 타입을 String 으로 지정한 Vector 라는 클래스를 list 라는 이름으로 객체화 해옴
  2. addList 라는 메서드에 매개변수 todo 를 넣으면 todo를 매개변수로 받는 list의 add 메서드가 실행됨(todo가 마지막으로 붙음)
  3. getList 메서드는 list를 반환값으로 뱉음
  4. delList 라는 메서드는 매개변수를 int idx 로 받아서 list 객체의 remove 메서드를 실행시킴
  5. clearList 라는 메서드는 만약 list 가 비워져 있지 않으면 list 를 비움
  6. setList 라는 메서드는 매개변수로 int idx 와 String val 로 받아서 list에 set 메서드를 실행함(idx 인덱스의 값을 val 로 덮어씌우기)




  • Collection Framework 에서 데이터 추가, 삭제, 검색 방법이 비슷한 이유는 ?
    • Collection 이라는 같은 interface를 최상위로 하고 있기 때문
    • 각 interface 를 구현받은 class 들의 사용법은 비슷함(오버라이드 하는 메서드가 같기 때문)
  • Collection Framework 의 자료구조를 크게 세 가지로 나누면 ?
    • list, set, map
  • Array List 와 Array가 유사한 부분은 ?
    • 둘 다 인덱스로 객체를 관리함
  • Array List 와 Array의 차이점은 ?
    • Array List 는 index 가 유연함
    • 객체 삭제/ 추가 시 인덱스가 1씩 당겨지거나 미뤄짐
    • 빈번한 객체 추가 삭제가 일어날 때는 다소 무리가 간다.
  • Vector 와 Array List 의 차이점은 ?
    • vector 는 특정 Thread 가 접근 시 다른 Thread 가 접근할 수 없다.
  • Hash Map 의 method 가 기존과 조금 다른 이유는 ? - 정지원
  • 중간에 데이터를 추가 또는 삭제 시 Array List 보다 Linked List의 효율이 높은 이유
    는?
    • 좌우 데이터의 주소를 기억하는 구조를 갖기 때문
  • Set 에만 제공되는 기능과 역할은?
    • 중복을 허용하지 않음
    • 검색기능이 없는 대신 하나씩 꺼낼 수 있는 Iterator 를 제공
  • Set 이 get(index) 를 사용 할 수 없는 이유는 ?
    • 순서가 유지되지 않기 때문
  • 중복 값에 대한 Set 과 Map 의 차이점은 ?
    • set 은 아예 입력이 안 됨 map 은 값을 덮어씌움
  • 리스트에 동일한 클래스를 여러 개 넣을 수 있는 이유는 ?
  • 한 개의 파일 내 다수의 클래스가 가질 수 없는 접근 제한자는?
  • Map 에서 데이터를 꺼내는 두 가지 방법은 ?
    • 키만 Set 으로 가져와 key 를 따로 추출해 값을 찾는 방식
    • 키:값 을 한 쌍으로 Set 으로 가져와 각각 추출하는 방식
  • Generic 의 역할과 장점은 ?
    • 여러 타입을 저장할 수 있다.
    • 클래스를 객체화할 때마다 유연하게 클래스 내 데이터 타입을 지정할 수 있다.
profile
JAVA 개발자로 가는 길

0개의 댓글

관련 채용 정보