2013년 8월 14일 수요일

8월14일 수업

데이터 변경
update 테이블명 set 컬럼명=값, 컬럼명=값,....
where 조건
 
데이터 조회
select 컬럼명, 컬럼명,......
 from 테이블명
where
 컬럼명 연산자 값 and/or 컬럼명 연산자 값....
 
like
between a and b : x >= a and x <= b
 
in ( 값, 값 , 값)
 
 
not
 
 
delete
 
데이터 삭제
delete from 테이블명
where 조건
 
 
Adapter 패턴
 
 
 다형성: overloading
 같은 기능을 하는 메서드에 대해 같은 이름을 부여함으로써 프로그래밍의 일관성을 확보
 
 
추상클래스
  서브클래스들에게 공통 속성 및 기능을 상속해주기 위한 용도
 
 
인터페이스
사용 객체와 사용당하는 객체 사이의 호출 규칙
ex) 자동차 ==> [타이어] <== 한국타이어, 금호타이어 등등
인터페이스의 메서드는 단지 규칙으로 역할을 하기 때문에 구현하지 않는다.
  => 인터페이스의 모든 메서드는 추상메서드 이다.
  => abstract 생략가능
규칙은 반드시 공개되어야 하기 때문에, public이다.
   => public 은 생략가능
 
 
 

2013년 8월 13일 화요일

8월13일 수업

DBMS

->Data 저장,조회,변경,삭제관리전문S/W)
->Data 와 Data 사이의 관계관리 =>RDBMS
->Data를 효율적으로 관리(데이타의 중복제거,결함제거(무결성),체계적(Data base)
->FIle I/O free

                 명령
APP ------------------>  DBMS
                 SQL              |
        (structured             |
           query language ) |  read/write  
                                       |
                                       |
                                       Data

=>표준문법 + DBMS고유문법이 같이 사용됨


SQL 사용방법
->Data를 저장할 Tool을 만들어야 한다. => DDL
->Data를 입력,삭제,변경 =>DML
->저장된 Data를 조회한다 =>DQL


Native API
->SQL문을 DBMS 프로토콜에 맞추어 서버에 전달
->서버에서 보낸결과 리턴




TYPE 1
*특징 : ODBC Driver을 사용
: JRE에 포함되어있다.
: 속도가 느리다.
: Excel, Access와 같은
파일기반 DBMS를 사용할 수 있다.
 
 
 
TYPE 2
* 특징 : DBMS 회사로 부터 별도 다운로드 필요
: Native API 사용
 
 
 
TYPE 4
*특징 : DBMS 회사로부터 다운로드
: 직접 DBMS와 연결
: Pure Java Driver
 
 
 




2013년 8월 8일 목요일

8월 8일 수업

예외처리
 
-  오류 발생 시 자신이 처리하지 않고 호출자에게 떠 넘긴다.
 -  호출자에게 오류를 넘기기 위해서는 메서드 선언부에 어떤 오류를 넘길지 선언해야 한다.
 
 
-  try... catch 문법을 사용하여 오류를 적절히 처리하여 시스템이 멈추지 않게 한다.
public static void case2() {
  System.out.println("작업 준비...");
  try {
   work();
  } catch (Error e) {
   System.out.println("오류 났네요. 그래도 계속 고~~~");
  }
  System.out.println("다른 작업...");
 }
 
 
- 추가적으로 보고도 한다.
  - 예외 발생 상황을 호출자에게 전달할 필요가 있을 때
 
try {
  ...
    } catch ( 파라미터 선언 ) {
     throw 보고;
    } catch ( 파라미터 선언 ) {
     throw 보고;
    } finally {
    예외 처리 
    }
   - finally 블럭은 try...catch 블럭을 탈출하기 전에 반드시 수행된다.
\
  

 Throwable 클래스
     - 예외 상황을 보고할 때 사용하는 클래스
     - 보통 예외 상황이 발생했을 때의 정보를 담고 있다. 
     - throw 명령어로 해당 객체를 호출자에게 전달한다.
    - 두 타입의 자식 클래스가 있다.
     1) Exception 자식 클래스
       - 애플리케이션에 작업 도중에 발생하는 오류를 표현 
       - 이런 예외를 보고 받는 호출자는 반드시 오류 처리를 해야 한다.
         만약 오류 처리를 하지 않으면, 컴파일 시 오류가 발생한다.
    - RuntimeException 
        : Error와 마찬가지로 호출자에게 던졌을 때 
          오류를 잘 받는지 컴파일러가 검사하지 않는다.
     2) Error 자식 클래스 
       - JVM 시스템에서 발생하는 오류를 표현 
       - 이런 예외를 보고 받는 호출자는 오류를 처리하지 않아도 컴파일 오류가 
         발생하지 않는다.
 
 
 
