728x90

 

 영어

한글 

단축키 

 실행

 Run

 실행

 shift + F10

 Debug

 디버그 

 shift + F9

 편집

 Delete line at caret

 한줄 삭제

 ctrl + y 

 

 한줄 이동

 alt + shift + 방향키
 Duplicate current line or selected block

 한줄 복사 

 ctrl + d
  작성 취소

 ctrl + z

 

 작성 취소 재실행

 ctrl + shift + z

 Generate code..

 생성자&getter&setter

 alt + insert
 Toggle case for word at caret or selected block

 대소문자 변환

 ctrl + shift + u

 찾기

 Find 페이지 내에서 찾기 ctrl + f
 Find in path

 전체에서 찾기

 ctrl + shift + f
 Find next

 페이지 내 같은 문자 찾기

 F3
 To quickly open any file.

 파일이름으로 열기

 ctrl + shift + n
 View recent files

 최근 열었던 페이지

 ctrl + e

 Edit source

 매서드 소스 보기

 F4

 Call hierarchy 사용되는 곳 찾기

 ctrl + alt + h

 주석

  여러줄 주석

 ctrl + shift +c

 

 한줄 주석

 ctrl + c

  java doc alt + enter
 기타 

 public static void main

 psvm 
  System.out.println sout
 

 전체 임포트

setting > editor > general > auto import - add~~, option ~~ 체크



플러그인 추천 :  백기선님 설명보기>> 

셋팅 > 플러그인스 에서 설치 

key Promoter X  : 단축키 알려주는 프로그램 

- 몇 번 클릭해야 보여줄거냐. 
- 단축키 없는 경우 숏컷 만들라고 제안 할 것인지. 

Presentation Assistant : 영상 촬영시 유용 사용단축키 보여줌. 


톰캣 환경 설정

Add Configuration > Templates > Tomcat Server - Local [configure] 버튼  위치 등록 


단축키 사이트

>>https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdf

https://www.catalysts.cc/wissenswertes/intellij-idea-and-eclipse-shortcuts/

https://confluence.jetbrains.com/pages/viewpage.action?pageId=51939004


전체 임포트 :: https://www.mkyong.com/intellij/eclipse-ctrl-shift-o-in-intellij-idea/   : setting > editor > general > auto import > add unambiguous imports~~ 체크, Optimizs import on the ~~ 체크

https://confluence.jetbrains.com/pages/viewpage.action?pageId=51939004

728x90

HTML CSS가 만나는 법.

HTML 문법 style 속성 

<h1 style="red"></h1>

<style> html문법 .  안쪽은 css 문법

<style>

h2{color:blue}

<style>

선택자

선택자와 선언

li{
color:red;
text-decoration:underline
}

li : selector :선택자
{} : declaration : 선언
; : Decoration seperatior  : 구분자. 

ID 선택자

<li id="select">css<li>

#select{

font-size:100px

}

부모 자식 선택자

<ul id="lecture">

<li>HTML</li>

<li>CSS</li>

<ul>

<li>selector</li>

<li>declaration</li>

</ul>

<li>JavaScript</li>

</ul>

ul li{

color:red

}

바로 밑에 자식만 "> "

#lecture> li{

background-color:powderblue;

}

동시 선택 , "ol,ul"

선택자 팁

http://flukeout.github.io/

체트 씨트 : 컨닝페이퍼 같은거. 

가상 클래스 선택자 : pseudo class selector

  • :link – 방문한 적이 없는 링크
  • :visited – 방문한 적이 있는 링크
  • :hover – 마우스를 롤오버 했을 때
  • :active – 마우스를 클릭했을 때

a:active{

color:green

}

a:hover{

color: yellow

}

-> 클릭해도 hover가 뒤에 있어서 클릭이 적요이안됨

visited 는 보안때문에 일부만사용가능

:fucus{

}

가장뒤에 쓰는게 좋음 

적용순서

상속 : inheritance

<ul id="lecture">

<li>HTML</li>

<li>CSS</li>

<li>JavaScript</li>

</ul>

html{color:red;}

#lecture{color:black}

부모의 색상을 자식이 물려받는게 효율적: 적은 코드로 많은 사용.  

상속되고 상속되지 않는 속성들이 있다. 

주석

/*

*/

캐스케이딩 cascading : CSS  웹브라우저  < 사용자 < 저자  볼수있는 디자인 권리를 준다. >>> 우선순위 참고

CSS : Cascading Style Sheet 캐스케이팅(연속적인) 스타일 시트 

1990년 HTML, 

하나의 테그에 여러 CSS 중첩되었을때.

<ul id="lecture">

<li>HTML</li>

<li id="idsel" class="classel">CSS</li>

<li>JavaScript</li>

</ul>

<style>

li{color:red: !important;}

#idsel{color:blue}

