DQL(Data Query Lenguage) - 데이터 질의어, SELECT

-> 

DML (Data Manipulation Language) - 데이터 조작어, INSERT, UPDATE, DELETE


DDL 정의

DCL 컨트롤





INSERT


1. INSERT 문은 테이블에 새 행(row)을 추가하는데 이용하며, single table insert 나 multi table insert를 수행할 수 있다.


single table insert : 오직 하나의 테이블이나 뷰에 오직 하나의 행(row)의 값들을 삽입할 수 있다.

multi table insert : 하나 이상의 테이블로부터 스브쿼리로 얻은 여러 행(row)을 삽입하는 경우이다.


2.

insert into 테이블명 (컬럼명1, 컬럼명2, ...) values (값1, 값2, ...);

-> 컬럼명과 값은 1:1 매칭이 되어야 한다. 자료형, 순서, 갯수.



insert into 테이블 values (값1, 값2, ...);

-> 테이블에 있는 모든 컬럼을 대상으로 값을 입력하는 경우 컬럼명 부분을 생략할 수 있다.








자료형


1. VARCHAR2, NVARCHAR2 : 문자열형. 길이 지정. 최대 4000자.

2. NUMBER : 숫자형(정수, 실수). 길이 지정. 최대 38자리

3. DATE : 날짜형. 날짜, 시간이 저장됨.






NUMBER 자료형 자료 입력 테스트


CREATE TABLE test1 (

col1 number -- 38자리까지 입력가능

,col2 number(3) -- 3자리까지만 입력가능

,col3 number(5, 2) -- 5자리인데, 소수이하 2자리 입력가능. (소수이하 자리 포함해서 5자리)

);


insert into test1 (col1, col2, col3) values (123, 123, 123); -- 123, 123, 123

insert into test1 (col1, col2, col3) values (123.45, 123.45, 123.45); -- 123.45, 123, 123.45

insert into test1 (col1, col2, col3) values (123.456, 123.456, 123.456); -- 123.456, 123, 123.46

insert into test1 (col1, col2, col3) values (1234, 1234, 1234); -- 입력시도하는 정수가 크므로 아예 입력 불가





DATE 자료형 자료 입력 테스트


CREATE TABLE test2 (

col1 date --날짜, 시간 저장

);


insert into test1 (col1) values (SYSDATE); -- 2012-10-25 10:05:30

insert into test1 (col1) values ('20121025'); -- 2012-10-25 00:00:00

insert into test1 (col1) values ('2012-10-25'); -- 2012-10-25 00:00:00

insert into test1 (col1) values ('2012/10/25'); -- 2012-10-25 00:00:00





VARCHAR2, NVARCHAR2 자료형 자료 입력 테스트


CREATE TABLE test3 (

col1 VARCHAR2(1) -- 1글자만 허용.

,col2 VARCHAR2(10) -- 10글자까지 허용. 영어는 1글자, 한글은 한글자당 3글자 차지

,col3 NVARCHAR2(10) -- 10글자까지 허용. 영어, 한글 상관없이 한글자당 1글자 차지

);


insert into test3(col1, col2, col3) values ('A', 'B', 'C'); --A, B, C

SELECT * FROM test3;

insert into test3(col1, col2, col3) values ('TEST', 'TEST', 'TEST'); -- 허용 글자수 오버로 입력 불가.


insert into test3(col2, col3) values ('ORACLEDATA', 'ORACLEDATA'); -- 널, ORACLEDATA, ORACLEDATA

insert into test3(col2, col3) values ('ORACLEDATABASE', 'ORACLEDATABASE'); -- 허용 글자수 오버로 입력 불가.


insert into test3(col2, col3) values ('오라클', '오라클'); -- 널, 오라클, 오라클,

insert into test3(col2, col3) values ('오라클데이터베이스', '오라클데이터베이스'); -- 허용 글자수 오버로 입력 불가.


