1. 오라클 설치
   오라클 접속 ( 툴 이용 )

2. SQL ( Structured Query Language )
: 데이터베이스 명령어
: 데소문자 구별이 없다. (리터럴 제외, 즉 실제값은 대소문자 구별됨)
: 문장의 끝은 ;

<종류>
가. DML ( Data Manipulation Language )
- insert (데이터 삽입)
- delete (데이터 삭제)
- updata (데이터 수정)
- merge  (데이터 병합)
==> 트랜잭션 (transaction) 고려해야 된다.

나. DDL ( Data Definition Language )
- create (객체 생성)
- alter  (객체 수정)
- drop   (객체 제거)

* 객체 종류( Object )
- 테이블
- 인덱스
- 뷰
- 시퀀스
- 시노님

다. TCL ( Transaction Control Language )
=> 트랜잭션 관련 명령어
- commit
- rollback

라. 권한할당 / 권한취소
- grant (권한 할당)
- revoke (권한 취소)

마. qurey
- select ( 데이터 조회 )

3. 관계형 데이터베이스
=> 데이터를 테이블 형태로 관리하며, 테이블간에 관계를 맺으면서 데이터를 관리하는 방법

 열(컬럼)
  이름     나이    주소     ==> 컬럼헤딩
 -----------------------
 홍길동     20     서울     ==> 행(레코드 : 자바의 인스턴스)
 이순신     44              ==> 비어있는 컬럼 ( null 값을 갖는다고 표현 )
 유관순     18     경기

* 제약조건 5가지
=> 테이블의 올바른 데이터 설정하기 위해서.

가. primary key 제약조건 (PK)
=> 레코드를 식별하기 위해서 특정 컬럼에 지정. (유일하기 때문에)
=> 지정된 컬럼은 반드시 유일한 값을 갖는다.
   또한 null값을 갖지 못한다.
=> 중복데이터 저장을 방지할 수 있다.
=> 예> 주민번호, 사원번호, 학번

나. unique 제약조건 (UK)
=> 컬럼에 유일한 값을 저장하기 위한 제약조건.
   null값 허용.

다. not null 제약조건 (NN) (개체 무결성)
==> 컬럼에 null 값을 허용 안함.

라. check 제약조건 ( CK )
=> 컬럼에 저장할 데이터의 조건체크해서 저장여부 결정

 예> age > 20

마. foreign key 제약조건 ( FK ) (참조 무결성)
=> 다른 테이블의 PK값을 갖거나 또는 null 값을 가질수 있는 제약조건

4. select 문
- 데이터 조회시 사용되는 SQL문.

문법 :
 select 컬럼명,컬럼명2
 from 테이블명;

 select * from 테이블명;

 select salary, salary+100 -- 연산 가능
 from 테이블명;

  * 주의할점은 null을 연산하면 결과는 null이다.
   NVL (컬럼값, 초기값)
 select 컬럼명 as별명, 컬럼명 별명
 from 테이블명;
 => 모든 레코드 대상으로 출력된다.

5. 특정 레코드 검색

 select 컬럼명,컬럼명2 ( * : 모든 컬럼)
 from 테이블명
 where 조건식;

가. 비교연산자

where 컬럼 = 값;
where 컬럼 > 값;
where 컬럼 >= 값;
where 컬럼 < 값;
where 컬럼 <= 값;
where 컬럼 != 값;

 * 리터럴 종류
a. 수치
b. 문자 => ' '
c. 날짜 => ' '
==> 리터럴은 대소문자 구분됨


나. 논리연산자

AND, OR, NOT

다. 범위 지정

BETWEEN a AND b ( a부터 b까지 , a 와 b 포함 )

라. IN 연산자
=> 일치하는 값만 출력
예> salary IN(2000,4000,6000);
==> salary = 2000 OR salary= 4000 OR salary = 6000

마. LIKE 연산자
==> 일부분만 일치해도 출력
==> 2가지 심볼(symbol) 사용

% : 없거나 여러문자 대치
_ : 한문자 대치

예> s로 시작하는 사원?
    where first_name LIKE 's%';

    s로 끝나는 사원?
    where first_name LIKE '%s';

    s문자를 갖는 사원?
    where first_name LIKE '%s%';

    s로 끝나는 사원?
    where first_name LIKE '____s';

바. null 값 찾기

: IS NULL
예>
    where commission_pct IS NULL;

사. NOT 연산자
: 부정
예>  
    where commission_pct IS NOT NULL;

6. 함수 ( function )
가. 대문자로 변경 : upper(컬러명)
나. 소문자로 변경 : loewr(컬럼명)
다. NVL : null값을 다른값으로 변경
라. 변환함수
 수치데이터 문자데이터 날짜데이터 
 to_char()
 => 문자데이터로 변경
 to_number()
 => 수치데이터로 변경
 to_data()
 => 날짜데이터로 변경

 예>
 where salary = '2000';

 * 특정 포맷 지정 가능
 to_char (hire_data , 'YYYY')

마. 그룹함수
  
    - max(컬럼값)
      => 최대값
   
    - min(컬럼값)
      => 최소값

    - sum(컬럼값)
      => 합계

    - avg(컬럼값)
      => 평균
   
    - count(컬럼값)
      => 레코드 개수

    - count(*)
      =>

=======> 결과값이 하나이다. 따라서 다른 컬럼과 같이 사용불가, 같이 사용하려면 일반
         컬럼을 그룹으로 묶는다.


바. 날짜 함수
- sysdate
==> 년/월/일
- timestamp
==> 년/월/일 시:분:초.소수점9자리까지
==> 정밀도가 높다.

예 > select sysdate,timestamp
     from dual;   //daul 은 임시테이블

     select 123*234
     from dual;

7. 정렬
==> SELECT문의 마지막 문이다.

: 오름차순(기본) : asc,ASC
    ==> order by 컬럼명 ASC;
 order by 컬럼명;

: 내림차순 : desc,DESC
    ==> order by 컬럼명 DESC;

select
where
groub by
having
order by

* 다중정렬
order by 컬럼명 DESC ,  컬럼명 ASC;

-----------------------------------------------------------------------------------------
8.DDL (Data Definition Language)
- create
- alter
- drop

 * 스키마 ( schema )
: 특정 사용자가 접속해서 생성한 객체들의 대표이름.
: 사용자 개정명과 동일하다.
  스키마라고 하면 계정을 의미한다.

: 스키마는 반드시 소유자가 있다.
  다른 스키마는 접속 불가. ( 권한 없기 때문에 )

==> 스키마.테이블명;

예> select * from hr.employee;  -- hr 스키마의 employees 테이블 접근

* 객체 종류
- 테이블 : 데이터 저장
- 뷰 : 테이블의 창 , 보안과 편리한 조회
- 시퀀스 : 테이블의 특정 컬럼의 값을 자동으로 증감시키는 객체. 예> 게시판의 글번호
- 인덱스 : 테이블의 검색속도를 향상시키기 위해서, 책의 인덱스
           PK,Unique 컬럼에는 자동으로 부여된다.
- 시노님 : 테이블의 별명 예> hr.employees


9. 테이블 생성
문법>

 create table 테이블명(
    컬럼명  데이터형  제약조건
      컬럼명  데이터형 ,
        컬럼명  데이터형
 );

* 데이터형
가. 수치형 : number(자릿수) ==> 정수
      number(자릿수, 소수점자릿수)  ==> 실수
          예>
       age NUMBER(3), ==? 000 ~ 999

나. 문자형 : char( 바이트 ) ==> 캐릭터 --> 고정형( 크기고정 )
      예> name char(10) ===> 'aaa' 저장해도 10byte가 크기 지정됨
      => 최대 2000바이트까지

      varchar2( 바이트 ) ==> 박캐릭터투, 바차투 --> 가변형 (크기가변)
      예> name varchar2(10) ===> 'aaa' 저장해도 3byte가 크기 지정됨
      => 최대 4000바이트까지
다. 날짜형 : data

       timestamp

* 실습
가. scott 계정생성 => 관리자만 가능

 create user 계정명
 identified by 비번;
예>
 create user scott
 identified by tiger;

나. 권한 부여
==> 접속권한(connect),객체생성권한(resource)
==> 관리자만 부여
     
 grant 권한, 권한2
 to 계정;

예>
        grant connect, resource
        to scott;

* 권한 과 롤 (role)
권한 : 사용자가 특정 작업을 가능하게 할 수 있는것.

