2017년 10월 7일 토요일

제네릭이란?

제네릭Generics
ex) ArrayList<E>

다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일시의 타입 체크(compile-time type check)를 해주는 기능이다.

>>쉽게 말해 다룰 객체를 미리 명시해줌으로써 형변환을 사용하지 않고 사용하는 것.....
<String>제네릭스는 String 객체만 사용 가능, 다른 자료형 사용하면 오류!?

ArrayList<String> StringList = new ArrayList<String>();
StringList.add("a");
StringList.add("b");

ArrayList<Integer> IntegerList = new ArrayList<Integer>();
IntegerList.add(1);
IntegerList.add(2);

ArrayList<Tv> TvList = new ArrayList<Tv>();
TvList.add(newTv());

ArrayList List = new ArrayList();
List.add(1);
List.add("a");
>>제네릭스를 사용하지 않는 경우 Object타입으로 간주된다. 그래서 형변환을 해줘야함!!

<> 형태
<E> : Element(자바 컬렉션에서 주로사용)
<K>,<V> : Key, Value(map 자료구조에서 주로 사용)
<T> : 일반적인 제네릭 타입을 의미
<N> : Number를 의미

**컬렉션 정리
http://hackersstudy.tistory.com/26

제네릭의 장점
1. 타입 안정성을 제공한다.

2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.




참고
http://arabiannight.tistory.com/entry/%EC%9E%90%EB%B0%94Java-ArrayListT-%EC%A0%9C%EB%84%A4%EB%A6%AD%EC%8A%A4Generics%EB%9E%80


http://kiwi99.tistory.com/3

2017년 10월 5일 목요일

Mybatis 자동 생성키 사용

mysql의 경우에 auto_increment 를 통해 자동 생성키를 쓸 수 있는데, insert시 이 자동생성된 값을 가져오고 싶을때는

useGeneratedKeys를 true로 설정, KeyProperty에 가져오고싶은 값을 넣는다. 

나의 경우엔 답변or댓글의댓글을 만드는 과정에서 그룹을 설정하기위해 자동증가값을 그룹에 같은값으로 업데이트하려고 했었다. 

(...게시물을 만들면서 group을 같이 설정하고싶었는데, 실패해서 게시물만든후 group값을 bnum으로 업데이트하였다...비효율적인 것 같으므로 다른 방법을 찾아야할 것 같다.)

아무튼 자동증가되는 primarykey를 가져오고 싶었는데 계속 0을 가져왔었다. 

그래서 

매퍼에 위의 방법과 같이 bnum을 키프로퍼티에 넣고 

1
2
3
    <insert id="insert" parameterType="net.cot_pr1.domain.QnA" useGeneratedKeys="true" keyProperty="bnum">
        INSERT INTO qna (bnum, title, content, writer, answer, qgroup) VALUES (0,#{title},#{content},#{writer},#{answer},#{qgroup})
    </insert>
cs

컨트롤러에서 

1
2
3
4
5
6
qnaService.create(vo);
        
int bnum = vo.getBnum();
vo.setBnum(bnum);
qnaService.setgroup(vo);
        
cs
이런식으로 bum을 다시 가져와서 group에 넣었다..

2017년 10월 1일 일요일

삼항 연산자

if문을 줄여서 쓸 수 있는 삼항 연산자


ex)
1
2
3
4
5
if(a<b){
    res = 1;
}else{
    res=2;
}
cs
삼항 연산자로 다시 나타낸다면 

1
result = (a<b)?1:2
cs


(조건)? a : b;


조건이 
true면 a , false면 b

2017년 9월 29일 금요일

git 커밋 되돌리기

git에 커밋 후 커밋내용을 아예 지우고 싶을때 사용.....



프로젝트있는 폴더에서 명령프롬프트을 열어서 

git reset HEAD~1(숫자는 되돌리는 커밋횟수??) 

git push origin + master 




잘못하면 커밋 다 날라가니 쓰기전에 한번 더 찾아보고 사용할 것!!
(git무서웡 ㅠ) 

2017년 9월 26일 화요일

세션과 쿠키의 차이점

Session과 Cookie

 웹사이트에서는 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.

Session
- 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.
- Session에 관련된 데이터는 Server에 저장된다.
- 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
- Cookie에 비해 보안성이 좋다.

