2013년 8월 25일 일요일

쓰레드.

* finalize()
- object 메서드
- garbage collector 가 호출  -> 인스턴스 해제 전





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

중첩 클래스 (inner class)
- 클래스 내부에 선언하는 클래스
- 1) top lever inner class: static inner class
      - 다른 클래스에서도 사용하기 위함.

- 2) member inner class
      - outer 클래스의 인스턴스를 통해서만 사용 가능한 클래스

- 3) local inner class
      - 해당 클래스가 선언된 블럭 내에서만 사용 가능한 클래스.

- 4) anonymous inner class
      - 이름이 없는 클래스
      - 클래스를 정의한 직후 바로 인스턴스 생성함.
      - 오로지 한개의 인스턴스만 필요한 경우에 사용.

      - 이름 없는 클래스 정의
      new (슈퍼클래스 또는 인터페이스) () { 클래스 정의 }



* 일반 클래스의 명칭: 패키지 멤버 클래스.

* sleep(): 지정한 시간만큼 not runnable 상태로 만드는 것.
 - cpu 쟁탈전에서 제외 시킴. (not runnable)

* 여러 스레드가 동시에 진입하여 같은 객체를 다룰 때 문제가 발생되는 코드.
=> critical section.   
- 해결책 :  한번에 하나의 스레드 만이 접근할 수 있도록 한다.
- 번호표 나눠준다. ex) 화장실 키, 번호표
- 접근 가능 여부를 관리하기 위한 값 => mutual exclusion (= mutex:뮤텍스)

* 뮤텍스 방식
- 뮤텍스 방식은 오로지 1개의 스레드만이 접근 가능한 것.
- 1개만 가능한 세마포어

* semaphore(세마포어)
- 일정한 개수까지는 접근 가능하게 하는 방식.

* synchronized
- 한번에 하나의 스레드만이 진입 할 수 있게 하는 설정.
- synchronized로 설정된 블럭은 한번에 하나의 스레드 만이 접근 가능하다.
- 그러나 객체가 다르다면 동시 진입 가능하다.
- mutex(1개만 가능한 semaphore)는 같은 객체에 대해서 적용한다.




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. 서버에 결과를 가져와서 출력