Stream
    
 
 
 
  Data sink stream class
   
데이터를 직접 읽고 쓰는 클래스
   예) FileInputStream/FileOutputStream
 FileReader/FileWrite
   ByteArrayInputStream/ByteArrayOutputStream,
   CharArrayReader/CharArrayWriter
   StringReader/StringWriter
   PopedInputStream/PopedOutputStream
    PopedReader/PopedWriter
  
 Data processing stream class
 
=> 중간에서 데이터를 가공하는 역할
=> 위의 Data sink stream class를 제외한 모든 클래스
=> 구분하는 방법:생성자에서 다른 스트링을
요구한다면
이것은 혼자 입,출력을 할 수 없다는 뜻이기 때문에
데이터 가공클래스라 할 수 있다.
 
 
추상클래스
=> sub 클래스들에 공통속성이나 공통기능을 상속해주는 역할
=> 직접사용불가
=>new로 인스턴스 생성불가
 
Over loading
 
=> 같은 일을 하는 메서드의 대해
같은 이름을 부여하므로서
프로그래밍의 일관성을 주는 문법
 

2013년 8월 6일 화요일

8월7일 오후수업

update출력하기

private void update() {
  Member m = list.get(no - 1);
  Member copy = m.clone();
  System.out.printf("번호(%1$d):", no);
  System.out.printf("이름(%1$s):", m.getName());
  String value = scanner.nextLine();
  if (value.length() > 0) {
   copy.setName(value);
  }
  System.out.printf("전화(%1$s):", m.getPhone());
  value = scanner.nextLine();
  if (value.length() > 0) {
   copy.setPhone(value);
  }
  System.out.printf("이메일(%1$s):", m.getEmail());
  value = scanner.nextLine();
  if (value.length() > 0) {
   copy.setEmail(value);
  }
  System.out.printf("블로그(%1$s):", m.getBlog());
  value = scanner.nextLine();
  if (value.length() > 0) {
   copy.setBlog(value);
  }
  System.out.printf("나이(%1$d):", m.getAge());
  value = scanner.nextLine();
  if (value.length() > 0) {
   copy.setAge( Integer.parseInt(value) );
  }
 
  System.out.print("변경하시겠습니까?(y/n)");
  if(scanner.nextLine().toLowerCase().equals("y")){
   copy.setRegDate(new Date());
   list.set(no-1, copy);
   System.out.println("변경되었습니다!");
  } else {
   System.out.println("변경 취소하였습니다!");
  }
 }


출력결과

명령>update
번호(1):이름(홍길동):
전화(111-2222):
이메일(hong@test.com):
블로그(hong.blogspot.com):
나이(20):17
변경하시겠습니까?(y/n)y
변경되었습니다!

delete 출력하기

private void detele() {
  list.remove(no - 1);
  no = 0;
  System.out.println("삭제되었습니다!");
 }


delete 출력결과

*명령>view 1
번호:1
이름:홍길동
전화:111-2222
이메일:hong@test.com
블로그:hong.blogspot.com
나이:17
등록일:2013-08-07
*명령>delete
삭제되었습니다!


====>view 부터 명령을해야만 delete  가능!1

8월7일 오전수업내용

 
setter & getter
 
 
 
1.히든변수 
2. 히든파라미터,
3. 벨류오브젝트
 
 
히든파라미터
list출력방법
 
 
 
 



view출력방법


 

8월 6일

Git 실행 방법
 
1. 이클립스 실행 
2. window 탭
3.show view 클릭
4. others 클릭 
5. GIT Repository 클릭

6.www.github.com/eomjinyoung 접속 후 공유하고자 하는 프로젝트 클릭
7. 오른쪽 하단 HTTP주소 복사
 8. repository 창의 주소에 붙여넣기
 
 
*변수*
 
변수란?
=>변수는 어떤 데이터를 나타내는 일종의 기호 혹은 지시 대명사와 같다.
=>변수는 필요한 데이터를 한 번 선언해 두고,
나중에 계속해서 사용하기 위한 하나의 문법적인 장치이다.
 