.classel{color:green;}

</style>

ID 선택자  > Class선택자 > 태그선택자  : Cascading 규칙

구체적인것 >  포괄절 :: 적용 우선순위

!important;

무조건 최우선 적용

서체 다루기

크기: font-size

unit 단위  : px  vs em vs rem

px 절대적

em, rem 브라우저 설정에 따라 상대적

결론적으로 rem 을 쓰도록. 폰트 크기를 조정할 수 있는 사용자의 권리

16px     >> 검사로 보면 계속 16px

16rem;  >> 검사로 보면 브라우저가 중간이 면 16px 크게 보면 24px로 나옴

브라우저 폰트 사이즈 미디엄.... very Large. : px 를 쓰면 글자가 바뀌지 않음, rem을 쓰면 폰트크기가 바뀜

color

color name, hex(16진수), rgb(빨강, 초록, 파랑 조합)

text-align

center, left, justify

justify :  양쪾이 균등하게 분배

      p{
        text-align: justify;
        border:1px solid gray;
      }

의미 없는 텟스트 lorem ipsum 로렘이썸

font-family, font-weight, line-height

#type1{ font-size:5rem; font-family: arial, verdana,"Helvetica Neue", serif;

line-height:2; /*두배 px 사용가나 부자연*/

font:bold 5rem/2

}

#type2{

font:bold 5rem/2 arial, verdana,"Helvetica Neue", serif;

}

font-family > 우선 순위에 따른 font 지정

장식 없는것 : sans-serif

장식 있는것 serif

고정폭 : monospace

합쳐서 써도됨. 

웹폰트

사용자가 폰트가 없으면 웹폰트 다운받아서 쓰게함... 영어는 가벼우나 한국어 용량이 큰편

Standard  

<link href="https:주소" 

Specify inCSS

#font1{

font-family: 'Open Sans Con~~';

}

font face generator 검색

ttf, otf, eot... 파일로 다운가능

web-font.html  이름 지정해서 해당 폰트 만들어 사용 가능