권한 종류
a. 시스템 권한 : 관리자만 부여 가능
b. 객체 권한 : 객체를 소유한 사용자가 부여 가능

권한 형태
: create table
: create view
: create index
: drop table
: create session

롤( role )?
==> 권한들의 묶음을 의미.
==> 권한부여 및 취소를 편리하게 하기 위해서....
예> connect, resource

다. person 테이블 생성
--> scott 계정에서
 create table person(
 num NUMBER(4),    -- 숫자
 name VARCHAR(10), -- 이름
 age NUMBER(3),    -- 나이
  address VARCHAR(100) --주소
    );

* default 키워드 사용
==> null 방지 기능 및 특정값 입력 가능한 방법.

   create table person2(
   num NUMBER(4),            -- 숫자
   name VARCHAR2(10),        -- 이름
   age NUMBER(3) DEFAULT 20, -- 나이
   address VARCHAR2(100)     -- 주소
 );

 예 >
   --게시판
 create table board(
  
   writeday DATE DEFAULT SYSDATE,  --작성한 날짜를 항상입력하는게아니라 자동적으로
   ...

 );

10. 데이터 저장
==> insert 문

문법>
 insert into 테이블명 ( 칼럼명, 컬럼명2 )
 values( 값, 값2 );

 => 컬럼명과 값이 일대일 대응.
    지정하지 않은 컬럼에는 null값이 저장됨
예>
 insert into person ( num, name, age )
 values( 10, '홍길동', 20 );
 insert into person ( num, name, age, address )
 values( 11, '이순신', 44, '전라');
 insert into person ( num, name, age )
 values( 12, '유관순', 18, '서울' );

나.
 insert into 테이블명
 values( 값, 값2, 값3, 값4 );
 
   ==> 반드시 테이블의 모든 컬럼에 데이터 저장해야 된다.
              또한 반드시 테이블의 컬럼순서대로 저장해야 된다.

     예>  insert into person
          values(15,'이순신',44,'전라');

 -- 에러난다.
   insert into person
          values('이순신',15,44,'전라');

11. 제약조건 ( constraints )

  가. primary key
    ==> 레코드 식별하기 위해서 특정 컬럼에 부여 가능.
    ==> 자동으로 인덱스 생성된다.
    ==> 제약조건은?
 : 반드시 유일한 값 + null값이 아닌값을 저장해야 된다.
    ==> 일반적으로 테이블당 하나씩 생성한다.
    ==> 문법 >

      가. 컬럼레벨 지정 방식
 ==> 컬럼을 지정시 같이 제약조건 지정하는 방식

 num NUMBER(4) CONSTRAINT 제약조건이름 PRIMARY KEY
   ==> 제약조건이름은 '테이블명_컬럼명_PK'형식을 지정.

 또는
 num NUMBER(4) PRIMARY KEY  ==> SYSXXXX 자동으로 지정.


     예 >
 drop table person purge; 

 create table person3(
   num NUMBER(4) constraint person3_num_PK primary key,   --  숫자
   name VARCHAR2(10),  --이름
   age NUMBER(3) DEFAULT 20,  --나이
   address VARCHAR2(100)  --주소
 );

 insert into person3 ( num, name, age )
        values(10,'이순신',44,);

 insert into person3 ( num ,name, age )
        values(10,'이순신',44);   -- 에러발생(중복값:10)

 insert into person3 ( name, age )
        values('이순신',44); --에러발생(null)

 insert into person3 ( num, name, age )
        values(null,'이순신',44); --에러발생(null)

 


      나. 테이블 레벨 지정 방식
 ==> 컬럼을 모두 지정하고 마지막으로 제약조건 지정하는 방식.

 drop table person purge; 
 create table person4(
   num NUMBER(4),   --  숫자
   name VARCHAR2(10),  --이름
   age NUMBER(3) DEFAULT 20,  --나이
   address VARCHAR2(100),  --주소
   CONSTRAINT person4_num_PK PRIMARY KEY(num)
 );

 

12. DML( insert, delete, update, merge ) 관련 작업 고려 사항
  ==> 요청한 작업이 DB에 반영이 안된 상태이다.
      언제든지 요청작업을 취소가 가능하다.
  ==> 요청작업 확정 : commit
      요청작업 취소 : rollback


  ==> 트랜잭션(transaction)과 관련됨.

    *트랜잭션 정의?
 ==> 작업단위
 ==> '여러 작업들의 묶음'으로서 하나의 작업처럼 처리하는 개념.
 
 예> 계좌이체

        500
   A --------> B    ==>A에서 수정(1000 --> 500 : update)
 1000        B에서 사입(null --> 500 : insert)

 결과 :  성공시 :
            A --------> B
           500         500


  실패시 :
     A --------> B
          1000          0

 ==> 반드시 DML작업은 트랜잭션이 발생된다.
     따라서 트랜잭션을 종료시키는 작업이 필요하다.( commit, rollback )

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

17일차 수업( SQL 종류, Select 문, 계정생성 및 권한부여)

SQL - ( Structured Query Language )

구조화 질의어라고 하며 데이터 정의어(DDL)와 데이터 조작어(DML)를 포함한 데이터베이스용 질의언어(query language)의 일종이다.

특정한 데이터베이스 시스템에 한정되지 않아 널리 사용된다.

 

1) DML ( Data Manipulation Language )
- insert (데이터 삽입)
- delete (데이터 삭제)
- updata (데이터 수정)
- merge  (데이터 병합)
==> 트랜잭션 (transaction) 고려해야 된다.

2) DDL ( Data Definition Language )
- create (객체 생성)
- alter  (객체 수정)
- drop   (객체 제거)

 

3) TCL ( Transaction Control Language )
=> 트랜잭션 관련 명령어
- commit
- rollback

라. 권한할당 / 권한취소
- grant (권한 할당)
- revoke (권한 취소)

마. qurey
- select ( 데이터 조회 )

 

관계형 데이터베이스 
- 데이터를 테이블 형태로 관리하며, 테이블간에 관계를 맺으면서 데이터를 관리하는 방법

- 용어를 잘 이해하고 있어야 한다.

 

열(컬럼)
  이름     나이    주소     ==> 컬럼헤딩
 -----------------------
 박보영     24     증평     ==> 행(레코드 : 자바의 인스턴스)
 김상진     25              ==> 비어있는 컬럼 ( null 값을 갖는다고 표현 )
 다비치     25     경기

 

<제약조건 5가지> => 테이블의 올바른 데이터 설정하기 위해서.

 

가. primary key 제약조건 (PK)
=> 레코드를 식별하기 위해서 특정 컬럼에 지정. (유일하기 때문에)
=> 지정된 컬럼은 반드시 유일한 값을 갖는다.
   또한 null값을 갖지 못한다.
=> 중복데이터 저장을 방지할 수 있다.
=> 예> 주민번호, 사원번호, 학번

나. unique 제약조건 (UK)
=> 컬럼에 유일한 값을 저장하기 위한 제약조건.
   null값 허용.

다. not null 제약조건 (NN) (개체 무결성)
==> 컬럼에 null 값을 허용 안함.

라. check 제약조건 ( CK )
=> 컬럼에 저장할 데이터의 조건체크해서 저장여부 결정

 예> age > 20

마. foreign key 제약조건 ( FK ) (참조 무결성)
=> 다른 테이블의 PK값을 갖거나 또는 null 값을 가질수 있는 제약조건

 

<select 문> 

query 문으로 질의를 던져 원하는 데이터를 조회할 목적으로 사용되는 SQL 문 

 

사용방법에 대해 알아보자.

 

select (컬럼명)

from (테이블명)

where (조건명);

 

* 참고사항 : 데이터베이스에서 ' * ' 모두를 의미한다.

 

기본 구조는 위와 같으며 여러가지 옵션이 존재한다. 지금부터 어떠한 옵션이 있는지 알아보자.

 

1) 논리연산자 : AND ,OR, NOT

2) 범위 연산자 : BETWEEN

ex) where salary between 5000 AND 7000;       -- 5000 ~ 7000 사이의 셀러리 값을 갖는것

 

3) IN 연산자 : 일치하는 값만 검색

ex) where salary IN(2000,4000,6000);               -- 셀러리 값이 2000,4000,6000, 인것을 찾는것

 

4) LIKE 연산자 : 부분적으로 일치하는 값을 검색

%  : 없거나 여러문자 대치
_   : 한문자 대치

 

