2013년 8월 23일 금요일

스레드..



=======================================================================

스레드 프로그래밍

- 병행적으로 작업을 수행하기 위한 방법
- 1. Thread를 상속받는다.  extends Thread
- 2. 병행으로 수행할 작업들을 run()메서드에 넣는다.
     
        @Override
public void run(){

}

- 스레드에게 일을 시킬 때는 run()을 호출하지 말고, start()를 호출해야 한다.
- start()를 호출하면 JVM은 스레드를 준비시키고, run()을 호출한다.


*Context Switching

- process의 실행환경을 저장/로딩.



2013년 8월 21일 수요일

Socket


jar 파일 사용하기.




시스템 아키텍쳐의 변천사.





메인프레임 


장점
- S/W 유지보수 쉽다.
- 보안이 강하다.

단점
- H/W확장이 어렵다.
- 고가격이다.

Client / Server

장점
- H/W 확장 쉽다.
- 저가격이다.

단점
- S/W유지보수 어렵다.
- 보안문제가 발생한다.


Application Server

장점
- S/W 유지보수가 쉽다.
- H/W 확장이 쉽다.




Client / Server
- Client: 먼저 요청하는 쪽


- Server: 요청 받은 후 응답하는 쪽

ServerSocket 
- Client와의 연결을 제공하는 객체.
- 포트번호 :  실행 중인 컴퓨터에서 서버 프로그램을 구분하기 위한 고유 번호.
- 운영체제는 랜선으로 데이터가 들오오면 포트번호를 확인하여 
  해당프로그램으로 데이터를 전달한다.

ServerSocket serverSocket = new ServerSocket(8888);



accept()
- Client 의 연결을 기다리고 있다가 연결 요청이 들어오면 즉시 리턴한다.
- 리턴 값: 클라이언트와 데이터를 주고 받을 수 있는 도구이다.

Socket
- 상대편과 데이터를 주고 받을 수 있는 도구이다.

Socket socket = serverSocket.accept();

2013년 8월 19일 월요일

디자인패턴 Flyweight

Generic 
- 파라미터나 변수의 타입을 정의하지 않는다.
- 사용하는 시점에 선언한다.



for (int i = 0; i <list.size(); i++) 의 문장은 for (Member m : list) 와 같다.

문장 구조.
for (클래스 변수 : 배열 또는 Collection 인터페이스 구현객체)


* Flyweight
- 자주 사용되는 객체, 객체 생성시 시간이 오래 걸리는 객체를 공유하는 것.
ex) pooling 기법 (객체를 빌려서, 사용하고, 다시 반납)

- 가비지 생성을 줄인다.

- 실행속도를 향상시킨다.



RedApp.Class 코드 수정.


RedApp 사용 시나리오.

메뉴>member
멤버관리>list
...
멤러관리>view email
...

멤버관리>menu
메뉴>project
프로젝트관리>list
번호, 제목, 시작일, 종료일
...
프로젝트관리>view 프로젝트번호
번호: 1
제목: ...
내용: 
... ... 
시작일: 2013-08-20
종료일: 2013-10-31
관리자: hong@test.com
프로젝트관리> update
...
프로젝트관리> delete
정말 삭제하시겠습니까?(y/n)y
삭제되었습니다.
정말 삭제하시겠습니까?(y/n)n
삭제 취소하였습니다.
프로젝트관리>add
제목: ...
내용:
...
시작일: 2013-08-20
종료일: 2013-10-20
관리자: hong@test.com

프로젝트관리>menu
메뉴>quit
안녕!

* UI 처리
Boundary

* 업무처리
Control

* Data처리
Entity






2013년 8월 18일 일요일

Design pattern: Factory Method

RedApp.class
SQL과 연동하기 위한, list(), add(), view(), update() 메소드 수정.



MySQL 서버에 연결할 도구를 준비.
- JDBC DRIVER 클래스 중(.jar 파일에 들어 있는 클래스들 중에서)
- java.sql.Driver 인터페이스를 구현한 클래스를 먼저 로딩한다.
- 이 클래스가 java.sql.Connection 인터페이스를 구현한 클래스를 알고 있다.

1.서버와 연결

Connection con = null;

2. SQL문을 보낼 도구를 얻기

- createStatement()를 호출하여 SQL문을 서버에 보낼 도구를 얻는다.

Statement stmt = con.createStatement();

3. SQL 서버에 보냄

ResultSet rs = stmt.executeQuery("select MNAME,PHONE,EMAIL, "
+ "from MEMBERS order by MNAME");

- executeQuery()는 서버에 SQL문을 보낸다.
- 서버는 결과를 준비한다.
- executeQuery()는 서버에서 결과를 가져올 도구를 리턴한다.

4. 서버의 결과를 가져와서 출력.
- next()를 호출하여 서버로부터 1 레코드의 결과를 가져온다.

Design pattern: Factory Method
- 객체 생성이 복잡한 경우 특정 메서드를 통해 얻는 방식.




Statement vs. PreparedStatement