( - 변수를 이용하면 나중에 한 곳만 고쳐도 된다.
- 앞으로 그내용이 변할지도 모르는 수이므로 변수라 한다.)
 
*변수의 종류*
 
*연산자*
 
 
*단항 연산자*


*산술 연산자*
*관계 연산자*
*비트 연산자*
 
*제어문*
 종류
 *  조건문 : if... else, switch
 *  반복문 : do... while, while, for
 *     분기문 : break
 
-if문
 
- else 는 가장 가까운 if 문에 속하게 된다.
 

  1) if (조건식)
   문장;
    : '조건식' 이 true인 경우 '문장'을 수행한다.
 *
  2) if (조건식)
    문장1;
    else
    문장2;
    : '조건식' 이 true라면 '문장1'을 수행하고, false라면 '문장2'를 수행한다.
 
예제)
int a = 3;
  if( a > 4)
   System.out.println("a > 4 입니다.");
   System.out.println("종료합니다!");
=>종료합니다!
라고뜬다.
-switch
case 문은 break 문을 만날 때 까지 수행하기 때문에 사용시 유의해야 한다.
switch(식) {
 *
  case 상수식1: 문장1
   break;
   case 상수식2: 문장2
    break;
   case 상수식3: 문장3
    break;
   default: 문장0
  }

  : '식'의 결과값이 '상수식1' 이면 '문장1'을 수행하고 'break'문은 switch문을 빠져나간다.
    '식'의 결과값이 '상수식2' 이면 '문장2'을 수행하고 'break'문은 switch문을 빠져나간다.
   '식'의 결과값이 '상수식3' 이면 '문장3'을 수행하고 'break'문은 switch문을 빠져나간다.
   만약, '식'의 결과값에 해당하는 경우가 없다면 'default:' 의 '문장0' 를 실행한다.
 
예제)
int a = 10;
  switch(a * 5) {
  case 50:
   System.out.println("a * 5는 50입니다.");
   System.out.println("따라서, a는 10입니다.");
   break;
  case (20 * 100):
   System.out.println("a * 5는 100입니다.");
   System.out.println("따라서, a는 20입니다.");
   break;
  default:
   System.out.println("a는 5의 배수이겠지요");
   a = 0;
}
 
=>a * 5는 50입니다.
따라서, a는 10입니다.
이렇게 뜬다.
 
 
*반복문 - do... while, while*
 
 
1) do ... while
  do {
    문장1
   }while(조건식);

  : 일단 '문장1'을 수행후 '조건식'의 값이 true이면 계속 do { } 문을 반복하여 수행한다.

2) while
   while(조건식) {
    문장1
   }
  : '조건식'의 값이 참일때만 while문의 { } 문을 수행한다.
 *
  즉, do... while 문은 1 이상을 반복하고, while 문은 0 이상을 반복한다.
 
예제)
do~while문
 
int a = 0;
  do{
   System.out.println("a = " + a);
   a++;
  }while (a < 10);
 
=>a = 0
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9

  
   while문

  int a = 0;
  while(a < 10) {
   System.out.println("a = " + a);
   a++;
  }
 
=>
a = 0
a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
 
*for문*
 
 - 보통 어떤 인덱스 값을 사용하여 반복처리를 할 때 유용.

   for(초기화 문장; 조건식; 증가문)
   
 
  : 초기화 문장 - 보통 인덱스 값을 초기화 시키는 문장이 온다.
  : 조건식 - true 이면 for문의 { } 문장을 수행하고, false 이면 for 문을 빠져나간다.
 : 증가문 - 보통 인덱스 값을 증가시키는 문장이 온다.
 
* 참조 변수,배열*
 
참조변수

  
  - reference 형에는 3가지가 있다.
   class 형, interface 형, array 형
  - reference 값은 객체에 대한 포인터(주소) 이다.
  - 객체는 동적으로 생성된 class의 instance, array 그리고 interface를 구현한 배열이나
   클래스의 인스턴스를 말한다.
  - 객체는 heap 이라고 불리우는 메모리상에 생성되며, 더 이상 그 객체를 참조하는
    참조 변수가 없다면 가비지 컬렉터에 의해 수집된다.
  - 자바의 객체는 C++과 같은 언어처럼 명시적으로 free(해제)할 수 없다.
  또한, 재생할 수 없다.
  - 객체의 생성은 new 명령어를 사용한다.
  ==> 결론적으로, 참조변수는 객체의 주소를 담는 변수이다.
   
  배열
  - 같은 데이터형 값을 여러개 저장하기 위하여, 연속적으로 이어진, 같은 데이터 형의
   메모리를 만드는 것!
  - 국어, 영어, 수학 과목의 점수를 저장하기 위하여 int 형 변수 3개를 선언하면 된다.
   int 국어, 영어, 수학;
 
