본문 바로가기
레거시

2022.02.16의 기록

by GroovyArea 2022. 2. 16.

▶ 오늘 실현 가능한 세부 목표

 

=>  공부 관련

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 메서드 : 클라이언트의 요청을 처리하기 위해 자동 호출되는 메소드
  • ⇒ 클라이언트가 웹프로그램을 요청할 때마다 반복적으로 호출

 

  1. 클라이언트의 모든 요청을 받을 수 있도록 서블릿 설정 - 단일 집입점의 기능 구현 > Front Controller Pattern(Design pattern)
  • ⇒ @WebServlet(”URL”) : 서블릿 클래스를 웹프로그램(서블릿)으로 등록하고 URL 주소를 매핑하는 어노테이션 ⇒ URL 주소에 패턴문자(* 또는 ?)를 사용하여 설정 가능
  • ⇒ @WebServlet(”*.do”) : 클라이언트가 XXX.do 형식의 URL 주소로 요청한 경우 서블릿 실행
  • ⇒ @WebServlet 어노테이션 대신 web.xml 파일에서 서블릿 클래스를 웹프로그램으로 등록하여 URL 주소를 매핑
  • web.xml에서 매핑하는 방법도 있음.
  1. 클라이언트의 요청 분석 : 요청 URL 주소 이용
  • HttpServletRequest.getRequestURI() : 요청 URL 주소의 URI를 반환하는 메서드
  • HttpServletRequest.getContextPath() : 요청 URL 주소의 컨텍스트 경로를 반환하는 메서드
  1. 클라이언트 요청에 대한 처리 : 뷰 관련 정보를 반환받아 저장
  • ⇒ 모델(Model) 역할의 클래스로 인스턴스를 생성하여 요청 처리 메서드 호출
  • ⇒ 하나의 요청에 대해 하나의 모델 클래스의 요청 처리 메서드는 뷰 관련 정보를 반환 —> Command Controller Pattern(Design pattern)
  • 클라이언트 요청에 대한 모델 클래스 매핑 설계

 개인 공부 관련

 

1. 소스 코드 관련 

문제 : 소스 코드가 잘 이해되지 않을 때는 어떻게 해야 될까? (머릿속으로만 생각하는편)

해답 : 단계별 변화를 그림으로 그려보면 개념 정리에 확실한 도움이 됨.

 

java.lang패키지와 유용한 클래스

Object 클래스

  • 최고 조상 클래스
  • equals() : 객체의 참조변수를 받아 비교하여 논리 값을 반환하는 메서드
  • toStrng() : 인스턴스에 대한 정보를 제공할 목적으로 정의한 것. 보통 오버라이드해서 사용.
  • 얕은 복사와 깊은 복사
  • ⇒ 포인트는 값만 복사인가 참조하고 있는 객체까지 복사하는 가의 문제
  • getClass(): 자신이 속한 클래스의 Class객체를 반환하는 메서드

Class 클래스

  • Class객체는 클래스의 모든 정보(CLAZZ)를 담고 있으며, 클래스 당 1개만 존재한다.
  • 클래스 파일이 ClassLoader에 의해 메모리에 올라갈 때 , 자동으로 생성됨. ⇒ 실행 시 필요한 클래스를 동적으로 메모리에 로드하는 역할
  • 기존에 생성된 클래스 객체가 메모리에 존재하는지 확인 후 있으면 객체의 참조를 반환하고 없으면 클래스 패스( classpath)에 지정된 경로를 따라서 클래스 파일을 찾음. 못 찾을 시 ClassNotFountException발생, 찾을 시 해당 클래스 파일을 읽어서 Class 객체로 변환.

 

  • Class 객체를 얻는 방법
  1. 생성된 객체로부터 얻는 방법
  2. 클래스 리터럴(*.class)로 부터 얻는 방법
  3. 클래스 이름으로 부터 얻는 방법 (forName()) ⇒ 특정 클래스 파일, 예로 DB 드라이버를 메모리에 올릴 때 주로 사용
  • 동적으로 객체를 생성하고 메소드를 호출하는 방법 : 리플렉션 API 참고

