▶ 오늘 실현 가능한 세부 목표
=> 공부 관련
1) 배운 내용 복습
2) 자바의 정석 9장 String, StringBuilder&StringBuffer 차이 확실히
3) 자바의 정석 11장 컬렉션 프레임워크
4) MVC 적용 시켜 자바 프로그램 슬슬 만들기 시작
=> 파이널 프로젝트 관련
1) 파이널 사이트 알아본 것으로 회의
2) 구글 크롬 디버깅 공부
▶ 수업 공부 관련
MVC 패턴
모델 1 방식
- 기존 방식은 JSP 위주의 모델 1방식
- 웹브라우저의 요청이 JSP에 바로 요청된다.
- 요청한 작업을 수행하고 그 결과를 클라이언트에게 출력해준다.
모델 2 방식
- 웹 브라우저의 요청을 하나의 서블릿이 받게 된다.
- 서블릿은 웹브라우저의 요청을 앎자게 처리한 후 그 결과를 보여줄 jsp로 포워딩한다.
- 포워딩을 통해서 요청 흐름을 받은 JSP 페이지는 결과화면을 클라이언트에 전송한다. 즉 서블릿이 비즈니스 로직부분을 처리하게 되는 것이다
MVC 디자인 패턴
- 모델 : 비즈니스 영역의 상태정보를 처리
- 뷰 : 비즈니스 영역에 대한 프레젠테이션(사용자가 보게될 결과 화면)을 담당
- 컨트롤러 : 사용자의 입력 및 흐름 제어를 담당한다.
순서
요청 → 비즈니스 로직처리 → 뷰 선택 → 응답
핵심
- 비즈니스로직을 처리하는 모델과 결과화면을 보여주는 뷰가 분리되었음
- 어플리케이션의 흐름제어나 사용자의 처리요청은 컨트롤러에 집중된다.
MVC의 컨트롤러는 Servlet
Model 1 에서 2로 바꾸는 과정
- DAO 메소드에서 catch문을 없애고 예외 던지기
- Service 클래스 : 모델 클래스의 요청 처리 메소드에게 데이타 처리 기능을 제공하기 위한 클래스
- ⇒ 컴퍼넌트 클래스 - 단위 프로그램(모듈)
- ⇒ DAO 클래스의 메서드를 호출하여 웹프로그램에게 요청에 대한 처리 기능을 메서드로 제공
컨트롤러
- 컨트롤러(Controller) : 클라이언트의 모든 요청을 받아 요청에 대한 처리는 모델(Model : 클래스)을 이용하여 구현하고 처리결과를 뷰(View : JSP)에게 전달하여 응답되도록 이동하는 웹프로그램
- service 메서드 : 클라이언트의 요청을 처리하기 위해 자동 호출되는 메소드
- ⇒ 클라이언트가 웹프로그램을 요청할 때마다 반복적으로 호출
- 클라이언트의 모든 요청을 받을 수 있도록 서블릿 설정 - 단일 집입점의 기능 구현 > Front Controller Pattern(Design pattern)
- ⇒ @WebServlet(”URL”) : 서블릿 클래스를 웹프로그램(서블릿)으로 등록하고 URL 주소를 매핑하는 어노테이션 ⇒ URL 주소에 패턴문자(* 또는 ?)를 사용하여 설정 가능
- ⇒ @WebServlet(”*.do”) : 클라이언트가 XXX.do 형식의 URL 주소로 요청한 경우 서블릿 실행
- ⇒ @WebServlet 어노테이션 대신 web.xml 파일에서 서블릿 클래스를 웹프로그램으로 등록하여 URL 주소를 매핑
- web.xml에서 매핑하는 방법도 있음.
- 클라이언트의 요청 분석 : 요청 URL 주소 이용
- HttpServletRequest.getRequestURI() : 요청 URL 주소의 URI를 반환하는 메서드
- HttpServletRequest.getContextPath() : 요청 URL 주소의 컨텍스트 경로를 반환하는 메서드
- 클라이언트 요청에 대한 처리 : 뷰 관련 정보를 반환받아 저장
- ⇒ 모델(Model) 역할의 클래스로 인스턴스를 생성하여 요청 처리 메서드 호출
- ⇒ 하나의 요청에 대해 하나의 모델 클래스의 요청 처리 메서드는 뷰 관련 정보를 반환 —> Command Controller Pattern(Design pattern)
- 클라이언트 요청에 대한 모델 클래스 매핑 설계
▶ 개인 공부 관련
1. 소스 코드 관련
문제 : 소스 코드가 잘 이해되지 않을 때는 어떻게 해야 될까? (머릿속으로만 생각하는편)
해답 : 단계별 변화를 그림으로 그려보면 개념 정리에 확실한 도움이 됨.
java.lang패키지와 유용한 클래스
Object 클래스
- 최고 조상 클래스
- equals() : 객체의 참조변수를 받아 비교하여 논리 값을 반환하는 메서드
- toStrng() : 인스턴스에 대한 정보를 제공할 목적으로 정의한 것. 보통 오버라이드해서 사용.
- 얕은 복사와 깊은 복사
- ⇒ 포인트는 값만 복사인가 참조하고 있는 객체까지 복사하는 가의 문제
- getClass(): 자신이 속한 클래스의 Class객체를 반환하는 메서드
Class 클래스
- Class객체는 클래스의 모든 정보(CLAZZ)를 담고 있으며, 클래스 당 1개만 존재한다.
- 클래스 파일이 ClassLoader에 의해 메모리에 올라갈 때 , 자동으로 생성됨. ⇒ 실행 시 필요한 클래스를 동적으로 메모리에 로드하는 역할
- 기존에 생성된 클래스 객체가 메모리에 존재하는지 확인 후 있으면 객체의 참조를 반환하고 없으면 클래스 패스( classpath)에 지정된 경로를 따라서 클래스 파일을 찾음. 못 찾을 시 ClassNotFountException발생, 찾을 시 해당 클래스 파일을 읽어서 Class 객체로 변환.
- Class 객체를 얻는 방법
- 생성된 객체로부터 얻는 방법
- 클래스 리터럴(*.class)로 부터 얻는 방법
- 클래스 이름으로 부터 얻는 방법 (forName()) ⇒ 특정 클래스 파일, 예로 DB 드라이버를 메모리에 올릴 때 주로 사용
- 동적으로 객체를 생성하고 메소드를 호출하는 방법 : 리플렉션 API 참고
String 클래스
- 기존 언어는 문자형의 배열이나 자바에서는 문자열을 위한 클래스로 제공
- String 인스턴스는 내용 변경 불가능, 새로운 인스턴스가 생성되는 것이다.
- 문자열의 리터럴은 컴파일 시 클래스 파일에 저장된다. 같은 건 한번만 저장.
- 문자 인코딩 변환
- ⇒ getBytes(String charsetName) : 해당 문자열을 원하는 인코딩 형식으로 변환
- String.format()
- ⇒ 형식화된 문자열을 만들어내는 간단한 방법
Collection Framework
- 데이터 군을 저장하는 클래스들을 표준화한 설계
- 컬렉션 : 다수의 데이터, 즉 데이터 그룹
- 프레임워크 : 표준화된 프로그래밍 방식
1. 컬렉션 프레임워크의 핵심 인터페이스
- List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용함.
- Set : 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음.
- Map : 키와 값의 쌍으로 이루어진 데이터의 집합, 순서는 유지되지 않고, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.
LinkedList
- 배열의 단점
- 크기를 변경할 수 없다. ( 새로운 배열을 생성해서 데이터를 복사) = >메모리 낭비
- 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다. 배열의 중간에 데이터 추가 시 , 빈자리를 만들기 위해 다른 데이터들을 복사해서 이동해야 함.
- 이 단점을 보완하여 링크드 리스트 자료구조가 고안 됨.
- 다음 노드의 주소를 가지는 불연속적 데이터의 연결한 형태 ⇒ 단방향
- 이전 노드의 주소를 가지는 참조변수를 추가한 DoubleLinkedList도 있음
- 결론 1 : 순차적으로 추가&삭제하는 경우에는 ArrayList가 LinkedList보다 빠르다.
- 결론 2 : 중간 데이터를 추가&삭제하는 경우에는 LinkedList가 ArrayList보다 빠르다.
2. Iterator, ListIterator, Enumeration
- 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스
Iterator
- 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고, Collection인터페이스에는 iterator()를 정의함 ( Iterator(Iterator를 구현한 클래스의 인스턴스)를 반환)
- 공통 인터페이스를 정의해서 표준을 정의하고 구현하여 표준을 따르도록 함으로써 코드의 일관성을 유지하여 재사용성을 극대화하는 것이 객체지향 프로그래밍의 중요한 목정 중의 하나.
ListIterator
- Iterator에 양방향 조회기능추가 (List를 구현한 경우에만 사용가능)
Enumeration
- Iterator의 구버전 기능 같음.
TreeSet
- 이진 검색트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스
- 이진 검색트리 : 정렬, 검색, 범위 검색에 높은 성능을 보이는 자료 구조
- Set 인터페이스를 구현했으므로 중복된 데이터의 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장순서를 유지하지도 않는다.
특징
- 모든 노드는 최대 두 개의 자식노드를 가질 수 있다
- 왼쪽 자식노드의 값은 부모노드의 값보다 작고 오른쪽 자식노드의 값은 부모노드의 값보다 커야 한다
- 노드의 추가 삭제에 시간이 걸린다.(순차적으로 저장하지 않으므로)
- 검색(범위검색)과 정렬에 유리하다
- 중복된 값을 저장하지 못한다.
- 문자열의 경우 정렬순서는 문자의 코드값이 기준이 되므로, 오름차순 정렬의 경우 코드값의 크기가 작은 순서에서 큰 순서 , 즉 공백, 숫자, 대문자, 소문자 순으로 정렬되고 내림차순의 경우 그 반대.
해싱과 해시함수
- 해싱이란 해시함수를 이용해서 데이터를 Hash Table에 저장하고 검색하는 기법을 말한다.
- 해시함수는 데이터가 저장되어 있는 곳을 알려 주기 때문에 다량의 데이터 중에서도 원하는 데이터를 빠르게 찾을 수 있다.
- 해싱을 구현한 컬렉션 클래스로는 HashSet, HashMap, HashTable 등이 있다.
▶ 파이널 프로젝트 관련
운동(필라테스 & PT) 중계 플랫폼 결정!
오늘의 짐
- 커뮤니티 (pt 후기, 운동 질문, 헬스장 질문, 자유 질의응답) ⇒ 자유로운 느낌?
- 식단, 운동용품 쇼핑몰
- 중계 (헬스PT, 필라테스PT)
참고 사이트 :
https://www.woondoc.com/home ⇒ 운동닥터 (중계쪽 참고)
https://www.ngym.co.kr/ ⇒ 니짐내짐
https://ohou.se/ 메인화면 참고
반응형
'레거시' 카테고리의 다른 글
2022.02.18의 기록 (0) | 2022.02.18 |
---|---|
2022.02.17의 기록 (0) | 2022.02.17 |
2022.02.15의 기록 (0) | 2022.02.15 |
2022.02.14 (개념 정리) (0) | 2022.02.15 |
2022-02-14의 기록 (0) | 2022.02.14 |