insert into test3(col3) values ('오라클데이터베이스'); -- 널, 널, 오라클데이터베이스

insert into test3(col2) values ('오라클데'); -- 한글 하나당 3자리 차지하므로 입력 불가.






테이블 객체 관리


1. 새 테이블 생성

create table 테이블명 (

컬럼명 자료형 [제약조건]

,...

);



2. 기존 테이블 구조 확인

desc 테이블명;



3. 기존 테이블 구조 복사해서 새 테이블 생성

create table 새테이블명

as

select 컬럼리스트 from 기존테이블명 where 1=0;



4. 기존 테이블 구조 및 자료 복사해서 새 테이블 생성

create table 새테이블명

as

select 컬럼리스트 from 기존테이블명 [where 조건식]; -- 조건식이있을 경우 조건식에 만족하는 행만 복사



-- insa 테이블 복사해서 test4 테이블 생성. 구조와 자료 전체 복사.

create table test4 as 

select * from insa;



5. 기존 테이블에 새 열(column) 추가

alter table 기존테이블명

add (열이름 자료형, ....);



6. 기존 테이블에 기존 열(column) 자료형 변경

alter table 기존테이블명

modify 열이름 새로운자료형;



7. 기존 테이블에 기존 열(column) 이름 변경

alter table 기존테이블명

rename column 기존열이름 to 새열이름;



8. 기존 테이블에 기존 열(column) 삭제

alter table 기존테이블명

drop column (열이름, ....);


9. 기존 테이블의 이름 변경

rename 기존테이블명 to 새로운테이블명;


10. 기존 테이블 삭제 (휴지통 기능)

drop table 테이블명; -- 휴지통으로 이동한 상태


-- 휴지통에 있는 객체 확인.

select *

from recyclebin;


-- 휴지통에 있는 객체 복원.

flashback table 테이블명 to before drop;


-- 휴지통 비우기

purge recyclebin;


-- 완전 삭제(휴지통을 거치지 않고 바로 삭제)

drop table 테이블명 PURGE;







제약 조건


1. Primary Key(PK), Unique(UK), NOT NULL, Check(CK), Foreign Key(FK)


2. 무결성 유지를 위한 조건 추가. 개체 무결성, 참조 무결성, 도메인 무결성.


3. 제약조건 지정방법

- 컬럼레벨

CREATE TABLE 테이블명 (

컬럼명 자료형 [CONSTRAINT 제약명] 제약조건명  // [] 은 제약조건명이 제약명을 가진 객체로 오라클이 가지고 있게 하여, 추후 수정할때 사용함.

,...

);



- 테이블레벨 (권장)

CREATE TABLE 테이블명 (

컬럼명 자료형 

,...

,CONSTRAINT 제약명 제약조건명 (컬럼지정)

);



4. 제약조건 확인

select * from user_constraints;


-- 특정 테이블에 있는 제약조건 확인 (제약 종류만 확인)

select * from user_constraints 

where table_name = 'TEST7'; -- 테이블명 대문자로 표기



-- 특정 테이블에 있는 제약조건이 지정된 컬럼 정보 확인 (제약조건 걸린 컬럼명만 확인)

select *

from user_cons_columns

where table_name = 'TEST7';



-- 제약종류와 컬럼 정보를 동시에 확인. constraint_name 컬럼을 기준으로 join


select uc.owner, uc.table_name, column_name, constraint_type, uc.constraint_name

from user_constraints uc, user_cons_columns ucc

where uc.constraint_name = ucc.constraint_name AND uc.table_name = '테이블명';


****

-> 자주 사용하는 select 쿼리는 view 객체로 등록


create view constraint_check

as

select uc.owner, uc.table_name as table_name, column_name, constraint_type, uc.constraint_name

from user_constraints uc, user_cons_columns ucc

where uc.constraint_name = ucc.constraint_name;


-> view 객체를 이용한 제약조건 확인


select * from constraint_check

where table_name ='테이블명';



-- 특정 테이블의 NOT NULL 제약 여부 확인