@font-face  {

font-family:'abc':

body{

font-family:'abc'

}

레이아웃 기본

인라인 vs 블럭 레벨  inline vs block level

<h1>Hello wold</h1>

안녕하세요 <a href=""> 생활코딩</a> 입니다. 

<style>

h1, a {boder:1px solid red;}

h1{display: inline;}

a{display:block;}

</style>

인라인 엘리먼트 : a

블럭레벨 엘리먼트 (줄 전체-줄바꿈- 공간을씀) :h 태그

박스 모델 - 주사용 css 중 70%정도

높이감, 여백, 크기 조절

<p>

p테그

</p>

<p>

파라그래프

</p>

안녕하세요<a href="">생활코딩입니다. </a>입니다. 

p, a{ 

/*border-width:10px;

border-style:solid;

border-color:red;  : 테두리

*/

boder:10px solid red;

padding:20px; /* 해당 크기 만큼 화면이 벌어짐 : 접시 음식*/

margin:40px;/* 테두리와 다른 요소간 간격  : 접시 접시*/

width:50px;

hight:50px;

}

** 인라인 엘리먼트에 적용하면 width, hight 값이 무시된다. 

box-sizing 

padding, margin 이 예상과 다를때. 예측하기 쉽게 하기.
width 둘다 같을 때 다르게 보임 --> boder, margin 값이 빠진 영역 의 길이가 같음
>> box-sizing 등장. 
box-sizing:border-box ; 경계의 크기가 동일해짐. 
*{   }   모든 선택자

position - absolute, fixed

left:0;
top0;  :: absolute 지정하면 ... 더이상 부모의 소속이 아님. 부모로 설정되는것이 다 설정이 않됨
position이 있는 상위 부모가 나타나면 기준으로 해서 위치값을 정함. 
position: fixed;  위치가 바껴도 고정됨

레이아웃 활용 flex

flex : 레이아웃을 잡을 때 사용하는 기능

Layout의 흑역사. ... 

table  :표여야 하는데...의미 없는 레이아웃에서도 사용하기도...

position... reletive... absolute

float ... 이미지를 옆에 이미지 글씨 흘러가도록..

<container>

<item></item>

<item></item>

</container>

container

 item

 display

flex-direction

flex-wrap

felx-flow

justify-content

align-items

align-content

 order

flex-grow

flex-shrink

flex-basis

flex

align-self

flux

1. 부모에 display:flex;

2. 부모에 

flex-direction:row-reverse;  : 오른쪽 정렬  , default : row

flex-direction:column-reverse;  수직역순 정렬, - 높이 공백 포함 거꾸로 정렬

flex-direction::column   : 수직 순서 정렬

3. item에

flex-grow:1;  *** 칸이 n이 1씩 나눠가져서 여백이 없어짐. 

.item:nth-child(2){  /*2번째 칸*/ 

flex-grow:3;   /*item에 flex-grow가 0이면 혼자 나머지 공간꽉채움*/ 

flex-bassis:300px;   여백이 존재.. 화면작아짐.

}

.item:nth-child(3){  /*2번째 칸*/ 

flex-grow:3;   /*item에 flex-grow가 0이면 혼자 나머지 공간꽉채움*/ 

flex-bassis:300px;   /*여백이 존재.. 화면작아짐.*/

flex-shrink:2;    /*basis 값을 가지고 있을 때 줄어들 떄 비율 , 0은 작아지지 않음*/

}



Holy Grail Layout 성배 레이아웃

Header
Nav      Main        AD
Footer






728x90

모르는 단어

LoC  :Line of Code

유지보수성 (maintainability): 어떤 시스템을 얼마나 효율적/효과적으로 고칠 수 있냐 정도.  

코드베이스 : 하나의 레퍼지터리에 저장된 소스코드 뭉치 컴파일 및 배포를 독립적으로 수행하는 단위. 


기본개념. 

일반화한 개념과 자바언어의 명칭

일반 명칭 

일반적인 정의 

자바 언어의 명칭 

단위 Unit 

독립적으로 실행 가능한 코드 라인을 묶은 최소단위 

메서드 또는 생성자 

모듈 module 

가장 작은 단위 묶음 

최상위 클래스, 인터페이스, enum 

컴포넌트 component 

소프트웨어 아키텍처에 따라 정의된 시스템 최상위 구성요소 

 

시스템 System

대상 코드 베이스 전체  

 

- 컴포넌트

: 시스템 소프트웨어 아키텍처 수준에서 식별 된 최솽위 수준의 빌딩 블록. 블록-화살표 시스템 다이어그램에서 블록. 

아주 소규모 자바시스템이면 컴포넌트 피키지 관계가 1:1일지 몰라도 제법 규모가 있는 시스템에서는 패키지가 컴포넌트보다 훨씬 많다.

Apache Ant - target 이라는 묶음개념

메이븐 -pom.xml



1장. 들어가며


- 소프트 웨어의 품질 8가지 : 유지보수성, 기능 안정성, 성능 효율성, 호환성, 사용성, 믿음성, 보안성, 휴대성  

- 소프트 웨어 유지보수 네가지 

: 교정형 유지보수(corrective maintenance: 버그발견 수정), 

 적응형 유지보수(adaptive maintenance: 운영변화로 시스템 변경), 

 완료형 유지보수(perfective maintenance:시스템 사용자의 신/변경요건 반영)

 예방형 유지보수(preventive maintenance: 품질을 높이고 앞으로 닥칠 버그를 방지할 방안을 모색)

- 유지보수 3대 원칙

1. 단순한 가이드 라인을 지키기만 해도 유지보수성은 나아진다. 

2. 유지보수성은 개발 프로젝트 시작 단계부터 반드시 염두에 두어야 하고 하나씩 실천하는 자세가 중요하다. 

: 깨진 창문효과 (깨진 창문 방치시 흉악범더 더 발생)

3. 가이드 라인을 따를 것. 

- 유지 보수 가이드 라인 10개

1. 코드단위를 짧게 하라 

: 코드 단위는 15라인을 넘지 않게 작성 

: 작은 단위는 이해하고, 테스트하고, 재사용하기 쉬워 유지보수성이 좋아진다. 

리펙터링 기법 1 : 메서드 추출 : 단위 코드가 스스로를 설명하는 상태 

리펙터링 기법 2 : 메서드를 메서드 객체로 대체 

2. 코드 단위를 간단하게 짜라

: 단위당 분기점은 4개로 제한한다(멕케브 복잡도, 순한 복잡도 5로 제한:4+1). 복잡한 단위는 더 잘게 나누고 서로 뭉쳐있지 않게 한다. 

리펙터링 기법 3 : 중첩문을 보호절로 데체: . 

3. 코드는 한번만 작성하라

: 코드는 복사하지 않는다. (6라인 이상 동일하면 클론코드)

CMD: 소스 분석 툴 PMD에 포함된  클론 감지 툴

리펙트링 기법 4 : 상위 클래스 추출

4. 단위 인터페이스를 작게 하라    ----인터페이스 > 매개변수..

: 단위당 파라미터 개수는 4개 이하로 제한한다.  

리펙터링 기법 5 : 파라미터 객체 도입 :  파라미터를 객체로 추출한다. 

5. 관심사를 모듈로 분리하라.     ----모듈  > 클래스

: 모듈 간 결합을 느슨하게 하기 위해 큰 모듈은 삼가한다. 

1)개별 모듈로 나누어 일을 시키고 구현 상세는 인터페이스 안으로 감춘다.  >> 클래스를 기능별로 세분화 한다. 