String 클래스

  • 기존 언어는 문자형의 배열이나 자바에서는 문자열을 위한 클래스로 제공
  • String 인스턴스는 내용 변경 불가능, 새로운 인스턴스가 생성되는 것이다.
  • 문자열의 리터럴은 컴파일 시 클래스 파일에 저장된다. 같은 건 한번만 저장.

 

  • 문자 인코딩 변환
  • ⇒ getBytes(String charsetName) : 해당 문자열을 원하는 인코딩 형식으로 변환

 

  • String.format()
  • ⇒ 형식화된 문자열을 만들어내는 간단한 방법

 

Collection Framework

  • 데이터 군을 저장하는 클래스들을 표준화한 설계
  • 컬렉션 : 다수의 데이터, 즉 데이터 그룹
  • 프레임워크 : 표준화된 프로그래밍 방식

1. 컬렉션 프레임워크의 핵심 인터페이스

  • List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용함.
  • Set : 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음.
  • Map : 키와 값의 쌍으로 이루어진 데이터의 집합, 순서는 유지되지 않고, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.

LinkedList

  • 배열의 단점
  1. 크기를 변경할 수 없다. ( 새로운 배열을 생성해서 데이터를 복사) = >메모리 낭비
  2. 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다. 배열의 중간에 데이터 추가 시 , 빈자리를 만들기 위해 다른 데이터들을 복사해서 이동해야 함.
  • 이 단점을 보완하여 링크드 리스트 자료구조가 고안 됨.
  • 다음 노드의 주소를 가지는 불연속적 데이터의 연결한 형태 ⇒ 단방향
  • 이전 노드의 주소를 가지는 참조변수를 추가한 DoubleLinkedList도 있음
  • 결론 1 : 순차적으로 추가&삭제하는 경우에는 ArrayList가 LinkedList보다 빠르다.
  • 결론 2 : 중간 데이터를 추가&삭제하는 경우에는 LinkedList가 ArrayList보다 빠르다.

2. Iterator, ListIterator, Enumeration

  • 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스

Iterator

  • 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고, Collection인터페이스에는 iterator()를 정의함 ( Iterator(Iterator를 구현한 클래스의 인스턴스)를 반환)
  • 공통 인터페이스를 정의해서 표준을 정의하고 구현하여 표준을 따르도록 함으로써 코드의 일관성을 유지하여 재사용성을 극대화하는 것이 객체지향 프로그래밍의 중요한 목정 중의 하나.

ListIterator

  • Iterator에 양방향 조회기능추가 (List를 구현한 경우에만 사용가능)

Enumeration

  • Iterator의 구버전 기능 같음.

TreeSet

  • 이진 검색트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스
  • 이진 검색트리 : 정렬, 검색, 범위 검색에 높은 성능을 보이는 자료 구조
  • Set 인터페이스를 구현했으므로 중복된 데이터의 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장순서를 유지하지도 않는다.

특징

  1. 모든 노드는 최대 두 개의 자식노드를 가질 수 있다
  2. 왼쪽 자식노드의 값은 부모노드의 값보다 작고 오른쪽 자식노드의 값은 부모노드의 값보다 커야 한다
  3. 노드의 추가 삭제에 시간이 걸린다.(순차적으로 저장하지 않으므로)
  4. 검색(범위검색)과 정렬에 유리하다
  5. 중복된 값을 저장하지 못한다.
  • 문자열의 경우 정렬순서는 문자의 코드값이 기준이 되므로, 오름차순 정렬의 경우 코드값의 크기가 작은 순서에서 큰 순서 , 즉 공백, 숫자, 대문자, 소문자 순으로 정렬되고 내림차순의 경우 그 반대.

해싱과 해시함수

  • 해싱이란 해시함수를 이용해서 데이터를 Hash Table에 저장하고 검색하는 기법을 말한다.
  • 해시함수는 데이터가 저장되어 있는 곳을 알려 주기 때문에 다량의 데이터 중에서도 원하는 데이터를 빠르게 찾을 수 있다.
  • 해싱을 구현한 컬렉션 클래스로는 HashSet, HashMap, HashTable 등이 있다.

 


 파이널 프로젝트 관련

운동(필라테스 & PT) 중계 플랫폼 결정!

 

오늘의 짐

  1. 커뮤니티 (pt 후기, 운동 질문, 헬스장 질문, 자유 질의응답) ⇒ 자유로운 느낌?
  2. 식단, 운동용품 쇼핑몰
  3. 중계 (헬스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