ex)  이름이 a로 시작하는 사람 검색
      where name LIKE a%';

      이름이 a로 끝나는 사람 검색
      where name LIKE '%a;

      이름에 a문자를 갖는 사람 검색
      where name LIKE '%a%';

      이름이 5글자이고 s끝나는 사람 검색
      where name LIKE '____s';

 

5) IS NULL 연산자와 IS NOT NULL 연산자

where Student_num IS NULL;         -- 학번 값이 NULL 인것을 검색

where Student_num IS NOT NULL;    --  학번 값이 NULL 이 아닌 것을 검색

 

6) 오름차순과 내림차순 연산자

오름차순 : asc, ASC
==> order by 컬럼명 ASC;
내림차순 : desc, DESC
==> order by 컬럼명 DESC;

 

<DDL - Data Definition Language> 데이터를 정의 하는 언어!
- create
- alter
- drop

스키마 ( schema )
: 특정 사용자가 접속해서 생성한 객체들의 대표이름.
: 사용자 개정명과 동일하다.
  스키마라고 하면 계정을 의미한다.

: 스키마는 반드시 소유자가 있다.
  다른 스키마는 접속 불가. ( 권한 없기 때문에 )

==> 스키마.테이블명;

예> select * from hr.employee;  -- hr 스키마의 employees 테이블 접근

 

< 계정 생성 및 권한 부여>

 

먼저 계정생성은 관리자만 가능하다!

생성 하는 방법은 아래와 같다.

 

create user 계정명
identified by 비번;

 

create user man

          identified by 123;

 

이렇게 계정을 생성했으면 권한을 부여를해야한다.

접속권한(connect),객체생성권한(resource)를 부여하는 방법을 예를 들어보자.

               

                grant 권한, 권한2
                    to 계정;

           

          grant connect,resource    -- 접속권한과 객체생선권한을

          to man;                           -- man 계정에게 준다

 

롤( role )?
==> 권한들의 묶음을 의미.
==> 권한부여 및 취소를 편리하게 하기 위해서 사용한다.
예> connect, resource

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

16일차 수업 ( DataBase install 및 uninstall )

 

1. 데이타베이스( DataBase )

가. 데이터베이스 관리시스템 ( DataBase Management System : DBMS )
- 일반적으로 '데이터베이스'와 혼용해서 사용됨.
- software
- 벤더(vendor)?
=> 오라클, MS, IBM....

- 데이터를 관리하는 시스템 ( 데이터 저장, 수정, 삭제, 조회 등 )

 

나. 데이터 관리 방법
 => 계층형, 망형, 관계형, 객체형..... , 근래 no - sql(근래)
  일반적으로 관계형으로 관리한다.

 

다. 관계형 데이타베이스
  = 데이터를 테이블(table)로 관리하는 방법.

 

라. 오라클 install

 -서비스 등록
컴퓨터 > 관리 > 서비스 ===> 실행 => services.msc

   :xxxxTNSListener
    xxxxServiceORCL 2가지는 반드시 시작해야 된다.

 물리적으로 설치2개됨
  C:/app
  C:\프로그램파일\오라클

 

* uninstall - 지우는 과정이 복잡하니 천천히 알아보자!
가. 서비스 종료
나. 레지스트리 수정
    regedot > xxx Local Machine > SOFTWARE > ORACLE 삭제
                                > SYSTEM > Controlset01 >  Oracle로 시작하는 폴더 모두삭제
다. 재부팅
라. 물리적인 폴더 2개 삭제
   C:/app   (지울시에 용량이 커서 지우는데 오래걸릴수있으니 끈기를 가지고 기다리자 )
   C:\프로그램파일\오라클

 

 

 

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

 

 

 

데이타베이스( DataBase )
가. 데이터베이스 관리시스템 ( DataBase Management System : DBMS )
: 일반적으로 '데이터베이스'와 혼용해서 사용됨.
: software
: 벤더(vendor)?
  => 오라클, MS, IBM....

: 데이터를 관리하는 시스템.
  ( 데이터 저장, 수정, 삭제, 조회 등 )

나. 데이터 관리 방법
 => 계층형, 망형, 관계형, 객체형..... , 근래 no - sql(근래)
  일반적으로 관계형으로 관리한다.

다. 관계형 데이타베이스
  = 데이터를 테이블(table)로 관리하는 방법.

라. 오라클 11g 설치

 -서비스 등록
컴퓨터 > 관리 > 서비스 ===> 실행 => services.msc

   :xxxxTNSListener
    xxxxServiceORCL 2가지는 반드시 시작해야 된다.

 물리적으로 설치2개됨
  C:/app
  C:\프로그램파일\오라클

*언인스톨
가. 서비스 종료
나. 레지스트리 수정
    regedot > xxx Local Machine > SOFTWARE > ORACLE 삭제
                                > SYSTEM > Controlset01 >  Oracle로 시작하는 폴더 모두삭제
다. 재부팅
라. 물리적인 폴더 2개 삭제
   C:/app
   C:\프로그램파일\오라클
끝!!!! 

2. 오라클 접속 방법

가. 툴 이용
a. 무료 툴 : 1) SQL*PLUS -> 오라클 설치시 자동설치됨
   관리자 : sys/oracle as sysdba
  일반사용자 : scott/tiger
 
  c:/> sqlplus 사용자계정/비밀번호
 
       2) SQLDveloper - > www.oracle.com.
b. 유료 툴 : Toad, SQLGate, Orange

나. 프로그램 언어 이용
 : 자바로 이용 (JDBC)

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

 

 

 

14~15차 수업 (2차원 배열 ,Hashmap,StringTokenizer,사용자 정의 예외처리 )   
 


14~15일차 수업엔 GUI를 배웠고 15일차엔 지금까지 배운 Java를 토대로 테스트를 보자

 

 

<2차원 배열의 합과 평균>

public class AAA {
 public static void main(String[] args) {
     int sum = 0;
     int count = 0;
     int[][] arr = { { 5, 5, 5, 5, 5 }, { 10, 10, 10, 10, 10 },
                       { 20, 20, 20, 20, 20 }, { 30, 30, 30, 30, 30 } };
 
              for (int i = 0; i < arr2.length; i++) {
              for (int j = 0; j < arr[i].length; j++) {
              sum += arr2[i][j];
              count++;
              }
      }
  System.out.println("total = " + sum);
  System.out.println("average = " +(double)sum/count);
 }
}

---------------------------------

<사용자 정의 예외처리문>

package hashmap;

class UserException extends Exception{
 public UserException(String mesg){
  super(mesg);}
}

 

public class Test01 {
 public static void xx(int a) throws UserException{
  if(1==a || a>=11){
   throw new UserException("입력값이 2~9가 아닙니다.");}
 }

 

public static void main(String[] args) {
  int a = Integer.parseInt(args[0]);
  int sum = 0;
  try{
  xx(a);
  if(1<a && 6>a){
   for (int i=0; i<=a; i++) {
    sum += i;
   }
  }
  System.out.println("합계 : " + sum);
  }catch(UserException e){
  System.out.println(e.getMessage());
  }
 }
}

-----------------------------------

<Hashmap,StringTokenizer 을 이용한 예제> - 문자열로된 것을 특정문자로 나누는것

<

package hashmap;

import java.util.StringTokenizer;

 

public class Test02 {

 public static void main(String[] args) {

  String str = "21,33,14";
  int sum = 0;
  float average = 0;

  StringTokenizer token = new StringTokenizer(str, ",");

  for (int i = 1; token.hasMoreElements(); i++) {
   int a = Integer.parseInt(token.nextToken());
   System.out.println(a);
   sum += a;
   average = (float) sum / 3;
  }
  System.out.println("합계 : " + sum);
  System.out.printf("평균 : %.2f", average);

 }

}
 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

13일차 수업 ( GUI / Frame / Panel ) 

 
1. 자바 GUI ( Graphic User Interface )

 가. AWT ( Abstract Window Toolkit )
 => GUI 컴포넌트를 보여줄때 OS자원을 이용해서 보여진다.
    따라서 Window와 UNIX에서 보여지는 컴포넌트가 다르다.
 => 성능이 떨어진다.

 나. Swing
 => 자신이 가지고 있는 자원을 이용해서 컴퓨넌트를 보여준다.
    따라서 OS와 상관없이 항상 동일한 화면으로 보여진다.
 => 성능이 좋다.

 