2) 특정 구현부는 인터페이스 안에 숨긴다. 

3) 커스텀 코드를 서드파티 라이브러리/ 프레임워크로 대체

6. 아키텍처 컴포넌트를 느슨하게 결합하라

: 최상위 수준의 컴포넌트간 결합도를 낮춘다. 

사용자 인터페이스 > 서브스 계층 > 비지니스 로직 계층 > 데이터 추상화 계층 > 데이터 베이스 계층

7. 아키텍처 컴포넌트 균형을 잡아라. 

: 최상위 수준의 컴포넌트 개수와 상대적 크기를 균형 잡는다. 

: 컴포넌트 개수가 9개정도(6~12) 되도록 소스코드를 조직화 하고 컴포넌트 크기를 대략 균등학 맞춘다. 

8. 코드베이스를 작게 하라

: 시스템이 클수록 망가질 확률은 커진다. 시스템 크기를 적극적으로 줄인다. 

9. 테스트를 자동화 하라

: 테스트 프레임워크로 자동화한 테스트를 작성한다. 예측 가능한 리스크 적은 개발

 유형

테스트 대상 

목적 

주체 

 단위테스트

따로 분리한 하나의 단위기능 

단위코드가 의도대로 작동하는지확인 

개발자(해당단위 개발자) 

 통합테스트

적어도 두 클래스 이상의 기능, 성능, 기타 품질 특성 

시스템을 이루는 요소들이 함께 잘 작동하는지 확인 

개발자 

 종단테스트

시스템 연동-사용자 또는 다른 시스템과의연동 

시스템이 의도한 대로 작동하는지확인 

개발자 

 회기 테스트

이전에 에러가 났던 다위 클래스 시스템연동 부분의 로직 

버그가 다시 나타나지 않는지 확인 

개발자 

 인수 테스트

시스템연동- 사용자 또는 다른 시스템과 연동 

시스템이 의도한 대로 작동하는지 최종 승인

고객인수팀(개발자는 무조건 제외) 


10. 클린코드를 작성하라. 

1) 단위 수준의 코드 악취를 남기지 마라

2) 나쁜 주석을 남기지마라

3) 주석 안에 코드를 남기지 마라

4) 죽은 코드를 남기지 마라

5) 긴 식별자 이름을 남기지 말라

6) 매직 상수를 남기지 마라

7) 제대로 처리 안한 예외를 남기지 말라




728x90
CES

The International Consumer Electronics Show



https://m.terms.naver.com/entry.nhn?docId=1225202&cid=40942&categoryId=40508
728x90

13. 웹 프로그래밍 설계 모델

13-1 웹 프로그래밍 구축하기 위한 설계모델

Model 1  :

 브라우저  ⇔  WAS(웹 어플리케이션 서버)  ⇔ 데이터 베이스

                    (JSP  ⇔ Service & DAO)

HTML에 java 태그를 동시 사용... 유지보수 어려움. 


Model 2  :

 브라우저  ⇔  WAS(웹 어플리케이션 서버)  ⇔  Model ⇔ 데이터 베이스

                    (Controller ⇔ Service ⇔ DAO)

                     View (JSP)

13-2 스프링 MVC 프레임워크 설계구조

브라우저 ⇔ DispatcherServlet ⇒ HandlerMapping

                                       ⇔  HandlerAdapter  ⇔ Controller

      ⇒View(jsp)                          ⇒ 브라우저

      ⇒ ViewResolver : 처리 결과를 출력할 view 선택     


사진 출처 : http://wondongho.tistory.com/59    

 

 13-3 DispatcherServlet 설정

web.xml 서플릿을 맴핑

스프링 설정파일 있으면(servlet-context.xml) 맵핑 하여--> 스프링 컨테이너생성 : HanderMapping, HandlerAdapter, ViewResolver

초기화 파라메터에서 스프링 설정 파일 지정하지 않은경우 서블릿 별칭( appServlet-context.xml)을 이용 --> 스프링 컨테이너 생성 : HanderMapping, HandlerAdapter, ViewResolver

13-4. Controller 객체 @Controller

DispatcherServlet  ⇔  HandlerAdapter ⇔ Controller

servlet-context.xml  :   

<annotation-driven/>

 @Controller

public class HomeContoller{}


13-5 Controller 객체  @RequestMapping

DispatcherServlet  ⇔  HandlerAdapter ⇔ Controller

@RequestMapping("/success")