DESC 테이블명;




-- DEFAULT 제약 확인 

SELECT *

FROM user_tab_columns

where table_name = '테이블명';



-- 제약 확인용 VIEW 객체 수정 (CHECK 제약 확인 추가)


create or replace view constraint_check

as

select uc.owner, uc.table_name as table_name, column_name, constraint_type, uc.constraint_name, uc.search_condition

from user_constraints uc, user_cons_columns ucc

where uc.constraint_name = ucc.constraint_name;






◆ Primary Key(PK)

 * 특성

- PK가 지정된 컬럼에는 중복된 데이터 입력 불가.

- 테이블에는 PK를 한번만 지정가능.

- PK가 지정된 컬럼에는 NULL 값을 허용하지 않는다.

- PK가 지정된 컬럼에는 UNIQUE INDEX가 자동 생성된다.

- PK가 지정된 컬럼이 두 개 이상인 경우는 묶어서 하나로 처리해야 한다.

-- 컬럼지정시 컬럼을 다중으로 기재하면 복합키 처리가 됨.


 * 형식

CREATE TABLE 테이블명 (

컬럼명 자료형 

,...

,CONSTRAINT 제약명 PRIMARY KEY (컬럼지정)

);



--PK 지정전

CREATE TABLE test6 (

col1 NUMBER

,col2 VARCHAR2(10)

);


INSERT INTO test6(col1, col2) values (1, 'hong'); -- 1, hong

INSERT INTO test6(col1, col2) values (2, 'kim'); -- 2, kim

INSERT INTO test6(col1, col2) values (2, 'park'); -- 2, park

INSERT INTO test6(col2) values ('choi'); -- NULL, choi

INSERT INTO test6(col1, col2) values (NULL, NULL); -- NULL, NULL



--PK 지정후

CREATE TABLE test7 (

col1 NUMBER

,col2 VARCHAR2(10)

,CONSTRAINT test7_col1_pk PRIMARY KEY (col1)

);


INSERT INTO test7(col1, col2) values (1, 'hong'); -- O

INSERT INTO test7(col1, col2) values (2, 'kim'); -- O

INSERT INTO test7(col1, col2) values (2, 'park'); -- X

INSERT INTO test7(col2) values ('choi'); -- X

INSERT INTO test7(col1, col2) values (NULL, NULL); -- X






◆ Unique(UK)

 * 특성

- UK가 지정된 컬럼에는 중복된 데이터 입력 불가.

- 테이블에 UK를 여러번 지정 가능.

- UK가 지정된 컬럼은 NULL 값을 허용한다.


 * 형식

CREATE TABLE 테이블명 (

컬럼명 자료형 

,...

,CONSTRAINT 제약명 UNIQUE (컬럼지정)

);


-- UK 지정전

CREATE TABLE test8 (

col1 NUMBER -- PK 지정대상

,col2 VARCHAR2(10)

,col3 VARCHAR2(20) -- UK 지정대상

);


INSERT INTO test8 (col1, col2, col3) VALUES (1, 'kim', 'test@nate.com'); - 입력 가능

INSERT INTO test8 (col1, col2, col3) VALUES (2, 'park', 'test@nate.com'); - 입력 가능



--UK 지정 후

CREATE TABLE test9 (

col1 NUMBER

,col2 VARCHAR2(10)

,col3 VARCHAR2(20)

,CONSTRAINT test9_col1_pk PRIMARY KEY (col1)

,CONSTRAINT test9_col2_uk UNIQUE (col2)

);


INSERT INTO test8 (col1, col2, col3) VALUES (1, 'kim', 'test@nate.com'); - 입력 가능

INSERT INTO test8 (col1, col2, col3) VALUES (2, 'park', 'test@nate.com'); - 입력 불가






◆ NOT NULL 키워드


1. 특정 컬럼이 NULL 값이 가지지 못하도록 막는다. PK가 지정된 컬럼은 자동으로 NOT NULL 특성을 가진다.