2. 레이아웃 매니저
- 컴포넌트들의 위치와 크기를 관리하는 클래스

 => 종류
 - BorderLayout : Frame이 기본적으로 사용하는 레이아웃
   * 5가지 영역 존재
   (Center, North, South, West, East)
   각 영역마다 한개의 컴퓨턴트가 올라간다. 여러개 올려도 마지막으로 올라간 컴포넌트만 보여진다.
   영역을 지정하지 않으면 Cneter에 올라간다.
   * 크기를 resize 하면 위치 변경없고 크기변경됨.

 - FlowLayout : Panel이 기본적으로 사용하는 레이아웃
   * 왼쪽에서 오른쪽으로, 위에서 아래로 올라간다.
   * 크기를 resize하면 크기변경없고 위치변경됨
 - GridLayout : 바둑판

 - CardLayout
 - GridBagLayout

 

4. 이벤트 처리
가. 이벤트(event)
    ==> 사용자에 의해서 발생되는 액션을 의미한다.
    예> 마우스 클릭, 키보드 입력 등..
    ==> 이벤트가 발생되면 행위가 발생된다.
        이런 행위는 메소드가 처리한다.
        이 메소드를 포함하는 클래스가 필요한데 이 클래스를 '이벤트 핸들러' 라고한다.

나. 이벤트 핸들러 ( event handler )
    ==> 이벤트가 발생되었을 때 실제로 처리작업을 구현한 클래스를 의미
    예> 버튼클릭 --> 창닫기
    => 반드시 interFace를 사용해야 된다.
       공통적으로 XXXListener 이름으로 되어있다.
       예> ActionListener, ItemListener

다. 이벤트 소스 ( event source )
-> 실제로 이벤트가 발생된 컴포넌트를 의미한다.

 

4. 중첩 클래스
용도 : 클래스구조를 가지고 있지만 ,다른클래스에서 사용하지 않고 특정 클래스에서만 사용하는 경우로 주로 GUI 이벤트 처리시 사용한다.

 

정의 : 클래스내에 또 다른 클래스가 지정 가능하다. 바깥쪽의 클래스를 Outer 클래스라고 하고,
안쪽의 클래스를 중첩클래스(nested 클래스, inner 클래스)라고 한다.

종류 : 중첩클래스가 Outer클래스의 어떤 위치에 지정되었는가에 따라 4가지로 구성된다.

 

 

<기본 예제> Frame일 이용하여 버튼 만들어보기

 

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

 

public class FrameTest {

 Frame f;
 Button btnOK;
 Button btnCancel;
 Button btnWest;
 Button btnEast;
 Button btnSouth;


 public FrameTest() {
  f = new Frame("Frame 실습");
  btnOK = new Button("OK");
  btnCancel = new Button("Cancel");
  btnWest = new Button("West");
  btnEast = new Button("East");
  btnSouth = new Button("South");
 }

 public void init() {
  f.setLayout(new FlowLayout());
  f.add(btnOK, "Center");
  f.add(btnCancel, "North");
  f.add(btnWest, "West");
  f.add(btnEast, "East");
  f.add(btnSouth, "South");
  f.setSize(200, 200);
  f.setVisible(true);
 }

 public static void main(String[] args) {
 
  FrameTest t = new FrameTest();
     t.init();
    

 }
}

 

====수업 내용======

 

1. 자바 GUI ( Graphic User Interface )

 가. AWT ( Abstract Window Toolkit )
 => GUI 컴포넌트를 보여줄때 OS자원을 이용해서 보여진다.
    따라서 Window와 UNIX에서 보여지는 컴포넌트가 다르다.
 => 성능이 떨어진다.

 나. Swing
 => 자신이 가지고 있는 자원을 이용해서 컴퓨넌트를 보여준다.
    따라서 OS와 상관없이 항상 동일한 화면으로 보여진다.
 => 성능이 좋다.

2. AWT 의 계층구조

   Component

 Container   일반컴포넌트( Button,Textfield,List,Checkbox,Radio,,)

window  Panel

Frame  Dialog

- 일반컴포넌트는 반드시 Container에 얹혀서 보여진다.
- Panel도 반드시 Window계열 (Frame)에 얹혀서 보여진다.
- Panel은 복잡한 화면구성시 필요하다.

 일반 컴포넌트
 ------------
 Panel  / 일반 컴포넌트
 ----------------------
 Frame

3. 레이아웃 매니저
- 컴포넌트들의 위치와 크기를 관리하는 클래스

 => 종류
 - BorderLayout : Frame이 기본적으로 사용하는 레이아웃
   * 5가지 영역 존재
   (Center, North, South, West, East)
   각 영역마다 한개의 컴퓨턴트가 올라간다. 여러개 올려도 마지막으로 올라간 컴포넌트만 보여진다.
   영역을 지정하지 않으면 Cneter에 올라간다.
   * 크기를 resize 하면 위치 변경없고 크기변경됨.

 - FlowLayout : Panel이 기본적으로 사용하는 레이아웃
   * 왼쪽에서 오른쪽으로, 위에서 아래로 올라간다.
   * 크기를 resize하면 크기변경없고 위치변경됨
 - GridLayout : 바둑판

 - CardLayout
 - GridBagLayout

4. 이벤트 처리

* 용어정리
가. 이벤트(event)
    ==> 사용자에 의해서 발생되는 액션을 의미한다.
    예> 마우스 클릭, 키보드 입력 등..
    ==> 이벤트가 발생되면 행위가 발생된다.
        이런 행위는 메소드가 처리한다.
        이 메소드를 포함하는 클래스가 필요한데 이 클래스를 '이벤트 핸들러' 라고한다.

나. 이벤트 핸들러 ( event handler )
    ==> 이벤트가 발생되었을 때 실제로 처리작업을 구현한 클래스를 의미
    예> 버튼클릭 --> 창닫기
    => 반드시 interFace를 사용해야 된다.
       공통적으로 XXXListener 이름으로 되어있다.
       예> ActionListener, ItemListener

다. 이벤트 소스 ( event source )
-> 실제로 이벤트가 발생된 컴포넌트를 의미한다.

  예> OK 버튼 Cancel 버튼
 Button btnOK = new Button("OK");
 Button btnCancel = new Button("Cancel");

 OK버튼을 클릭 => btnOK 참조변수가 이벤트 소스가 된다.

    =>  이벤트 소스와 이벤트 핸들러 열결시키는 작업이 필요하다.
  예> btnOK.addXXXListener(핸들러클래스); 
   
    => 이벤트 소스 식별하는 방법
      
     - e.getActionCommand(); String
     - e.getSource() : Object

     예>
        Button btnOK = new Button("OK");
 Button btnCancel = new Button("Cancel");

* 이벤트 처리 아키텍쳐


 화면구성 클래스

 Button 생성
 버튼 클릭
 OK버튼 ---------------> 이벤트 핸들러 클래스
     ( System.out.println() 구현 )
      ,반드시 XXListener 인터페이스 구현

5. 이벤트 핸들러 클래스 위치에 따른 이벤트 처리 방법 4가지

 가. 화면구성클래스, 이벤트핸들러 클래스

 예> GUI.java , ButtonHandler.java
    
     public class GUI implemets ActionListener{
     }
 
 나. 화면 구성 클래스에서 처리

    - 자신이 구현
  
 -