public String success(Model model){

     return "success";

13-6 Controller 객체  Model 타입의 파라메터

DispatcherServlet  ⇔  HandlerAdapter ⇔ Controller

@RequestMapping("/success")

public String success(Model model){

model.setAttribute("tempData", "model has data!!");

     return "success";


: 개발자는 Model 객체에 데이터를 담아서 DispatcherServlet 에전달가능

: DispatcherServlet에 전달된 Model 데이터는 View 에서 가공되어 클라이언트에게 응답처리


13-7. View 객체

DispatcherServlet  ⇔  HandlerAdapter ⇔ Controller

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<beans:property name="prefix" value="/WEB-INF/views/" />

<beans:property name="suffix" value=".jsp" />

</beans:bean>

:: 리턴값을 갖고 viewResolver 설정 값을 합쳐서 jsp를 만들어줌. 


13-8. 전체적인 웹 프로그래밍 구조

브라우저: 최초 사용자 요청 ex) ip/cho4/sucess

 ⇒ DispatcherServlet  

⇔  Controller :  @Controller 적용 클래스 검색

⇔  @RequestMapping("success") :사용자 요청 해당 메서드 실행

⇒ ViewResolver : 처리 결과를 출력할 view 선택     

⇒ View : 브라우저에 JSP 응답

14. 스프링 MVC 웹서비스

14-1. 웹 서버(Tomcat)다운로드

현재 실무에서 7, 8 주로사용
Binary Distributions > Core: >zip (pgp, sha512)

14-2. 웹 서버(Tomcat)와 이클립스 연동

Tomcat 더블클릭
Server Location > Use Tomcat Installation ( Takes control of Tomcat Installation)
Server Options > Publish module contexts to seprate XML files
Ports > HTTP/1.1    8090   (Oracle 8080 을 써서 임의 변경)

cf) 톰캣 재설치 불가 가이드 : http://linguist79.tistory.com/24

http://localhost:8090/  or  http://127.0.0.1:8090/   접속

14-3. 이클립스 STS (String Tool Suit) 설치

Eclips Marketspace > sts  설치

14-4. STS를 이용한 웹 프로젝트 생성

Spring Legacy Projedt 생성
Spring MVC Project 선택

패키지명 등록

프로젝트 명등록
com.drengneer.spring   -->접속주소 : http://localhost:8090/spring/

14-5. 스프링 MVC 프레임워크를 이용한 웹 프로젝트 분석


15. 스프링 MVC 웹서비스2

15-1. 프로젝트 전체구조

webapp: 웹과 관련된 파일 : 스프링 설정파일, jsp, HTML, 등
resources: JSP 파일을 제외한 HTML, css, js 파일등 위치
spring 폴더 스프링 컨테이너를 생성하기 위한 스프링 설정파일이 위치
views. jsp 파일
pom.xml 메인 레파지토리에서 프로젝트에 필요한 라이브러리를 내려받기 위한 메이븐 설정파일

15-2. web.xml

<servlet>

<servlet-name>appServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>appServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping> 

15-3. DispatcherServlet

웹 어플리케이션 최초 사용자의 요청이 발생되면 DispatcherServlet이 사용자의 요청을 받는다. 
따라서 DispatcherServlet을 서블릿으로 등록해주는 과정을 설정해주어야 하고 요청을 받기 위해 서블릿 맵핑 경로는 "/" 로 설정

브라우저 ⇔ DispatcherServlet ⇒ HandlerMapping

                                       ⇔  HandlerAdapter  ⇔ Controller

      ⇒ ViewResolver  ⇒View(jsp)                          ⇒ 브라우저


HandlerMapping : 컨트롤러 검색

HandlerAdapter : 메서드 실행요청

Model And View 객체 이용 

15-4. servlet-context.xml

<annotation-driven />  : 어노테이션 사용을 위한 태그

<resources mapping="/resources/**" location="/resources/" /> : 리소스   : index.html, common.css...

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.drengineer.spring" /> : 패키지 이름

15-5. Controller

15-6. View


16. STS를 이용하지 않은 웹 프로젝트

16-1. 스프링 MVC 웹 에플리케이션 제작을 위한 폴더 생성

16-2. pom.xml 및 이클립스 import

16-3. web.xml

16-4. 스프링설정파일(servlet-context.xml)생성

16-5. root-context.xml 작성

16-6. 컨트롤러와 뷰 작성

16-6. 실행


17. Service & DAO 객체 구현

17-1. 웹 어플리케이션 준비

17-2. 한글 처리

  <!-- 한글설정 -->

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>


<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- //한글설정 -->

17-2. 서비스 객체 구현

서비스 빈생성

//@Component

//@Repository

@Service


빈연결

// MemberService memberService  = new MemberService();

// @Autowired  스프링 전용, 타입으로 지정

// @Inject     자바 전용, 타입으로 지정

@Resource(name="memberService")  //자바전용 이름으로 지정, java 8부터  설정이 바뀌어 annotation 임포트 여부 확인 필요

18. Controller 객체 구현

18-1. 웹 어플리케이션 준비

18-2. @RequestMapping을 이용한 URL 맵핑