2. 형식

CREATE TABLE 테이블명 (

컬럼명 자료형 NOT NULL

,...

);



-- NOT NULL 지정


CREATE TABLE test10 (

col1 VARCHAR2(10) NOT NULL --NULL 허용안함

,col2 VARCHAR2(10) -- NULL 허용

);


INSERT INTO test10 (col1, col2) VALUES ('test', 'test'); --O

INSERT INTO test10 (col1, col2) VALUES (NULL, NULL); --X









◆ DEFAULT 키워드


1. 입력시 미리 약속된 값을 자동 삽입 하는 경우. 단, 명시적으로 값을 입력하는 경우는 무시됨.


2. 형식

CREATE TABLE 테이블명 (

컬럼명 자료형 DEFAULT 값

,...

);




CREATE TABLE test11 (

col1 NUMBER

,col2 VARCHAR2(10)

,col3 DATE DEFAULT SYSDATE

);


INSERT INTO test11 (col1, col2, col3) values (1, 'hong', '20120101'); -- DEFAULT 값 무시됨

INSERT INTO test11 (col1, col2) values (2, 'kim');

INSERT INTO test11 (col1, col2) values (3, 'park', DEFAULT); -- DEFAULT값 자동 삽입.




-- DEFAULT 제약 확인 

SELECT *

FROM user_tab_columns

where table_name = '테이블명';







 CHECK 


1. 특정 컬럼에 입력되는 데이터에 대한 허용 범위를 지정할 때 사용.


2. 형식

CREATE TABLE 테이블명 (

컬럼명 자료형

,...

,CONSTRAINT 제약명 CHECK (조건식)

);


CREATE TABLE test12 (

col1 VARCHAR2(10)

,col2 NUMBER(3) --점수 입력 컬럼(0~100)

,CONSTRAINT test12_col2_ck CHECK (col2 between 0 and 100)

);



INSERT INTO test12 (col1, col2) values ('hong', 100); --O

INSERT INTO test12 (col1, col2) values ('park', 200); --X



-- 제약 확인용 VIEW 객체 수정 (CHECK 제약 확인 추가)


create or replace view constraint_check

as

select uc.owner, uc.table_name as table_name as table_name, column_name, constraint_type, uc.constraint_name, uc.search_condition

from user_constraints uc, user_cons_columns ucc

where uc.constraint_name = ucc.constraint_name;



-- NOT NULL 지정을 CHECK 제약으로 하는 방법


CREATE TABLE test13 (

col1 VARCHAR2(10) --NULL 허용안함

,col2 VARCHAR2(10) -- NULL 허용

,CONSTRAINT test13_col1_NN CHECK (col1 IS NOT NULL)

);


INSERT INTO test10 (col1, col2) VALUES ('test', 'test'); --O

INSERT INTO test10 (col1, col2) VALUES (NULL, NULL); --X







 FOREIGN KEY


1. 관계 설정시 사용하는 제약.

- FK가 지정된 컬럼에는 자료 입력이 참조를 하고 있는 PK 또는 UK 컬럼의 값들로 제한된다.

- FK가 지정된 컬럼에 자료입력하려면 먼저 PK 또는 UK컬럼에 해당 자료가 존재해야 한다.

- FK가 지정되고 나면 참조 당하는 PK 또는 UK 컬럼의 테이블 또는 자료는 삭제가 안된다.



2. 형식

CREATE TABLE 테이블명 (

컬럼명 자료명

,...

,CONSTRAINT 제약명 FOREIGN KEY (컬럼지정)

REFERENCES 참조테이블명(참조컬럼지정)

);


-- PK 제약 지정된 테이블

CREATE TABLE test14 (

col1 NUMBER -- PK

,col2 VARCHAR2(10)

,CONSTRAINT test14_col1_PK PRIMARY KEY (col1)

);


-- FK 제약 지정된 테이블