6. 중첩 클래스
  용도 : 클래스구조를 가지고 있지만 ,
  다른클래스에서 사용하지 않고 특정 클래스에서만 사용하는 경우.
  주로 GUI 이벤트 처리시 사용한다.


  정의 : 클래스내에 또 다른 클래스가 지정 가능하다.
  바깥쪽의 클래스를 Outer 클래스라고 하고,
  안쪽의 클래스를 중첩클래스(nested 클래스, inner 클래스)라고 한다.

  종류 : 중첩클래스가 Outer클래스의 어떤 위치에 지정되었는가에
  따라 4가지로 구성된다.

 가.member 중첩 클래스
   ==> inner 클래스가 Outer 클래스의 맴버(변수,메소드)처럼 지정된 방식.

 예 >
  public class Outer{
      private int num =10;
      public int getnum(){ return num; }

      class Inner{
       int s=20;
       public void getInfo(){}
       //num 접근가능

      }

     => inner를 사용하기 위해서 반드시 outer클래스부터 객체생성해야 된다.
        예 > Outer o = new Outer();
      Outer.Inner i = o.new Inner();
      i.getInfo();

     => outer 클래스의 private 맴버도

 나. local 중첩 클래스
   ==> inner 클래스가 Outer 클래스의 메소드내에 지정된 방식.
 
 예 > class Outer{
  int num;
  public void getInfo(){
   int size = 10; //로컬변수
   final int kkk =10;
   //로컬 Inner
   class inner{
    public void getXX(){ }
      // size 접근불가
      kkk접근 가능( final 만 접근가능 )
   }

      Inner i = new Inner();
   i.getXX();   

  }
      }

  ==> Outer 메소드내에서 Inner 클래스를 객체생성해야 된다.
      Outer 메소드내의 로컬변수 접근 불가.

 

 다. Static 중첩 클래스
   ==> 중첩클래스가 static 으로 지정된 형태

 예 >
      class Outer{
  int num = 10;
  public void getInfo(){ } 

  //static inner  //먼저 생성이되서 위에num을 쓸수 없는것이다.
  static class Inner{

  }
      }

   ===> Outer클래스의 맴버 접근이 불가능하다.
        이유는 생성시점이 다르다.
        Inner 클래스는 Outer클래스명으로 접근이 가능하다.

 


 라. 익명 클래스
   ==> Outer 클래스내의 inner 클래스이지만,
       이름이 없는 inner 클래스이다.

   ==> 인터페이스, 추상클래스 사용시 주로 사용된다.

 예 > 추상클래스 사용하는 경우
 

 예 >
      일반클래스명 변수명 = new 일반클래스();

 

      추상클래스명 변수명 = new 추상클래스(){

   //추상메소드 구현

      };


      인터페이스명 변수명 = new 인터페이스(){

   //추상메소드 구현

      };

 

 

///////////////////////////////////
* 이클립스 플러그인
  ==> 이클립스에 기본 프로그램외에 추가적인 기능을
      제공하는 방법.
  ==> 자바GUI 개발시 사용 가능한 플로그인
      (windowBuilder)


가.
http://www.eclipse.org/windowbuilder/

나. 다운로드 선택

다. 4.2 link 누르지 말고 오른쪽클릭>속성>주소복사

라. 이클립스에서 help > install New Software 선택

마. Add 버튼 선택후에

 Name : 아무거나

 location : 복사한 주소

  이후에는 Next로 설치.

마지막으로 이클립스 재시작

//////////////////////////////////////

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

12일차 수업 ( 파일읽기,쓰기, 객체직렬화 )  

 

1. 파일읽기
=> 파일읽기시 사용 가능한 클래스

가. FileInputStream
 => 바이너리 데이터 ( 이미지파일, 텍스트파일등 )

나. FileReader
 => 텍스트 데이터

==> File 클래스를 이용해서 읽을 파일을 명시한다.

2. 파일 쓰기
=> 파일쓰기시 사용 가능한 클래스
가. FileOutputStream
 => 바이너리 데이터

나. FileWriter
 => 텍스트 데이터

3. 객체 직렬화 - > 내가 만든 클래스를 유지시키는 방법
 개념 : 객체생성한 클래스의 인스턴스 heap 메모리에 저장되는데, 이것은 휘발성이다.
 따라서 지속적으로 사용하기 위해서 파일로 저장하거나 네트워크를 통해 전송시킬수가 있는데
 아무 클래스나 가능한것이 아니고 반드시 '직렬화객체'만이 가능하다.
 이것을 가능하게 하는 작업을 '객체직렬화'라고 한다.

직렬화객체 생성방법
 : implements Serializable ( java.io.Serializable ) 을 한 클래스를
   '직렬화 객체' 라고 한다.

 

 

<예제 이미지 파일 복사>

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

 

public class FileReadWriteTest {

 public static void main(String[] args) {

  // c:\\Temp\\a.jpg 파일을 읽어서
  // c:\\Temp\\b.jpg 로 출력하기
  File f = new File("c:\\Temp\\a.jpg");
  File f2 = new File("c:\\Temp\\b.jpg");
  int size = (int) f.length();
  byte[] b = new byte[size]; // 1kbyte
  FileInputStream fis = null;
  FileOutputStream fos = null;
  try {
   fis = new FileInputStream(f);
   fos = new FileOutputStream(f2);
   try {
    int n = fis.read(b);
   } catch (IOException e) {

    e.printStackTrace();
   }
   try {
    fos.write(b);
   } catch (IOException e) {

    e.printStackTrace();
   }

  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } finally {
   try {
    if (fis != null)
     fis.close();
    if (fos != null)
     fos.close();
   } catch (IOException e) {

    e.printStackTrace();
   }
  }
 }
}

 

====수업 내용======

 

1. 파일읽기
=> 파일읽기시 사용 가능한 클래스

가. FileInputStream
 => 바이너리 데이터 ( 이미지파일, 텍스트파일등 )

나. FileReader
 => 텍스트 데이터

==> File 클래스를 이용해서 읽을 파일을 명시한다.

2. 파일 쓰기
=> 파일쓰기시 사용 가능한 클래스
가. FileOutputStream
 => 바이너리 데이터

나. FileWriter
 => 텍스트 데이터

3. 객체 직렬화
 개념 : 객체생성한 클래스의 인스턴스 heap 메모리에 저장되는데, 이것은 휘발성이다.
 따라서 지속적으로 사용하기 위해서 파일로 저장하거나 네트워크를 통해 전송시킬수가 있는데
 아무 클래스나 가능한것이 아니고 반드시 '직렬화객체'만이 가능하다.
 이것을 가능하게 하는 작업을 '객체직렬화'라고 한다. 

직렬화객체 생성방법
 : implements Serializable ( java.io.Serializable ) 을 한 클래스를
   '직렬화 객체' 라고 한다. 

 

********** 정리
가. 키보드 입력 ( 표준 입력 )
나. 모니터 출력 ( 표준 출력 )
다. 텍스트 파일 읽기
라. 텍스트 파일 쓰기
마. 바이너리 파일 읽기, 쓰기 ( 이미지 복사한것 )
바. 객체 직렬화


4. NIO ( New IO )

 : 이후에 나온 기술.

 가. Path 클래스
    ==> 파일 및 디렉토리 경로 관련

 나. Files 클래스
    ==> 파일과 관련 클래스( java.io.File 보다 향상 )


 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

11일차 수업 ( Java I/O , 표준입출력 )

1. 자바 I/O
. 용어 정리
 입력(input)                                                   출력(output)
 (입력스트림)                                                (출력스트림)
소스(source) --------자바프로그램 --------> 대상(sink)
 

 . 스트림의 데이터 종류?
 => 자바 프로그램에서 I/O 가능한 데이터 종류
 a. byte : 바이너리(binary) 데이터 처리시 사용.
 b. char : 문자 데이터 처리시 사용.
 

. 자바 I/O 클래스 제공.
 a. byte
 ==> 입력 최상위 클래스 : InputStream
     - FileInputStream (파일읽기)
     - ObjectInputStream
     출력 최상위 클래스 : OutputStream
     - FileOutputStream (파일출력)
     - ObjectOutputStream

 b. char
 ==> 입력 최상위 클래스 : Reader
     - FileReader
     - InputStreamReader
     - BufferedReader

     출력 최상위 클래스 : Writer
     - FileWriter
     - PrintWriter

 

2. 표준 입출력

1) System.in     표준 입력으로 데이터를 읽어올때 사용

2) System.out   표준 출력으로 모니터로 데이터를 출력 할때 사용

3) System.err    표준 에러로서 모니터에 에러정보를 출력할때 사용한다.

 

<예제 문장 1> 문자 한개를 입력받아 출력

import java.io.IOException;
import java.io.InputStream;

 