@RequestMapping("/member")
public class MemberController {


@RequestMapping(value = "/memberJoin", method = RequestMethod.POST)
public String memberJoin(Model model, HttpServletRequest request, Member member) {

18-3. 요청 파라메터

//      Member member = new Member();

// member.setMemberId(request.getParameter("memberId"));

// member.setMemberPhone2(request.getParameter("memberPhone1"));


// @RequestParam(value = "memberId", required = true) String memberId,

// @RequestParam(value = "memberId", required = false, defaultValue = "010") String memberPhone1

// member.setMemberId(memberId);

// member.setMemberPhone1(memberPhone1);

1. 멤버 커맨드 객체이용

public String memberJoin(Model model, HttpServletRequest request, Member member) {  

2.  중첩 커맨드 객체이용

PHONE: <input type="text" name="phoneList[0].memberPhone1"/>-

<input type="text" name="phoneList[1].memberPhone3"/>

19. Controller 객체 구현

19-1. @ModelAttribute

1. 닉네임 기능 : java 코드에서는 member로 사용하고 jsp 에 mem으로 사용

public String memberJoin(@ModelAttribute("mem") Member member) { // Member :: 커멘드 객체


2.  공통실행 기능
@ModelAttribute("serverTime")
public String getServicerTime(Locale locale) {
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
return dateFormat.format(date);
}

 

19-2. Model  @ ModelAndView

Model 은 view에 데이터만 전달하기위한 개게
Model And View 데이터 뷰를 함께 전달   Model

  ModelAndView mav = new ModelAndView();

mav.addObject("memberIp", request.getRemoteAddr());

mav.setViewName("memberLoginOk");

return mav;






728x90

6. 의존객체 Dependency injection

- 배터리 일체형(특정 배터리 소멸시 장난감 사야함) vs 배터리 분리형(쓸때 마다 배터리를 넣음 or 처음에 배터리가 있고 추가로 set하여 사용)

- 스프링 설정파일(applicationContext.xml)


7. 다양한 의존 객체 주입

생성자, setter, list, map 타입 DI 방법이 있다. 

7-1 :생성자를 이용한 의존 객체 주입

메소드중 첫자가 대문자면 생성자. 

public StuduntRegisterService(StudentDao studentDao){

this.studentDao= studentDao;

}

<bean id="studentDao" class="ems.member.dao.studentDao"/>

<bean id="registerService" class="ems.member.service.StudentRegisterService">

<constructor-arg ref="studentDao"></constructor-arg>

</bean>

7-2 :setter를 이용한 의존객체 주입

set 뒤의 대문자를 소문자로 바꾸고 찾음. 

 public void setJdbcUrl(String jdbcUrl){

this.jdbcUrl = jdbcUrl;

}

public void setUserId(String userId){

this.userId = userId;

}

public void setUserPw(String userPw){

this.userPw = userPw;

}

 <bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo">

<property name="jdbcUrl" value="jdbc:orclae:thin:@localhost:1521:xe"/>

<property name="userId" value="scott"/>

<property name="userPw" value="tiger"/>

</bean>

7-3 :List타입 의존 객체 주입

 public void setDevelopers(List<String> developers){

this.developers=developers;

}

 <property name="developers">

<list>

<value>Cheney.</value>

<value>Eloy.</value>

<value>Jasper.</value>

<value>Dillon.</value>

</list>

</property>

7-4 :Map타입 의존 객체 주입

public void setDevelopers(Map<String, String> administrators){

this.administrators=administrators;

}

<property name="administrators">

<map>

<entry>

<key>

<value>Cheney</value>

</key>

<value>cheny@springPjt.org</value>

//<ref bean=""> 빈주입도 가능. 

<entry>

<entry>

<key>

<value>Jasper</value>

</key>

<value>Jsper@springPjt.org</value>

<entry>

</property>


8. 스프링 설정파일 분리

applicationContext.xml  --> 분리 appCtx1.xml, appCtx2.xml, appCtx3.xml

8-1-1 MainClassUseXmls.java

String[] appCtxs = {

"classpath:appCtx1.xml",

     "classpath:appCtx2.xml",

     "classpath:appCtx3.xml"

};

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(appCtxs);

8-1-1 appCtximport.xml 연결후 xml 파일에 import

<import resource="classpath:appCtx1.xml"/> 

<import resource="classpath:appCtx2.xml"/> 

<import resource="classpath:appCtx3.xml"/> 


JVM 에서 어플리케이션을 실행할때. main 을 찾아서 실행.. 프로젝트를 실행시키면 메인 메소드 목록을 보여줌. 


8-2 빈(Bean) 범위

싱클톤 singleton : 1개만 생성되며  getBean() 메소드로 호출될 때 동일한 객체가 반환된다. 

             호출1 : getBean("A"), 호출2: getBean("B")   >> 같은 메모리 주소에 있는 객체 1개만 호출. 

프로토 타입 prototype: 싱글톤 범위와 반대의 개념, scope 속성으로 명시해 주면된다. 

<bean id="injectionBean" class="scope.ex.DependencyBean" />

<bean id="dependencyBean" class="scope.ex.DependencyBean" scope="prototype">

<constructor-arg ref="injectionBean"/> 

<property name="injectionBean" ref="injectionBean"/>

</bean>


9. 의존객체 자동 주입

9-1 의존객체 자동주입이란?

스프링 설정 파일에서 의존객체를 주입할 때 Constuctor-org 또는 property 태그로 의존대상 객체를 명시하지 않아도 

스프링 컨테이너가 자동으로 필요한 의존 대상을 찾아서 의존 대상 객체가 필요한 객체에 주입해 주는 기능

구현한 방법은 @Autowired, @Resource 어노테이션을 이용해서 쉽게 구현할 수 있다. 

9-2 @Autowired

프로퍼티, 메소드, 생성자에서 객체의 타입이 일치하는 객체를 자동으로 주입한다. 

*** 프로퍼티, 메소드에 @ autowired사용시에는 반드시 default 생성자를 명시해야 한다. 

ex) sevice 에서 dao java 코드 에서 연결.. 

wordRegisterService.java

//@Autowired

private WordDao wordDao;

@Autowired

public WordRegisterService(WordDao wordDao){

this.wordDao=wordDao;


//@Autowired

//public void setW  

<Context:annotation-config/>

<bean id="wordDao" class="com.word.dao.wordDao"/>

<bean id="registerService" class="com.word.service.wordRegisterService">

<!--<constructor-arg ref="wordDao"/>-->

</bean> 


9-3 @Resource

@Autowired : 스프링컨테이너에서 객체를 찾음. 개체가 엄청많고.. 필요한 데이터 타입을 찾아 알맞은 데이터 타입을 넣어줌 
- 생성자, 프로퍼티, 메소드, 객체의 타입(WordDao를 찾음)이 일치하는 객체를 자동으로 주입한다, 디폴트 생성자 명기

@Resouce  : 객체의 타입을 보지 않고 동일한 이름이 있는지 찾아씀.    

- 프로퍼티, 메소드 객체의 이름(wordDao1를 찾음)이 일치하는 객체를 자동으로 주입한다, 디폴트 생성자 명기

- 생성자에는 못씀. 

@Autowired

public WordRegisterService(WordDao wordDao1){

this.wordDao=wordDao;

}  


10 의존 객체 선택

10-1 의존 객체 선택

동일한 객체가 2개 이상인 경우 스프링컨테이너는 자동주입 대상 객체를 판단하지 못해서 Exception을 발생시킨다. 

@Autowired

@Qualifier("userDao")

private WordDao wordDao; 

 <bean id="wordDao" class="com.word.dao.WordDao">

<qualifier value="usedDao"/>  //퀄리 필러 : 예선통과자

</bean>

<bean id="wordDao2" class="com.word.dao.WordDao"/>

<bean id="wordDao3" class="com.word.dao.WordDao"/>


10-2 의존객체 자동주입 체크

@Autowired(required=false)

10-3 @Inject (java 기능)

@Autowired(spring 기능) 와 유사 의존객체 자동 주입 체크 못함 

@Named  : @Qualifier와 유사  , Qualifier와 달리 xml 작성 안해도 됨. 







728x90

스프링 프레임워크

DI, AOP, MVC, JDBC  : 구조 만들어 나가는 방법론들.

AOP : 관점지향 프로그래밍 : 주요부분만 작업 공통부분 뺐다 더했다. 


- 스프링프레임워크, 모바일 프레임워크(안드로이드)

내비게이션 없음 : 네비게이션 있음 = 다양한 업무 : 본연의 업무

프레임워크가 없다면 모든 기능을 다 만들어야 함.


-스프링 프레임워크 모듈: 과거에는 라이브러리를 직접 다운받았지만, XML 파일 등을 이용 의존설정 함.

스프링 프레임워크 모듈

 기능

 spring-core 

DI, IoC(Inversion of control, 제어의 역전) 기능 제공 

 spring-aop

AOP  

 spring-jdbc

데이터베이스를 적은양의 코드로 다룰 수 있는 기능 제공 

 spring-tx

트렌젝션 관련 기능제공 

 spring-webmvc 

스프링 제공 Controller, View 이용한 스프링 MVC 구현기능제공 


-스프링 컨테이너(IoC)

스프링에 객체를 생성하고 조립하는 컨테이너로 컨테이너를 통해 생성된 객체를 Bean 이라고 부른다. 

XML 문서로 객체 생성 및 속성 데이터 작성 > 스프링 컨테이너에서 객체 생성 및 조립 > 개발문서로 애플리케이션 구현

 

- 개발환경 구축: Java 설치(java.exe: JVM 구동명령, javac.exe: 컴파일러, java -version), 환경변수 설정, 이클립스 다운로드

JDK  ⊃ JRE  ⊃ API  ⊃ JVM


프로젝트 생성

-1. 프로젝트 생성 : Maven Project

Create a simple project(skip archetype selection) 선택

Use default Workspace location 선택

Group id :  내가 사용하고 있는 프로젝트를 감싸고 있는 전체 큰 프로젝트

Artifact id : 현재 해당하는 프로젝트

 >> pom.xml 파일생성  java, resouces 파일 생성 확인

-2. pom.xml 작성

디펜시즈에 spring-context 추가

플러그인에 maven-compiler-plugin 추가. 

에러 : Project configuration is not up-to-date with : 메이븐 과 java의 버전이 맞지 않음.  >> 프로젝트 우클릭 > 메이븐>업데이트 프로젝트 

프로젝트 폴더 > src > main > java, resources

-3 pom.xml 파일의 이해

pom.xml 파일은 메이븐 설정파일로 메이븐은 라이브러리를 연결해주고 빌드를 위한 플랫폼이다. 

Maven Dependencies 폴더 :: 다운된 모듈들 다운. 

resources폴더 > applicationContext.xml :  스프링 컨테이너의 객체를 만들어줌 

                   > XML 파일 생성   : applicationContext.xml

                       Beans  ::  > <bean id="tWalk" class="testPjt.TranspotationWalk"/>

 java 코드  > GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");

                 TranspotationWalk transpotationWalk = ctx.getBean("tWalk", TranspotationWalk.class)

                 transpotation.move();

ctx.close();


또 다른 프로젝트 생성 방법

<bean/>














728x90

알고리즘의 분석 : 시간 복잡도

- 알고리즘의 자원(resource)  사용량을 분석 , cf)자원: 실행시간, 메모리, 저장장치, 통신, 등
- 실행시간의 분석에 대해서 다룸
  • 시간복잡도(time complexity)

- 연산의 실행 횟수를 카운트(실행시간 은 실행환경에 따라 달라짐)
- 연산 실행 횟수는 입력 데이터의 크기에 관한 함수로 표현
- 데이터의 크기가 같더라도 실제 데이터에 따라서 달라짐 
   ex) worst-case analysis vs average-case anaysis :최악의경우 시간복잡도, 평균 시간복잡도 
  • 점근적(Asymptotic) 분석

-  Θ-, Ο-: n→∞일때 수행시간이 증가하는 growth rate로 시간복잡도로 표현

- 상대적으로 간단하고 실행환경에 비의존적이여서 가장 광범위하게 사용

  1. 상수 시간 복잡도 - 시간복잡도 : O(1) 

     ex) n개 데이터 배열 n/2 번째 데이터 반환
  2. 선형 시간 복잡도 - 시간복잡도 : O(n)