CREATE TABLE test15 (

col3 NUMBER -- PK

,col4 VARCHAR2(10)

,col1 NUMBER -- FK

,CONSTRAINT test15_col3_PK PRIMARY KEY (col3)

,CONSTRAINT test15_col1_FK FOREIGN KEY (col1) REFERENCES test14 (col1)

);



-- PK 자료 입력

INSERT INTO test14 (col1, col2) values (1, 'kim');

INSERT INTO test14 (col1, col2) values (2, 'park');

INSERT INTO test14 (col1, col2) values (3, 'hong');


-- FK 자료 입력

insert into test15 (col3, con4, col1) values (1, 'kim', 1);

insert into test15 (col3, con4, col1) values (2, 'park', 3);

insert into test15 (col3, con4, col1) values (3, 'hong', 4);



-- PK 자료 삭제 테스트

delete from test14

where col1 = 1;  --X



delete fron test14

where col1 = 3; --O








제약 조건 관리


1. 테이블 생성 후 제약 조건 추가

ALTER TABLE 테이블명

ADD (CONSTRAINT 제약명 제약조건 (컬럼지정)

, ...);


2. 제약 조건 삭제

ALTER TABLE 테이블명

DROP CONSTRAINT 제약명;


3. 제약 조건 확인

SELECT uc.owner                         --소유자

, uc.constraint_name            --제약명

, uc.table_name AS table_name   --테이블명

, uc.constraint_type            --제약조건 종류(P, R, U, C)

, uc.search_condition           --CHECK 제약 조건식

, ucc.column_name               --지정된 컬럼

, (SELECT table_name 

FROM user_constraints 

WHERE constraint_name=uc.r_constraint_name) 

AS r_table_name --참조하는 테이블

, (SELECT column_name 

FROM user_constraints 

WHERE constraint_name=uc.r_constraint_name) 

AS r_conlumn_name --참조하는 컬럼

FROM user_constraints uc, user_cons_columns ucc

WHERE uc.constraint_name = ucc.constraint_name


4. NOT NULL, DEFAULT 지정은 별도 확인

--NOT NULL 확인

DESC 테이블명;


--DEFAULT 확인

SELECT *

FROM user_tab_columns

WHERE table_name='테이블명';







문제) emp, city, buseo, jikwi 테이블에서 제약 조건 추가할 것.

아래 형태의 테이블 생성이 된 후에 제약 조건 추가 명령을 내린다고 가정함.


--city 테이블 생성

CREATE TABLE city (

city_id NUMBER --PK

, city VARCHAR2(10) --CK. 서울,충남,인천,부산,제주,전북,강원,경북,전남,경기 한정

);


--buseo 테이블 생성

CREATE TABLE buseo (

buseo_id NUMBER --PK

, buseo VARCHAR2(15) --CK. 총무부,개발부,영업부,기획부,인사부,자재부,홍보부 한정

);


--jikwi 테이블 생성

CREATE TABLE jikwi (

jikwi_id NUMBER --PK

, jikwi VARCHAR2(15) --CK. 과장,대리,부장,사원,사장,이사 한정

);


--emp 테이블 생성

CREATE TABLE emp (

num NUMBER --PK

, name VARCHAR2(20) -- NOT NULL

, ssn  VARCHAR2(14) -- NOT NULL

, ibsaDate DATE

, city_id NUMBER --FK

, tel   VARCHAR2(15)

, buseo_id NUMBER --FK

, jikwi_id NUMBER --FK

, basicPay NUMBER(10) --CK. 0 이상

, sudang NUMBER(10) --CK. 0 이상

);



WRITTEN BY
빨강꼬마

,
10일차의 가장 중요한 포인트

- 사용자 정의 클래스 자료형 만들기 및 클래스 자료형 선언 방법
- 선언한 클래스 자료형을 이용하여 여러 객체 생성
- 클래스 자료형으로 배열 만드는 이유
- 유저가 자료를 임의로 입력할때 setter 를 이용하여 클래스 자료형 배열에 객체를 저장.
- 클래스 자료형 배열 내에 getter를 이용하여 객체n번째에 저장된 자료를 출력