public class StandardOutputTest {
 public static void main(String[] args) {
  
  try{
  System.out.print("문자를 입력하세요 : ");
  InputStream a = System.in;
  int n = a.read(); //1byte 입력
  System.out.print("입력 값 : "+(char)n);
  a.close(); // 사용후에는 반드시 close() 사용하여 자원을 해제
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

<출력>

문자를 입력하세요 : abc
입력 값 : a

 

문자를 여러개 입력해도 하나만 입력 받아진다.

 

<예제문장 2>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

 

public class StandardOutputTest {
 public static void main(String[] args) {

  try {

   System.out.print("문자를 입력하세요 : ");
   InputStream a = System.in;
   InputStreamReader b = new InputStreamReader(a);
   BufferedReader c = new BufferedReader(b);
   String str = c.readLine();

   System.out.print("입력 값 : " + str);

   c.close(); // 사용후에는 반드시 close() 사용하여 자원을 해제

  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

<출력>

문자를 입력하세요 : abc 김상진
입력 값 : abc 김상진

 

입력데이터를 한 라인씩 처리하는 BufferedReader 클래스의 readLine() 메소드를 사용한 방식이다.

또한 String 으로 처리하기 때문에  예제1번처럼 char로 강제형변환을 하지 않아도 된다.

 

=====수업 내용======

 

1. 자바 I/O
 가. 용어 정리
      입력(input)  출력(output)
      (입력스트림)  (출력스트림)
 소스 -------->  자바프로그램 --------> 대상(sink)
 (source)
: 키보드    : 모니터
(표준입력 : standard input)  (표준출력 : standard out)
: 파일     : 파일
: 메모리    : 메모리
: 네트워크    : 네트워크

 나. 스트림의 데이터 종류?
   => 자바 프로그램에서 I/O 가능한 데이터 종류
 a. byte
 : 바이너리(binary) 데이터 처리시 사용.
   예> 이미지, 문자데이터 포함
 b. char
 : 문자 데이터 처리시 사용.
 다. 자바 I/O 클래스 제공.
 
 a. byte
 ==> 입력 최상위 클래스 : InputStream
     - FileInputStream (파일읽기)
     - ObjectInputStream
     출력 최상위 클래스 : OutputStream
     - FileOutputStream (파일출력)
     - ObjectOutputStream

 b. char
 ==> 입력 최상위 클래스 : Reader
     - FileReader
     - InputStreamReader
     - BufferedReader

     출력 최상위 클래스 : Writer
     - FileWriter
     - PrintWriter

  
2. 표준 입출력 ( Standard input / output)
==> 키보드로 입력
==> System 클래스로 처리한다.

가. 표준입력
InputStream is = System.in;
xxx.println(값);
==> System.out.println(값):

나. 표준출력
PrintStream xxx = System.out;

다. 표준에러
System.err

==> StandardInputTest2 실습의 특징은
- 1byte만 읽는다.
- 한글 못 읽는다.
- char로 형 변환시커야 된다.
- 반복처리
- \n과 \r을 필터링하는 작업 추가.
: 결론은 너무 불편하다.
이유는 InputSteam 클래스만 사용했기 때문이다.
다른 유용한 클래스를 같이 사용한다. 

StandardInputTest3 실습의 특징
- 지정된 byte 배열 크기만큼만 저장
- 한글처리 불가
- char로 형 변환 시켜야한다.
- 반복처리

3. try-with-resources 문
==> 자바7부터 사용가능
==> 외부 자원 사용시 자동 close시키는 방법이다.

ex)try(외부자원 선언;외부자원선언2;외부자원선언3){

}catch( ){
}
-----------------------------------
try{
 자원;
}catch(){
}finally{
//명시적으로 자원을  close 해야된다.
}

4. 파일 읽기

==> 어떤 파일이냐? ( 문자데이터, 이미지 )
문자 : FileReader
이미지 : FileInputStream

5. 파일 관련 클래스
==> java.io.file 클래스
==> 전반적인 파일의 정보를 관리.
ex) 경로, 파일명, 디렉토리 정보, 파일크기, 디렉토리 생성, 디렉토리 조회, 파일삭제등....
(파일생성 x)
==> 메타데이터 ( 정보의 정보 )를 관리.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

10일차 수업 ( 컬렉션/Hashset/ArrayList/제네릭 )

1. 컬렉션
데이터를 관리하는 여러 가지 저장 방식이 존재하며 이런 여러 가지 방식을 자바의
클래스로 구현한 것이 컬렉션.

    <<Collection>> 컬렉션의 최상위 클래스

   <<set>>    <<List>>      <<Map>>
Hashset     ArrayList     HashMap  
SortedSet    Vector


1) Hashset 사용해보기

import java.util.HashSet;;

public class Test {

public static void main(String[] args) {

HashSet set =new HashSet();

set.add("박보영");

set.add(new Integer(23));
set.add(new Float(3.14F));
set.add(234);
  
set.add("박보영");               // 중복 저장
set.add(new Integer(23));    // 중복 저장
set.add(new Float(3.14F));  // 중복 저장
set.add(234);                     // 중복 저장
  
System.out.println("출력 : " + set.toString());

 }

}

출력 : [234, 3.14, 23, 박보영]

==> set 계열의 특징은 데이터가 중복 저장이 안되며 저장되는 순서가 없다.
    즉 데이터 저장이 순서되로 되지 않는다.

 

2) ArrayList 사용해보기

import java.util.ArrayList;

public class Test {

 public static void main(String[] args) {
 ArrayList a = new ArrayList(); 
  a.add("박보영");
  a.add(new Integer(23));
  a.add(new Float(3.14F));
  a.add(234);
  
  a.add("박보영");             // 중복 저장
  a.add(new Integer(23));  // 중복 저장
  a.add(new Float(3.14F));  // 중복 저장
  a.add(234);                    // 중복 저장
  
  System.out.println("출력 : " + a.toString());
  
  for (int i = 0; i < a.size(); i++) {
  System.out.print(a.get(i)+", "); 
  }
 }

}


출력 : [박보영, 23, 3.14, 234, 박보영, 23, 3.14, 234]
박보영, 23, 3.14, 234, 박보영, 23, 3.14, 234,

=> list 는 데이터가 중복 저장이되며 저장은 입력순서되로 된다.


2. DTO 클래스
- 데이터를 효율적으로 전송 및 관리하기 위해서 사용되는 클래스를 의미한다.

 

3. 제네릭( generic )
- 데이터를 저장할 때 지정된 데이터형을 명시하기 때문에 가독성이 높다.
- 지정된 데이터형으로 형변환 할 필요가 없다.

<일반적으로 사용하는 방법>

ArrayList = list = new ArrayList();
==> 얻어 올 때 반드시 형변환 해야 된다.
==> 잘못된 데이터가 저장 될 수 있다.
 (실행시 파악할 수 있다. )

<Generic으로 사용하는 방법>

컬렉션 <저장 데이터형> 변수명 = new 컬렉션<저장 데이터형>();

==> 얻어 올 때 형변환 할 필요가 없다.
==> 잘못된 데이터를 컴파일 시점에 알 수 있다.

 

====수업 내용======

 

1. 컬렉션
데이터를 관리하는 여러 가지 저장 방ㅇ식이 존재하며 이런 여러 가지 방식을 자바의
클래스로 구현한 것이 컬렉션.

  <<Collection>> 컬렉션의 최상위 클래스

   <<set>>    <<List>>      <<Map>>
Hashset     ArrayList     HashMap  
SortedSet    Vector


1) Hashset 사용해보기

import java.util.HashSet;;

public class Test {

 public static void main(String[] args) {

  HashSet set =new HashSet();
  set.add("박보영");
  set.add(new Integer(23));
  set.add(new Float(3.14F));
  set.add(234);
  
  set.add("박보영");  // 중복 저장
  set.add(new Integer(23)); // 중복 저장
  set.add(new Float(3.14F));  // 중복 저장
  set.add(234);   // 중복 저장
  
  System.out.println("출력 : " + set.toString());
 }

}

출력 : [234, 3.14, 23, 박보영]

==> set 계열의 특징은 데이터가 중복 저장이 안되며 저장되는 순서가 없다.
    즉 데이터 저장이 순서되로 되지 않는다.

2) ArrayList 사용해보기

import java.util.ArrayList;

public class Test {

 public static void main(String[] args) {
  
  ArrayList a = new ArrayList();
  
  a.add("박보영");
  a.add(new Integer(23));
  a.add(new Float(3.14F));
  a.add(234);
  
  a.add("박보영");  // 중복 저장
  a.add(new Integer(23));  // 중복 저장
  a.add(new Float(3.14F));  // 중복 저장
  a.add(234);   // 중복 저장
  
  System.out.println("출력 : " + a.toString());
  
  for (int i = 0; i < a.size(); i++) {
  System.out.print(a.get(i)+", "); 
  }
 }

}


출력 : [박보영, 23, 3.14, 234, 박보영, 23, 3.14, 234]
박보영, 23, 3.14, 234, 박보영, 23, 3.14, 234,

=> 즉 list 는 데이터가 중복 저장이되며 저장은 입력순서되로 된다.