    ex) n개 데이터 저장된 배열 sum
  3. 순차 탐색 최악의 경우 - 최악의 경우 시간복잡도 : O(n)

    ex) n개 데이터 저장된 배열 target 있는지 검색

    2차식(Quadratic) : - 최악의 경우 시간복잡도 : O(n^2)

    ex) n개 데이터 저장된 배열 X, n개 데이터 저장된 배열 Y, X[i]=Y[j]의 경우 n(n-1)/2
  • 점근적(Asymptotic) 표기법

-  알고리즘 포함된 연산들의 실행 횟수를 표기하는 하나의 기법, 최고차 항 차수만으로 표시

-  가장 자주 실행되는 연산, 문장의 실행횟수를 고려

  1. Ο-표기 :: upper bound를 표현 

     ex) f(n) = 32n^2 + 17n^2 -32 , f(n) <= cg(n)
  2. Ω-표기 :: lower bound를 표현 : 오메가

    ex)  f(n) = 32n^2 + 17n^2 -32 , f(n) >= cg(n)
  3. Θ-표기 :: upper bound & lower bound를 표현 :세타

    ex) f(n) = 32n^2 + 17n^2 -32 , 0 <= c2g(n) <= f(n) <= c2g(n)
   Big-O 

 O(1)

O(log n) 

O(n) 

O(n log n) 

O(n^2) 

O(n^3) 

O(2^n) 

O(n!) 

 Constant

 Logarithmic

 Linear

 Log Linear

 Quadratic

 Cubic

 Exponential

 Factorial

  • 다항시간(polynomial-time) 알고리즘

다항식일 때 사용. 

'For Real > 알고리즘' 카테고리의 다른 글

Backjoon1000_DrEngineer  (0) 2018.11.23

+ Recent posts