과목이 19개니까 변수만들기가 만만찮다
그러니 배열을써보자  
   
  - 사용방법
   배열 선언 : 만약, 위에서 얘기한 19과목의 정수형 점수를 저장하고 싶다면?
  1) 먼저 배열 객체의 주소를 담을 참조변수를 선언한다.
    방법 1 -> int[] a = null;
    방법 2 -> int a[] = null;
   : [방법 1]은 자바에서 권장하는 방식이다. [방법 2]는 C, C++ 방법과 유사하다.

  %% 'null' 값은 객체가 없음을 나타내는 reference 값이다. 참조변수를 초기화하는데
   사용한다.

  2) 배열 객체를 만들어 참조변수에 할당한다.
    a = new int[10];
  : int 형 메모리 10개를 만들고, 참조변수 'a'에 할당한다.
     즉, 배열 객체의 주소를 변수 'a'에 할당한다고 보면된다.
  
   3) 사용
    a[0] = 10;
    a[1] = 100;
   : 배열 참조변수 'a' 에대해 '[]'를 사용하여 인덱스를 지정해 주고, 값을 할당한다.
     즉, 위의 예는 참조변수 'a'가 가르키는 배열객체의 0번째 항목에 10을 할당하고
 1번째 항목에 100 값을 할당하라는 뜻이된다.
 
 

  1. 문자열 표현
 
  String s1 = new String("홍길동");
  String s2 = new String("홍길동");
 
  if (s1 == s2) {
   System.out.println("s1 == s2");
  } else {
   System.out.println("s1 != s2");
  }
 
 2. 상수 문자열 표현 
   - '가' => 내부적으로 가 라는 문자의 유니코드 값을 리턴
  - "홍길동" => 내부적으로 홍길동 문자열을 가진 인스턴스를 생성
  - 상수 문자열은 Heap이 아닌 Constant Pool 영역에 인스턴스를 만든다.
   - 상수풀은 같은 값을 갖는 인스턴스를 만들지 않는다. => 메모리 낭비 방지!

  String s3 = "홍길동";  =>상수풀에 새로운 인스턴스를 만든다.
  String s4 = "홍길동";  => 상수풀에 기존에 만들어져 있던 인스턴스의 주소를 리턴한다.
 
  if (s3 == s4) {
   System.out.println("s3 == s4");
  } else {
   System.out.println("s3 != s4");
  }
 
   3. Heap에 만든 스트링을 상수풀에도 만드는 방법: intern()
  String s5 = new String("홍길동");
  String s6 = s5.intern();
 
  if (s5 == s6) {
   System.out.println("s5 == s6");
  } else {
   System.out.println("s5 != s6");
  }
 
  if (s3 == s6) {
   System.out.println("s3 == s6");
  } else {
   System.out.println("s3 != s6");
  }
 
 
equals() 사용

  - Object에서 상속받은 메서드이다.
  - 원래는 인스턴스 주소를 비교하는 메서드다.
- 하지만, String 클래스에서 값을 비교하도록 재정의(Overriding) 하였다.

  String s1 = new String("홍길동");
  String s2 = new String("홍길동");
  String s3 = "홍길동";
 
  if (s1.equals(s2)) {
   System.out.println("s1.equals(s2)");
  } else {
   System.out.println("s1 != s2");
  }
  
 
 Value Object = Data Transfer Object

 - 여러 속성의 값을 관련된 것 끼리 하나로 묶어서 다루는 클래스
 
 예) Member, Project, Task

public class Member {
 private String  name;
 private String  phone;
 private String  email;
 private String  blog;
 private int   age;
 private Date  regDate;

 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPhone() {
  return phone;
 }
 public void setPhone(String phone) {
  this.phone = phone;
 }
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
 public String getBlog() {
  return blog;
 }
 public void setBlog(String blog) {
  this.blog = blog;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  if (age > 0 && age < 120) {
   this.age = age;
  }
 }
 public Date getRegDate() {
  return regDate;
 }
 public void setRegDate(Date regDate) {
  this.regDate = regDate;
 }
 

=(get,set을 하나씩 쓰기 귀찮다면?)

 
=>위에과정을따라하면
모두 getter, setter가 생긴다.