*1) 소스 가독성:

SQL문이 복잡할 수록 읽기 어렵다. <==> 간결하다.

*2) 바이너리 데이터(이미지, 음악, 동영상 등) 입력:

불가(base64와 같은 형식으로 인코딩 시 가능) <==> 가능

3) 반복 수행시 속도:

매번 SQL문을 DBMS 형식에 따라 변환 속도 느리다
<==> 한번만 변환, 그리고 실행, 속도 빠르다.


add()





delete()






view()





update()







list()









2013년 8월 16일 금요일

interface

Test.ex1



Tico.class






HankookTire.class



KumhoTireClass




Tire.class




중요한 내용이 많으므로, 코드를 가지고 연습을 많이 하자.


2013년 8월 13일 화요일

SQL


desc 테이블명 

- 테이블에 대한 정보를 출력한다.






























데이터 조회

select 컬럼명, 컬럼명, ...
from 테이블명

select *
from 테이블명


















조건조회

select *
from 테이블명
where
컬럼명 연산자 값 and / or 컬럼명 연산자 값 ... 






















































연산자 : <, >, <=, >=, <>, =


데이터변경
update 테이블명 set 컬럼명=값, 컬렴명=값, ...
where 조건




like







between a and b : x >= a and x <= b 





in (값, 값, 값), not in (값, 값, 값)






















데이터 삭제

delete 
from 테이블명
where 조건

SET SQL_SAFE_UPDATES=0; 
- SAFE 모드를 해제 한다.


















=====================================================================

추상클래스

- 서브클래스들에게 공통 속성 및 기능을 상속해주기 위한 용도.


인터페이스

- 사용 객체와 사용당하는 객체 사이의 호출 규칙
- 자동차 => [타이어] <= 한국타이어, 금호타이어 등등
- 인터페이스의 메서드는 단지 규칙으로 역할을 하기 때문에 구현하지 않는다.
  - 인터페이스의 모든 메서드는 추상메서드 이다.
  - abstract 생략 가능
- 규칙은 반드시 공개 되어야 하기 때문에, public이다.
  - public 은 생략 가능




=============================================================
Java.
RedApp.class 에 MySQL 연동하기.

MySQL 서버에 연결할 도구를 준비.

1. 서버와 연결
2. SQL문을 보낼 도구를 얻기
3. SQL문을 서버에 보냄
4. 서버에 결과를 가져와서 출력



2013년 8월 12일 월요일

13.08.13

* DBMS
- mySQL, Oracle, Ms-SQL, DB2
- Data 저장, 조회, 변경, 삭제 (관리 전문 S/W)
- Data or Data 사이의 관계 관리 (Relational - DBMS)
- File I/O free
- 효율적인 Data관리


Native API ( = Vendor API)
( .dll .dib .so ( c/c++ 함수들))
- SQL문을 DBMS 프로토콜에 맞추어 서버에 전달
- 서버에서 보낸 결과를 리턴.
































문제점
- DBMS 마다 API가 다르다.
- function 사용이 다르다.
- 따라서, DBMS 마다 프로그램을 재작성 해야 한다.
===============================================================

Open DataBase Connectivity (ODBC) API 명세 
- 모든 DBMS의 기능 수용.
ex) ODBC Driver이라 해서 프로그램 끼리 모두 호환되지는 않는다.





























































* API가 같다.
- 하나의 App만 개발하여 여러 DBMS 연결이 가능하다.

====================================================================

JDBC API 명세


* Type1 특징
- ODBC Driver를 사용한다.
- JRE에 포함되어 있다.
- 속도가 느리다.
- Excel, Access와 같은 파일기반 DBMS를 사용할 수 있다.

=====================================================================




* Type2 특징
- DBMS 회사로부터 별도 다운로드 필요하다. (JRE에 포함되지 않다.)
- Native API를 사용한다.

======================================================================






















* Type4 특징
- DBMS 회사로부터 다운로드.
- 직접 DBMS와 연결됨.
- Pure Java Driver이다.

===================================================================

* SQL 작성법?
- DDL
 Data를 저장한 틀을 정의한다.
 Table 생성 / 삭제 / 변경

- DML
 Data를 입력 / 삭제 / 변경

- DQL
 Data를 조회


My SQL

테이블 생성

- 기본키를 정의
- 기본키(Primary Key)
후보키들 중에서 DB 관리자가 사용하기로 선택한 키
이메일로 설정.
- 후보키(Alternate Key)
키들을 최소로 만든 키
ex)
이름, 전화번호
블로그
이메일
- 키(Key)
데이터를 구분하기 위한 컬럼들의 집합
ex)
이름, 전화번호
전화번호, 블로그
이름, 블로그
이름, 전화번호, 블로그
이름, 이메일, 전화번호
이메일
이름, 나이, 이메일
전화번호, 이메일
블로그




























====================================================================

* insert
- 테이블에 데이터 입력
- insert into 테이블명(컬럼명, 컬럼명 ... ) values(값, 값, ...)