2. DTO 클래스
- 데이터를 효율적으로 전송 및 관리하기 위해서 사용되는 클래스를 의미한다.

3. 제네릭( generic )
- 데이터를 저장할 때 지정된 데이터형을 명시하기 때문에 가독성이 높다.
- 지정된 데이터형으로 형변환 할 필요가 없다.

<일반적으로 사용하는 방법>

ArrayList = list = new ArrayList();
==> 얻어 올 때 반드시 형변환 해야 된다.
==> 잘못된 데이터가 저장 될 수 있다.
 (실행시 파악할 수 있다. )

<Generic으로 사용하는 방법>

컬렉션 <저장 데이터형> 변수명 = new 컬렉션<저장 데이터형>();

==> 얻어 올 때 형변환 할 필요가 없다.
==> 잘못된 데이터를 컴파일 시점에 알 수 있다.

 

-----------------------------------------------------------------------


1. 다른 클래스에서 발생된 여러 데이터를 한꺼번에 가져오는 방법.

             b 메소드 호출
 A 클래스  --------------> B 클래스 ( 여러 데이터 발생 )
           <--------------     홍길동,20  이순신44  유관순 18
      결과값 리턴
결과값
보여주기

 ==> DTO 클래스 + ArrayList를 사용하면 된다.


 2. 일관된 방법으로 컬렉션에 저장된 데이터를 얻는 방법.


   - HashSet
      ==> toString()
      ==> 향상된 for 문
      ==> Iterator

   - ArrayList
       ==> 첨자이용 : get(index)
       ==> 향상된 for 문
        ==> Iterator

     -Vector
        ==> Iterator
 => Enumeration

    가. java.util.Enumeration ( 이뉴멀레이션 )
        :  hasMoreElements() : boolean
    nextElements() : Object

    나. java.util.Iterator  ( 이터레이터 )

        : hasNext() : boolean
   next() : Object
   remove()

==> 메소드를 이용해서 Iteraror, Enumeration 을 얻는다.
    (  new 하지 않는다. )


3.  Map 계열

 : 계층구조

      Object
         |
       <<Map>>
          |
    Hashmap , Hashtable, Properties

  : 특징
     ==> Set, List 계열은 데이터만 저장한다.
     Map 계열은  name/value(key/value) 쌍으로 저장한다.
    
     ==> 검색이 빠르다.
         name(key)을 이용해서  value를 바로 얻는다.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

9일차 수업 ( 예외처리 )

1. 예외 처리 

 일반적으로 프로그램 실행 중에 발생되는 의도하지 않은 문제를 의마하며 예외가 발생하면

프로그램은 비정상 종료된다. 이러한 현상을 방지하고 정상 종료되게 처리하는것을

예외처리 ( Exception Handling ) 이라고 한다.

 

<예외 처리 방법은 2가지>


a. try ~ catch
==> 예외가 발생된 곳에서 처리하는 방법.

 

try{

//예외발생코드

}catch(예외 클래스명 변수명){

}

위처럼 사용!

 

b. throws
==> 예외가 발생된 곳에서 하지 않고 호출한 곳으로 떠 넘기는 방법으로 main 메소드까지 떠 넘긴다.

굳이 throw 문을 사용 하는 이유는 아래와 같다.

 

 * 예외가 발생된 곳에서 그냥 try ~ catch 하면 네트워크 같은 상황에서는 사용자가 어떤 이유 때문에 원하는 결과가 안나왔는지 모른다. 따라서 throws 해서 사용자가 어디서 무슨 에러가 나왔는지 확인 할 수 있게 해야 한다.

 

====수업 내용======

 

1. 예외처리

가. 예외클래스 계층구조 파악

Object

Throwable

Exception

RuntimeException  IOException

하위클래스  하위클래스

==> API들은 어플리케이션에서 발생되는 모든 예외를 처리 가능하지 못하다. 범용적인 예외들만 처리가능하다.
detail한 예외처리는 사용자가 만들어서 처리해야 된다.
(사용자 정의 예외클래스)

* 사용자 정의 예외클래스
a. extends Exception
b. 문자열 하나 갖는 생성자.
   ==> 문자열은 예외 정보 저장시 사용된다.
c. 필요하면 여러 구성요소 추가 가능하다.
   ==> 사용자가 지정한 특정한 조건에 위배되었을 때.
   ( 문법적으로 문제 없다 )
   ex) 잔액부족
 검색을 했는데 데이터가 없는 경우,
 나이를 저장하는데 30이상,
 이메일 입력시 @를 입력 안하는 경우,

나. 예외처리 방법
==> 예외클래스 사용한다.
a. try ~ catch 문
==> 예외가 발생된 곳에서 처리하는 방법.

b. throws 문
==> 예외가 발생된 곳에서 하지 않고 호출한 곳으로 떠 넘기는 방법.
main 메소드까지 떠 넘긴다.
==> 주로 사용하는 이유
 : 예외가 발생된 곳에서 그냥 try ~ catch 하면 네트워크 같은 상황에서는 사용.
네트워크 같은 상황에서는 사용자가 어떤 이유 때문에 원하는 결과가 안나왔는지 모른다.
따라서 throws 해서 사용자가 예외 정보를 보게 해야 된다.

<주요 용도 2가지>

a. 사용자가 지정한 예외 조건.
- 사용자정의 예외 클래스가 필요
- 예외조건에 위배되면 예외를 발생시켜야 된다.
  throw new 사용자 정의 예외클래스(문자열);
- throws 하는 방법으로 예외처리한다.

b. 범용적인 예외 발생시 --> 사용자 정의 예외로 변경할 때

==> 0으로 나누었을 때 ArithmeticException 발생되고, 예외처리하고 예외정보 출력하면 /byZero 출력된다.
==>“0으로 나누어 예외 발생된”한국어로 된 예외로 다시 출력해야 된다.


ex)

0으로 나눔 ----> ArithmeticException 발생 ---> /byzero

==> 변경
0으로 나눔 --> ArithmeticException 발생 --> 예외처리(try-catch)--> 사용자 정의 예외클래스 발생.
 --> 사용자 정의 예외클래스 처리 --> “0으로 나누워 발생"

다. 예외 클래스의 종류 2가지

a. compile checked Exception
==> 컴파일시 예외처리 유무를 체크
 ( 만약에 예외처리가 안되어 있으면 컴파일 에러 발생)
==> IOException , SQLException 계열
특징 :
IO작업, SQL 작업과 관련된 메소드를 사용하는 경우에 반드시 예외 처리를 해야된다.
이유?  worker메소드에서 throws XXXException 한다.
따라서 caller 메소드에서는 try~catch해야된다.
안하면 에러 발생된다.


b. compile unchecked Exception
==> 컴파일시 예외 처리 유무를 체크안함
==> RuntimeException 계열
==> 실행할 때 발생되는 예외들이다.
==> 특징 : 예외처리할 필요가 없다.
    예외가 발생되지 않게 코드로 구현이 가능하기 때문이다.
개발자가 제대로 조건 체크했으면 에외발생 안되는 사항이다.
==> 따라서 예외 처리 할 생각 말고 조건 체크 잘해라!

2. 다중 데이터 처리

==> 대량의 데이터를 저장할 수 있는 방법

* 데이터 저장 방법
가. 변수

나. 배열
생성하면서 크기 지정해야 된다. (초기 사이즈)
따라서 데이터를 나중에 추가가 불가능하다. / 배열을 다시 생성해야 된다.

- 같은 데이터만 저장 가능하다. (다형성 제외 )
- 기본형 배열 사용 가능하다.
- 참조형 배열 사용 가능하다.
- 배열크기 : 배열명.length

다. 컬렉션 ( Collection )
- 생성만 하면 된다. 크기는 자동 증가/감소 된다.
- 서로 다른 데이터 모두 저장 가능하다.
- 저장 데이터는 참조데이터(클래스)만 가능하다.
- 기본형 저장 안되는 것이 아니고 Wrapper 클래스 사용하여 저장한다.

=> 결국 모든 데이터 저장 가능하다.
 - java.util 패키지에 존재하는 몇 개의 클래스 파일.
-컬렉션 크기 : 변수명.size()

* 크기(길이) ?

가. 문자열 길이
 str.length();
나. 배열 길이
 배열명.length
다. 컬렉션 길이
 변수명.size()
라. 파일크기


- 컬렉션의 계층구조

 Object

 << Collection >> - 인터페이스
  