클래스, 객체, 인스턴스

1. 클래스의 객체에 원본 정의서.

2. 객체(instance)는 클래스가 실행되서 메모리에 적재된 상태를 말함.
클래스(원본) -> 객체1 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터
                  -> 객체2 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터
                  -> 객체3 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터

클래스명 변수명 = new 클래스명();



문제) 거스름돈을 화폐단위로 구분해서 출력.
실행예)
금액(10~1000)? 990
총액 : 990원
오백원 1개, 백원 4개, 오십원 1개, 십원 4개




문제) 2자리 이상의 수를 입력 받아서 자릿수들의 합을 계산해서 출력. 클래스 이용.
실행 예)
숫자 입력(2자리 이상)?1234
1000자리의 수 -> 1
100자리의 수 -> 2
10자리의 수 -> 3
1자리의 수 -> 4
자릿수의 합 : 10

1234 -> 문자열 길이를 얻는다 -> 4

2 -> (10)2-1승 -> 10
3 -> (10)3-1승 -> 100
4 -> (10)4-1승 -> 1000
...
n -> (10)n-1승 -> 100000....  -> a

1234 -> (1234%10000)/1000 -> 1234/1000   -> 1
1234 -> (1234%1000)/100 -> 2
1234 -> ((1234%1000)%100)/10 -> 3
1234 -> (((1234%1000)%100)%10)/1 -> 4






문제) 2자리 이상의 수를 입력 받아서 자릿수들의 합을 계산해서 출력. 클래스 이용.
문자열을 한 글자씩 분리하는 방법으로 해결 
실행 예)
숫자 입력(2자리 이상)?1234
1000자리의 수 -> 1
100자리의 수 -> 2
10자리의 수 -> 3
1자리의 수 -> 4
자릿수의 합 : 10






문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기. 사용자 정의 클래스 이용. sort() 메소드 금지
실행 예)
숫자1? X
숫자2? Y
숫자3? Z
입력 받은 숫자: X, Y, Z가장 큰 숫자: X






문제) 여러 개의 숫자 중에서 가장 큰 숫자 구하기. 배열 및 사용자 정의 클래스 이용. sort() 메소드 금지
실행 예)
입력할 숫자의 갯수 지정(2~10)?
숫자1? X
숫자2? Y
숫자3? Z
...
입력 받은 숫자: X, Y, Z, .....
가장 큰 숫자: X





접근 지정자


1. public, private, protected, default(표시하지 않는 상태)

2. 외부에서 해당 멤버를 접근할 수 있는 기준제시.

package 패키지명;
접근지정자 class 클래스명 {

접근지정자 자료형 멤버변수;
접근지정자 자료형 메소드명(매개변수 리스트) {
자료형 지역변수; //접근지정자 사용 불가.
//실행문
}

자료형 멤버변수;
접근지정자 자료형 메소드명(매개변수 리스트) {
자료형 지역변수; //접근지정자 사용 불가.
//실행문
}
}


3. 멤버변수는 private, 클래스나 메소드는 public을 주로 사용.

4.
public 지정시 -> 어떤 위치에서든지 접근 가능.
private 지정시 -> 해당 영역 안에서만 접근 가능.
protected 지정시 -> 상속 관계가 있는 클래스에서만 접근 가능.
default 지정시(아무것도 안썼을때) -> 같은 패키지 내에서만 접근 가능.

Class08_02 -> [각주:1] (같은 패키지에 소속되어 있는 상태)
Class08_3 -> [각주:2] (다른 패키지에 소속되어 있는 상태)
Class08_4 -> [각주:3] (다른 패키지에 소속되어 있는 상태)





getter, setter

1. 메소드중에서 private 멤버변수를 위한 접근용 메소드.