Cookie
- 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
- 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다.
- Cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일로써,
  Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.
- Cookie는 Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.
(정보 유출 가능, Session보다 보안성이 낮은 이유)

Q. 보안성이 낮은 Cookie 대신 Session을 사용하면 되는데 안하는 이유?
A. 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 감


둘의 큰 차이점은 저장되는 위치?? 세션은 쿠키보다 느린속도..
출처: http://hahahoho5915.tistory.com/16 [넌 잘하고 있어]

참조
http://bllizz.tistory.com/15 

2017년 9월 12일 화요일

[rejected] master -> master (non-fast-forward)

git을쓰면서 이클립스에서 커밋앤 푸쉬를 하는데 저런 문구가 되면서 git저장소에 커밋이 되지 않는 현상이 발생하였다.

프로젝트 팀 메뉴에서 히스토리를 보니 아직 기록이 남아있는 것같아 'push branch master' 로 했더니 저번 내용까지 갱신되었다. 


git 어렵다 ㅠㅠ  소스날라갈까봐 무서움 ㅠㅠㅠ
공부 필요한듯..



--추가--
9/17
readme 파일을 git페이지에서 업데이트하고 커밋할때 발생하는듯.
내생각엔.. 변경된 내용이 이클립스에 적용이 안되서 그런듯??

2017년 9월 6일 수요일

REST란?

위키백과 설명...
REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다. 이 용어는 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개되었다. 필딩은 HTTP의 주요 저자 중 한 사람이다. 이 개념은 네트워킹 문화에 널리 퍼졌다.
엄격한 의미로 REST는 네트워크 아키텍처 원리의 모음이다. 여기서 '네트워크 아키텍처 원리'란 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다. 간단한 의미로는, 웹 상의 자료를 HTTP위에서 SOAP이나 쿠키를 통한 세션 트랙킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다. 이 두 가지의 의미는 겹치는 부분과 충돌되는 부분이 있다. 필딩의 REST 아키텍처 형식을 따르면 HTTP나 WWW이 아닌 아주 커다란 소프트웨어 시스템을 설계하는 것도 가능하다. 또한, 리모트 프로시저 콜대신에 간단한 XML과 HTTP 인터페이스를 이용해 설계하는 것도 가능하다.
필딩의 REST 원리를 따르는 시스템은 종종 RESTful이란 용어로 지칭된다.

**********
 REST 방식의 웹 서비스를 쉽게 이해하기 위해서 어떻게 메시지를 주고 받게 되는지 동작 아키텍처를 살펴보도록 하겠습니다. 먼저 기존의 SOAP을 이용한 일반적인 웹 서비스 방식은 다음과 같습니다. 


[일반적인 웹 서비스]



반면에 REST는 URL을 요청하게 됩니다. 복잡한 SOAP 메시지를 호출하지 않아도 URL을 이용해서 데이터를 요청해야 한다는 것이죠.

[REST 방식의 웹 서비스]

위의 그림을 보면 12133이라는 URL을 통하여 데이터를 요청하고 있고 그 데이터는 XML 형식으로 반환하게 됩니다. 반환되는 XML 형식은 다음과 같습니다. 


웹에있는 자원들을 HTTP를 활용하여 전송하기 위한 아주 간단히 만든 인터페이스? 
>>유지보수 쉬움
 ex) board/list , board/write


특징
1. 클라이언트와 서버는 독립적이다.
2. 캐시 가능 
3. 계층화, 클라이언트는 중간 서버를 통해 연결한다.
4. 유니폼하다. URL로 지정한 리소스에 대해 조작이 통일, 한정적인 인터페이스로 수행한다.
5. 자체표현만으로 쉽게 이해 가능
6. 무상태?? 각 요청간 클라이언트의 객체는 서버에 저장 불가

장점
1. 사용이 쉬움, 간결함
2. 클라이언트와 서버가 명확히 분리
3. 원하는 데이터 표현을 사용할 수 있음

단점
1. 표준이 없음(보안또한?)
2. HTTP메소드의 한계?(HTTP 통신 모델에 의존?)
3. 둘 이상을 대상으로 상호작용하는 분산환경에는 유용하지 않음


*************************
어렵군!!