<<Set>>    <<List>>
Hashset     ArrayList(****), Vector

: 데이터 중복안됨   : 데이터 중복 허용
: 데이터 순서없음   : 데이터 순서있음


* 제네릭( generic )
==> <>
==> <클래스형>을 지정해서 사용하는 방법

ex)
//일반적
ArrayList = list = new ArrayList();
==> 얻어 올 때 반드시 형변환 해야 된다.
==> 잘못된 데이터가 저장 될 수 있다.
 (실행시 파악할 수 있다. )

// Generic
ArrayList<저장할 클래스명> list = new ArrayList<>(); //JAVA 7부
==> 얻어 올 때 형변환 할 필요가 없다.
==> 잘못된 데이터를 컴파일 시점에 알 수 있다.

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

8일차 수업 ( 문자열 , 예외처리 )

1. 문자열 생성방법
. String 클래스 이용
- 한번 생성된 문자열은 변경안된다.
- 메소드를 사용하여 가공하면 새로운 문자열이 생성된다

따라서 문자열 조작이 적은 경우에 사용한다.

 

- 리터럴 이용
  > String str = "hello";
      String str3 = "hello";
   => literal pool 메모리에 생성된다.
      기존 문자열이 존자하면 재사용 한다.     
- new 이용
  > String str2 = new String("hello");
      String str4 = new String("hello");
   => heap 메모리에 생성된다. 매번 생성된다.
   - 메소드 정리

. StringBuffer 클래스 이용
- 한번생성된 문자열이 변경된다. 따라서 문자열 조작이 많은 경우에 사용된다.


   - new 이용
   > StringBuffer buffer = new StringBuffer("hello");

. toString 메소드 이용
=> 정수를 문자열로 변경
   String str = Integer.toStirng(123);
   String str2 = Float.toStirng(123.4F);

. + (연결 연산자) 이용
=> 문자열과 다른 데이터형이 + 만나면 자동으로 문자열로 변경된다.
 > System.out.println( 1 + 2 ); // 3
     System.out.println(1+ " " + 2); 1 2

     int x = 123;
     String str = x+""; // 권장 안함.
     String str2 = Integer.toStirng(123);
     String str3 = String.valueof(123);

 

<문자열의 다양한 처리방법>

 

  String str = "SJgood";
  
  //1. 모든 문자열을 대문자로 만들기
  System.out.println(str.toUpperCase());  //SJGOOD
  //2. 모든 문자열을 소문자로 만들기
  System.out.println(str.toLowerCase()); //sjgood
  //3. 문자열 부분 출력
  System.out.println(str.substring(0,2));  //SJ
  System.out.println(str.substring(2,6)); //good

 

2. 예외처리
예외( exception )?
=> 일반적으로 '에러'라고 부른다.
 ( '예외가 발생' 한다고 부른다. )
=> 예외가 발생되면 '프로그램이 비정상' 종료된다. (****)

>
 문장1;
 문장2;
 문장3;
 ...

 문장100;
 system.out.println("프로그램 정상종료");
 }.//end main

순차문이기 때문에 한번 실행된 문장을 다시 실행할 수 없다.
(반복문 제외)

 

<예외 처리 하는 방법>

Try ~ catch문 사용하기!
문법 :

 try{
     //예외발생코드
 }catch{예외클래스 변수명){
  //예외처리 코드
 }
* 다중 catch
- try 블럭안에 여러개의 문장이 지정 가능하다.
이 문장들이 서로 다른 예외가 발생가능하기 때문에 catch문도 여러개가 필요하다.

 try{
  문장1; => ArithmeticException
  문장2; => NullPointerException
  문장3; => ClassCastException
 }catch(ArithmeticException e){

 }catch(NullPointerException e){

 }catch(ClassCastException e){

 }

* finally
=> 예외가 발생유무와 상관없이 항상 실행되는 문장.
=> System.exit(0) 제외하고는 어떤 상황에서도 반드시 수행된다.
=> 주요용도: 파일 또는 데이터베이스와 같은 외부자원을 사용하고 close 하는 작업에 사용된다.


 try{

 }catch(){

 }finally{
 //반드시 수행되는 문장
 } 

 

====수업 내용======

 

1. 문자열 생성방법
가. String 클래스 이용
- 한번 생성된 문자열은 변경안되.ㅁ
  메소드를 사용하여 가공하면 새로운 문자열이 생성된다.
  따라서 문자열 조작이 적은 경우에 사용한다.
- 리터럴 이용
  예> String str = "hello";
      String str3 = "hello";
   => literal pool 메모리에 생성된다.
      기존 문자열이 존자하면 재사용 한다.     
- new 이용
  예> String str2 = new String("hello");
      String str4 = new String("hello");
   => heap 메모리에 생성된다. 매번 생성된다.
   - 메소드 정리
 
나. StringBuffer 클래스 이용
- 한번생성된 문자열이 변경된다. 따라서 문자열 조작이 많은 경우에 사용된다.
-
   - new 이용
   예> StringBuffer buffer = new StringBuffer("hello");
다. toString 메소드 이용
=> 정수를 문자열로 변경
   String str = Integer.toStirng(123);
   String str2 = Float.toStirng(123.4F);
라. + (연결 연산자) 이용
=> 문자열과 다른 데이터형이 + 만나면 자동으로 문자열로 변경된다.
 예> System.out.println( 1 + 2 ); // 3
     System.out.println(1+ " " + 2); 1 2
     int x = 123;
     String str = x+""; // 권장 안함.
     String str2 = Integer.toStirng(123);
     String str3 = String.valueof(123);
2. wrapper 클래스 : 기본형 데이터에 해당되는 클래스들의 묶음
기본형                         클래스
--------------------------------------
byte                            Byte
short    Short
int    Integer
long    Long
char    Character
float    Float
double    Double
boolean    Boolean
제공된 이유 : 기본형과 관련된 작업을 효율적으로 하기 위해서 제공됨
예> 숫자 --> 문자
    문자 --> 숫자
    int 범위 ?
    문자 대문자? 소문자?
3. 자동형변환
: 기본형  -------> Wrapper ( auto boxing )
  Wrapper -------> 기본형  ( auto unboxing )

4. Random 클래스
* 랜덤값 얻는 2가지 방법
가. Math.random();
0.0 <= <1.0
나. Random 클래스
: nextInt(n) ==> 0 ~ n-1 의 임의의 정수값 리턴
5. StringTokenizer 클래스
용도 : 특정구분문자로 분리된 통문자열에서 구분자를 기준으로 원하는 문자열을 얻는 방법
예> "홍길동 20 서울 " "
6. 날짜 데이터
Date
Calendar
7. 예외처리
- 예외( exception )?
=> 일반적으로 '에러'라고 부른다.
 ( '예외가 발생' 한다고 부른다. )
=> 예외가 발생되면 '프로그램이 비정상' 종료된다. (****)
예>
 문장1;
 문장2;
 문장3;
 ...
 문장100;
 system.out.println("프로그램 정상종료");
 }.//end main
순차문이기 때문에 한번 실행된 문장을 다시 실행할 수 없다.
(반복문 제외)
-예외처리를 담당하는 클래스가 제공된다. ( 예외 클래스 )
  Object
  Throwable
  Exception (
RuntimeException  IOException
NullPointerException  FileNotFoundException,
ArithmeticException
ArrayIndexOutbounds
ClassCastException
- 예외처리 방법 2가지
가. Try ~ catch문
문법 :
 try{
     //예외발생코드
 }catch{예외클래스 변수명){
  //예외처리 코드
 }
* 다중 catch문
- try 블럭안에 여러개의 문장이 지정 가능하다.
이 문장들이 서로 다른 예외가 발생가능하기 때문에 catch문도 여러개가 필요하다.
 try{
  문장1; => ArithmeticException
  문장2; => NullPointerException
  문장3; => ClassCastException
 }catch(ArithmeticException e){
 }catch(NullPointerException e){
 }catch(ClassCastException e){
 }
* finally 문
=> 예외가 발생유무와 상관없이 항상 실행되는 문장.
=> System.exit(0) 제외하고는 어떤 상황에서도 반드시 수행된다.
=> 주요용도: 파일 또는 데이터베이스와 같은 외부자원을 사용하고 close 하는 작업에 사용된다.

 try{
 }catch(){
 }finally{
 //반드시 수행되는 문장
 }
나. throws 키워드 이용
 
블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,