이클립스 기능을 이용한 getter, setter 메소드 자동 완성





중요 예제 (클래스 자료형 선언, 객체 생성, 출력등)

이름과 전화번호를 저장할 수 있는 자료형 만들기
실행 예)
회원 수(1~10)?3
이름 전화번호(1)? hong 111-1111
이름 전화번호(2)? kim 222-2222
이름 전화번호(3)? park 333-3333
----------------
전체 회원수: 3명
----------------
이름    전화번호
hong    111-1111
kim     222-2222
park    333-3333
----------------

//Member.java (사용자 정의 클래스)

package com.test;

public class Member {

private String name, tel;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}


//Class11.java (main() 메소드 포함 클래스)


package com.test;

import java.util.*;

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

//입력
Scanner sc = new Scanner(System.in);
System.out.print("회원수 입력(1~10)?");
String num = sc.next();
int count = Integer.parseInt(num);

//이름및 전화번호 자료형 클래스 활성화 및 저장용 배열 생성
                //아래에서 사용된 Member는 사용자 정의 클래스 자료형(참조형)을 의미한다.
                //배열의 자료형 선언은 String, int, 참조형등 여러 자료형 선언이 가능하고,
                //
배열 자체가 for문등 사용자 임의의 수를 기반으로 데이터를 운용하기에 
                //매우 적합하기 때문에 이 예제에서 클래스 자료형 배열을 생성한 것이다.

Member[] members = new Member[count]; // 사용자 정의 클래스 자료형인 배열을 생성

//처리

for (int a=0; a<members.length; a++) {
System.out.printf("이름:전화번호(%d)?", (a+1));
String name = sc.next(); //이름
String tel = sc.next(); //전화번호

Member member = new Member();   // member 객체 생성 과정
member.setName(name);                //member 객체에 이름 저장(바로 윗줄에서 생성한 객체이름)
member.setTel(tel);                       //member 객체에 전화번호 저장
members[a] = member;                 //member 객체를 배열에 저장하는 과정

}

//출력

System.out.println("----------------");
System.out.printf("전체 회원수: %d명%n", count);
System.out.println("----------------");
System.out.println("이름   전화번호");
for (int a=0; a<members.length; a++) {

//members[a]는  Member 객체를 리턴할 뿐이다.
//name, tel 접근을 하려면  Member 객체에서 gerName(), gerTel()을 이용해야 한다.
// System.out.printf("%s %s %n", members[a]); 일케하면 members[a]는 자동으로 이름과 전화번호를 뿌려주지 않는다.


//캐스트 연산자 Member 유의. 추후 캐스트 연산자를 이런식으로 사용할 수 있는 케이스가 있다.
//현재 예제에서는 캐스트 연산자를 사용하지 않아도 된다.


//members[a] 에는 name 과 tel 이라는 두 저장공간이 있다.
//
출력단에서 출력할때에 members[a]라고만 기재할 경우 출력되지 않으며,
//(배열명).사용자정의클래스내메소드명()     형식으로 기재해야한다.
//
즉, (members[a]).getName()

    System.out.printf("%s    %s %n", ((Member)members[a]).getName(), ((Member)members[a]).getTel()); 
}

System.out.println("----------------");

}

}

  1. public void method1() { System.out.println("Class08_2 > method1() 호출");} void method2() { System.out.println("Class08_2 > method2() 호출");} private void method3() { System.out.println("Class08_2 > method3() 호출");} [본문으로]
  2. public void method1() { System.out.println("Class08_3 > method1() 호출");} void method2() { System.out.println("Class08_3 > method2() 호출");} private void method3() { System.out.println("Class08_3 > method3() 호출");} [본문으로]
  3. public void method1() { System.out.println("Class08_4 > method1() 호출");} void method2() { System.out.println("Class08_4 > method2() 호출");} private void method3() { System.out.println("Class08_4 > method3() 호출");} public void method4() { method3();} } [본문으로]

WRITTEN BY
빨강꼬마

,