* 별칭  : as 컬럼명

* 조건절

1. where 

2. between : 범위지정

3. in : 열거

4. like : 패턴검색, '김__'/'김%'

5. distinct : 중복값 제거

6. null 조건 : null상태 검사, is null/is not null

7. order by : 정렬, asc/desc

8. months_between : 날짜


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
 
-- 컬럼 리스트
-- : 테이블로부터 가져올 컬럼 명단
-- : 컬럼명 or *(모든 컬럼)
 
desc table tblCountry;
 
select * from tblCountry; --결과 테이블, 결과셋, Resultset, 레코드셋(Record Set)
select name from tblCountry; --단일 컬럼
select name, capital from tblCountry; --2개
select name, area * 2 from tblCountry; --연산 가능
select name, name from tblCountry; --중복 컬럼
select name, '수도 : ' || name from tblCountry; --중복 컬럼
select name, name, area, area*2 from tblCountry;
 
 
-- 결과셋의 컬럼명의 별칭(Alias) 붙이기 
--  : 컬럼명 as 별칭
--  : 컬럼명 as "별칭"
--  : 자바에서는 별칭을 인식한다. 의미있게 짓기 
select name, name as 국가명, area, area*2 as 면적 from tblCountry;
select name as name2 from tblCountry;
select name as "나라 이름" from tblCountry; --공백 (추천x)
select name as "select" from tblCountry; --예약어 사용 (추천x)
 
 
 
 
 
-- 상수 표현
-- 1. 숫자 상수
--  : 10
--  : 2.5
 
-- 2. 문자(열) 상수
--  : '문자열' (o)
--  : "문자열" (x)
 
-- 3. 날짜/시간 상수
--  : '2014-01-10' <- date 타입 (문맥에 따라 다름)
--  : '2014년 월 10일' <- 지원(x)
 
 
 
-- 문자열 연산자
--  : 문자열 + 문자열 <- concat
--  : '문자열' || '문자열'
select '국가명 : ' || name as 국가명 from tblCountry;
select '국가명 : ' + name as 국가명 from tblCountry; --사용x
 
select * from employees;
select first_name || '' || last_name as name from employees;
 
 
-- select는 상수나 연산의 결과나 함수의 결과를 출력
select 10;
select 10 from employees;
select 10 from dual; --가상 테이블
 
select 10 + 20 from dual; --별 쓸모 없는.,
select sysdate from dual; --현재 시간 얻어오기
 
 
 
 
-- 연산자
-- 1. 산술 연산자
--  : +, -, *, /
 
-- 2. 비교 연산자
--  : >, >=, <, <=, =(==), <>(!=)
 
-- 3. 논리 연산자
--  : and(&&), or(||), not(!)
 
-- 4. 문자열 연산자
--  : ||
 
-- 5. SQL 연산자(java : obj instanceof class)
-- : in, between, like, is null, not null, any, all.,
 
 
-- select 컬럼리스트 from 테이블 where절 order by절
-- 1. 컬럼 리스트
--  : 원하는 컬럼만 가져오기
--  : 수직 필터링
 
-- 2. where 절★★
--  : 원하는 행만 가져오기
--  : 수평 테이블
--  : 주로 비교연산식, 논리연산식을 사용, 함수를 사용
 
select * from tblCountry --모든 행(14행)
select * from tblCountry where 행을 구분하기 위한 조건;
select * from tblCountry where cont = 'AS';
select * from tblCountry where area >= 500;
select * from tblCountry where area < 500;
 
 
 
-- ask] 인구수가 5000이 넘는 나라의 국가명과 인구수를 가져오시오.
select * from tblCountry; --1.모든 데이터(원본) 가져와서 확인하기
select name, popu from tblCountry where popu >= 5000;
 
-- ask] 동시에 가져오는 거 어떻게?
-- 1. 면적(area)이 100 초과하는 나라의 국가명(name)과 면적(area)을 출력하시오.
select name, area from tblCountry where area > 100;
 
-- 2. 아시아(AS) 대륙에 속한 국가명(name)을 출력하시오.
select name from tblCountry where cont = 'AS';
 
-- 3. 아시아와 유럽에 속한 국가명을 출력하시오.
select name from tblCountry where cont = 'AS' or cont = 'EU';
 
-- 4. 아시아에 속하지 않는 국가명을 출력하시오.
select name from tblCountry where cont <> 'AS';
 
-- 5. 인구수가 10000 이상이고 면적이 100이상인 국가명, 인구수, 면적을 출력하시오. 
select name, popu, area from tblCountry 
  where popu >= 10000 and area >=100;
 
 
 
 
-- insa 테이블
desc table insa; --1.구성확인하기
select * from insa; --2.데이터확인하기
 
-- 6. 기획부 직원들을 출력하시오.
select name from insa where buseo = '기획부';
 
-- 7. 서울시(city)에 사는 직원 중 직위(jikwi)가 부장인 사람의 이름(name)과 주민번호(ssn)을 출력하시오.
select name, ssn from insa where city = '서울' and jikwi = '부장'
 
-- 8. 기본급(basicpay)과 수당(sudang)을 합쳐서 1,500,000원 이상인 직원 중 서울 사람만 출력하시오.
select name from insa where basicpay+sudang>1500000 and city ='서울';
 
-- 9. 수당이 150,000원 이하인 직원 중 사원과 대리만 출력하시오.
select * from insa where (sudang <= 150000) and (jikwi ='사원' or jikwi ='대리');
 
-- 10. 수당을 제외한 기본 연봉이 2천만원 이상이며 서울에 살며 직위가 과장 이상인 사람만 출력하시오.
select * from insa where (basicsudang * 12 >= 20000000) and city = '서울' and (jikwi = '과장' or jikwi = '부장');
select * from insa where not (basicsudang * 12 >= 20000000) and city = '서울' and (jikwi = '과장' or jikwi = '부장');
 
 
-- 범위 조건
-- 1. 숫자
-- 2. 날짜/시간
-- 3. 문자(코드값 -> 숫자)
 
SELECT * FROM tblCountry where popu > 10000;
 
 
 
 
 
 
 
--between
--  : where절에서 사용(조건)
--  : 범위 지정
--  : 컬럼명 between 최소값 and 최대값 ->inclusive
 
--ex1)
SELECT * FROM tblCountry where popu >= 5000 and popu <= 10000--영국, 이집트
SELECT * FROM tblCountry where popu <= 10000 and 5000 <= popu; --영국, 이집트
 
SELECT * FROM tblCountry where popu between 5000 and 10000--비트윈으로 표현, 가독성 높음
 
--ex2)
select first_name, hire_date from employees;
--2005~2006년 사이
select first_name, hire_date from employees where hire_date >= '2005-01-01' and hire_date <= '2006-12-31';
 
select first_name, hire_date from employees 
where hire_date between '2005-01-01' and '2006-12-31'--비트윈
 
--ex3)
select * from insa where name >= '나' and name <= '사';
 
 
 
 
 
 
--in
--  : where 절에서 사용(조건)
--  : 열거형 조건(제시된 값 중 하나라도 만족하명 통과)
--  ; 컬럼명 in (열거값)
 
select * from tblCountry where cont = 'AS' or cont = 'EU'--7개
select * from tblCountry where cont in ('AS''EU');
 
select * from insa where buseo in ('기획부''총무부''영업부');
select * from insa where not buseo in ('기획부''총무부''영업부');
select * from insa where buseo not in ('기획부''총무부''영업부'); --******
 
 
 
 
 
 
-- like
--  : where절에서 사용(조건)
--  : 문자열 대상
--  : 패턴 조건(특정한 패턴을 가지는 문자열을 검색)
--  : 컬럼명 like 패턴문자열
 
-- like 패턴 요소
-- 1. _ : 임의의 문자 1개
-- 2. % : 임의의 문자 0~여러개
 
--김씨성만 출력하시오.
select * from insa where name like '김__';
select * from insa where name like '__수';
select * from insa where name like '_인_';
 
--연락처가 010으로 시작하는 사람
SELECT * FROM insa where tel like '010-____-____';
 
--직위가 *장
SELECT * FROM insa where jikwi like '_장';
 
 
--홍씨성만 출력하시오. -> (홍길동, 홍민, 홍준) -> '홍__' -> '홍%'
SELECT * FROM insa where name like '홍%';
 
--
select * from employees;
 
select * from employees where first_name like 'D%';
select * from employees where first_name like '%n';
select * from employees where first_name like '%ll%';
 
 
 
 
 
 
 
-- null 조건
--  : 해당 컬럼이 nul상태인지 검사
--  : 컬럼명 is null
--  : 컬럼명 is not null
select * from tblCountry;
 
-- 인구수가 아직 기재 안 된 나라?
SELECT * FROM tblCountry where popu = null; 표현(x)
SELECT * FROM tblCountry where popu is null;
 
-- 인구수가 기재된 나라?
SELECT * FROM tblCountry where not popu is null;
SELECT * FROM tblCountry where popu is not null--*******
 
-- 도서관 -> 대여 -> 대여날짜/반납날짜
 
SELECT * FROM insa;
SELECT * FROM insa where tel is null;
 
 
 
 
 
 
 
-- distinct
--  : 결과셋의 특정 컬럽값이 중복되면.. 중복값을 제외
--  : 컬럼리스트에서 사용
--  : distinct 컬럼명
--  : 언제쓰는지..?? -> 중복값 제거 후 출력
 
-- tblCountry 에서 대륙이 어떤것이 있습니까? 
select cont from tblCountry;
select distinct cont from tblCountry;
 
-- insa에는 어떤 부서가 있습니까?
select buseo from insa;
select distinct buseo from insa;
-- 서울사는 직원들은 어떤 부서에 근무합니까?
SELECT distinct buseo FROM insa where city = '서울';
-- 영업부 직원들은 사는곳이 어디입니까?
select distinct city from insa where buseo = '영업부';
 
-- 주의! 상황을 고려해서.. 사용(distinct와 다른 컬럼은 동시에 select x)
select distinct city, name from insa where buseo = '영업부';
 
 
 
 
 
 
 
-- order by 절
--  : 정렬
--  : 오른차순, 내림차순
--  : 정렬대상 -> 숫자, 날짜, 문자(열)
--  : 결과셋의 레코드(행)을 정렬
--  : order by 컬럼명 asc(desc)
 
-- 인구수가 적은나라부터..
SELECT * FROM tblCountry order by popu asc; --오름차순
SELECT * FROM tblCountry order by popu desc; --내림차순
 
-- 인구수가 적은 나라부터..(기재된 나라만..null 빼고)
SELECT * FROM tblCountry 
  where popu is not null 
    order by popu asc;
 
--이름을 가나다라순으로 정렬하시오.
SELECT * FROM insa order by name asc;
--입사일 신입-고참 순으로.,
SELECT * FROM insa order by ibsadate desc;
--급여와 수당이 많은 순서대로.,
SELECT * FROM insa order by basicpay + sudang desc;
 
 
 
 
 
 
-- months_between
--  : 두날짜 데이터의 차이를 구하는 함수
--  : number month_between(date, date)
--  : 두날짜 차이 -> 월(단위)
 
select '2015-01-10' - '2014-05-25' from dual;
select months_between('2015-01-10''2014-05-25'from dual; --7.5개월..
 
select * from insa;
--입사일..
select months_between(sysdate, ibsadate) from insa;
select months_between(sysdate, ibsadate) / 12 from insa;
 
 
 
 
 
--ask]
--insa 테이블
--1. 사원 연락처가 010을 사용하며 서울에 거주하는 직원의 이름, 직위, 연락처를 출력하시오.
select name, jikwi, tel from insa where tel like '010-____-____';
select name, jikwi, tel from insa where tel like '010%' and city = '서울'--t
 
--2. 이름이 '동'으로 끝나고 서울에 사는 사람?
select name from insa where name like '__동' and city = '서울';
select * from insa where name like '%동' and city = '서울'--t
 
--3. 성이 '이'씨이고 이름이 '숙으로 끝나는 사람?
select name from insa where name like '이_숙'
select * from insa where name like '이%숙'--t
 
--4. 이름에 '길'자가 들어간 사람?
select name from insa where name like '%길%';
select * from insa where name like '%길%'--t
 
--5. 여직원(ssn)의 이름과 몇 년차(months_between) 인지 출력하시오. **맞는지재검
select name, months_between(sysdate, ibsadate)/12 from insa 
  where ssn like '______-2______';
  
select name, months_between(sysdate, ibsadate) / 12 from insa 
  where ssn like '%-2%'--t
 
-- order by
--6. 입사날짜가 2000년 이후에 입사한 직원들을 고참순으로 출력? 
select name from insa 
  where ibsadate between '2000-01-01' and '2015-01-07'
    order by ibsadate desc;
    
select * from insa where ibsadate >= '2000-01-01' 
  order by ibsadate desc;--t
 
--7. 기획부 직원들을 출력 -> 신입사원순으로 출력?
select name from insa 
  where buseo = '기획부'
    order by ibsadate asc;
    
select * from insa 
  where buseo = '기획부' 
    order by ibsadate asc; --t
    
--8. 기획부/총무부/개발부 직원들을 고참순으로 출력? (in + order by)
select name from insa 
  where buseo in ('기획부''총무부''개발부'
    order by ibsadate desc;
 
 
--9. 기획부/총무부/개발부 직원들 중 입사년도가 1999년~2003년 사이인 직원들을 오래된 순으로..(in, between, order by)
select name from insa 
  where buseo in ('기획부''총무부''개발부') and 
    ibsadate between '1999-01-01' and '2003-01-01' 
      order by ibsadate desc;
      
 select * from insa 
  where buseo in ('기획부''총무부''개발부'
    and ibsadate between '1999-01-01' and '2003-12-31' order by ibsadate asc; --t
 
--10. 근무년수 16년차 이상인 사람이 근무하는 부소는 어떤 부서들이 있습니까? 부서명을 가나다순으로 정렬 (distinct, order by, months_between) **못품
select distinct buseo from insa 
  where months_between(sysdate, ibsadate) / 12 >= 16
    order by buseo asc;
 
 
 
cs


1. Oracle Database

- Enterprise Edition  : 상업용

- Express Edition     : 교육용(테스트용)

- 버전(11g) - 10g, 9i...

- 데이터베이스

- 다량의 데이터를 전문적으로 관리하는 환경(프로그램)

- Oracle, MySQL(MariaDB), MS-SQL(MS), DB2.. Access, Excel, Text

- SQL 서버


2. SQL Developer

- SQL 클라이언트 툴

- Toad, SQLGate.. 이클립스


3. exerd

- 데이터베이스 설계툴

- 모델링툴

- ER-WIN, ...




데이터베이스

1. 데이터베이스 모델링

2. 데이터베이스 설계

3. 데이터베이스 구축



데이터베이스 모델링

- 데이터베이스 작업 중 초반에 하는 작업

- 가장 중요한 작업(설계도)

- 데이터베이스 시스템을 구축하기 위해서 필요한 정보들 무엇인지 수집, 분석 -> 도식화 하는 과정 -> 결과물(ERD)

- 데이터베이스 모델링 작업 -> ERD 만드는 작업

- ERD(Entity Relational Diagram) : 엔티티 관계 다이어그램


ex) 회사 관리 프로그램

사원 관리

- 정보 : 사원명, 나이, 사원번호, 연락처 등..

-> 엔티티 : 사원(사원명, 나이, 사원번호, 연락처 등..)

-> 엔티티의 구성요소 : 속성


부서 관리

- 정보 : 부서명, 부서번호, 호실, 내선번호 등..

-> 엔티티 : 부서(부서명, 부서번호, 호실, 내선번호 등..)

-> 부서의 구성요소 : 속성(Attribute)



데이터베이스 설계

- 모델링의 결과 -> ERD -> 실제 테이블 설계

- 좀더 구체화 하는 단계

- 식별자를 구체화하거나 자료형을 지정하거나 등..



데이터베이스 구축

- 앞의 2단계 결과 -> 실체화(구축) -> Oracle에 적용

- SQL 언어 사용

create table tblMember

(

seq number primary key..

)








데이터베이스 모델링


ERD

- 엔티티 관계 다이어그램

- 데이터 모델링의 대표적인 방법

- 손, 오피스, 전문 ERD 프로그램(er-win, exerd 등..)


Entity, 엔티티

- 분류될 수 있고, 다른 Entity들에 대해서 정해진 관계를 맺을 수 있는 데이터 단위

- 폴더, 테이블

- 업무에 필요한 데이터 집합


Entity Relationship

- Entity와 Entity간의 관계

- 테이블과 테이블간의 관계


Attribute, 속성

- Entity안의 가지고 있는 세부 정보들

- 사원 엔티티(사원명, 주소, 연락처..<- 속성)

- 자바와 비교

- 클래스(엔티티)

- 멤버변수(속성)


Tuple

- Entity안의 진짜 데이터 집합

- 테이블의 행(레코드)



ERD에서 Entity와 Attribute와 Relation을 표현하는 방법

- ERD 그리기


1. Entity

- 사각형으로 표시

- 이름을 대문자

- 중복 불가능

- 보통 단수로 표시(사원O, 사원들X)


2. Attribute

- Entity안에 목록으로 표시

- 대/소문자 혼용

- 보통 단수로 표시

- 추가 사항

a. NN : Not Null (필수값)

b. ND : Not Duplicate (유일값)


1. 중복되면 안되는 것(NN, ND) -> #*속성명

2. 반드시 있어야 하는것(NN) -> *속성명

3. 있어도 되고 없어도 되는것 -> o속성명


3. Relation

- 엔티티와 엔티티간의 관계

-> 자세히 말하면 엔티티안의 속성과 다른 엔티티안의 속성간의 관계

-> 레코드와 레코드간의 관계

a. 1개의 A는 1개의 B로 구성 

b. 1개의 A는 1개 이상의 B로 구성 

c. 1개의 A는 1개 이하의 B로 구성 

d. 1개의 A는 0개 이상의 B로 구성 



ERD -> 실제 구현

1. 순공학, Forward Enginnering

설계도 -> Oracle 직접 구현

2. 역공학, Reverse Enginnering

Oracle -> 설계도



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
오라클 서버(서비스) 작동 여부?
1. Win + R -> services.msc
 
2. 서비스
    - OracleServiceXE        : 오라클 서버
    - OracleXETNSListener    : 오라클 클라이언트 응대
 
 
 
호스트명(오라클 서버의 주소)
    1. localhost(127.0.0.1)
    2. IP / 도메인
 
 
 
sys, system, sysdba
    - 최고 관리자 계정
개인 계정
    - 
수업용 계정
    - scott, hr
 
 
 
잠겨있는 계정 활성화 시키기
1. 관리자 로그인(접속)
2. 계정 활성화
    alter user 아이디 account unlock;

3. 비밀번호 바꾸기
    alter user 아이디 identified by 비밀번호;
 
4. 2 + 3
    alter user 아이디 identified by 비밀번호 account unlock;
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 
package com.test;
 
import java.util.Calendar;
 
public class final {
 
    public static void main(String[] args) {
        
        //static 키워드
        //1. (멤버)변수 : 지역변수x, 정적(공용)변수
        //2. 메소드
        
        //public(private) 키워드
        //1. 변수 : 지역변수x
        //2. 메소드
        //3. 클래스
        
        //final 키워드
        //1. 변수 : 지역변수o(붙임) ***
        //2. 메소드
        //3. 클래스
        
        //1. final 변수(= 상수)
        //    : 값을 변경시킬 수 없다
        
        //ex)
        final int n = 10;
        //n=20; 이게 안된다는 뜻
        System.out.println(n);
        
        //주의 : 선언과 초기화를 동시에(*****)
        //final int n2;
        //n2 = 10;
        //System.out.println(n2);
        
        
        //데이터 상수 : 의미가 없음(의미를 표현할 수 없음 -> 가독성 낮음)
        System.out.println(3.14); //파이값
        System.out.println(2*5+5/7);
        
//        double pi = 3.14;
//        System.out.println(20 * pi);
 
        int weight = 70;
        System.out.println(weight);
 
        ///상수는 의미없음 - > 의미 부여 하기 위해 -> 변수(이름) -> 수정 가능! -> 수정 불가능 -> final 상수 -> 의미있는 상수
        //가독성 -> 상수명은 모두 대문자
        final double pi = 3.14;
        //pi = 5.01; 이렇게 파이값이 바뀌면 안되잖아?
        //PI = 5.12;
        
        //Calendar.YEAR = 2;
        System.out.println(1);
        System.out.println(Calendar.YEAR);
        
                
    }
 
}
 
 
//상속시에 발생.,
class FinalA {
    
    //멤버.,
    //.,
    
    //2. final 메소드
    //    - 상속받은 자식 클래스가 재정의할 수 없는 메소드 
    //    - 안정성 문제
    public void test() {
        System.out.println("부모 메소드");
    }
}
 
class FinalB extends FinalA {
    
    //멤버.,
    //.,
    
    //메소드 오버라이딩
    public void test() {
        System.out.println("자식 오버라이딩");
    }
}
 
//3. final 클래스
//    - 프로그램 안정성 문제
//    - 처음부터 상속을 고려하지 않은 클래스 설계
//    - 최종 클래스, 봉인 클래스.,
final class FinalC {
    
    //멤버.,
    //.,
        
}
 
//class finalD extends FinalC {
//}
cs


'WEB > JAVA' 카테고리의 다른 글

비디오마을  (0) 2015.09.10
OVERRIDE(오버로딩)  (0) 2015.05.22
ABSTRACT CLASS(추상클래스)2  (0) 2015.05.22
ABSTRACT CLASS(추상클래스)1  (0) 2015.05.22
OBJECT CLASS  (0) 2015.05.22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package com.test;
 
import java.util.Calendar;
 
public class Override {
 
    public static void main(String[] args) {
        
        //오버로딩, Overloading(Overload)
        //    - 메소드명을 동일하게., 메소드를 여러개 만드는 기술(인자리스트)
        
        //오버라이딩, Overriding(Override)
        //    - 상속할 때 발생 (상속 필수)
        //    - 부모의 메소드명과 자식의 메소드명이 충돌 시 발생되는 현상(기술)
        //    - 안써도 되는 기술., 의도를 알아야., 충돌시 무조건 자식 먼저.,
        
        
        
        //p&c 인스턴스
        OverrideParent p = new OverrideParent();
        p.hello();
        
        OverrideChild c = new OverrideChild();
        c.hello(); //부모꺼
        //c.hi();
        
        //아빠와 자식을 접하는 제 3자 기준.,
        //아빠 -> hello();
        //자식 -> hi();
        
        
        
        //time2 인스턴스
        Time2 t1 = new Time2(520);
        System.out.println(t1.getTime());
        
        //Date/Calendar
        Calendar c1 = Calendar.getInstance();
        System.out.println(c1); //java.util.GregorianCalendar[time=1419568910503
        System.out.println(t1); //com.test.Time2@75b84c92
        
        System.out.println(c1.toString()); //위의 getTime과같은성격., 보다 가독성↑
        System.out.println(t1.toString());
                
        
        
    }//main
}
 
//ex)
class OverrideParent {
    public void hello() {
        System.out.println("안녕하세요~");
    }
}
 
 
class OverrideChild extends OverrideParent {
    //자신만의 인사하는 메소드
    //    -> 부모꺼 hello 쓰기 싫다!!
//    public void hi() {
//        System.out.println("안녕~");
//    }
    
    //부모 메소드를 감추고 자신의 메소드를 사용하는 기술
    //    -> 메소드 오버라이딩(메소드 재정의)
    public void hello() {
        System.out.println("안녕~");
    }
}
 
 
 
 
 
 
 
 
 
//ex) 오버라이딩
//class Time2 extends Object 원형
class Time2 {
    private int hour;
    private int min;
    
    //생성자
    public Time2() {
        this.hour =1;
        this.min = 0;
    }
    
    //오버라이딩
    public Time2(int hour, int min) {
        this.hour = hour;
        this.min = min;
    }
    
    //확인용.,문자열로 받아와서.,
    public String getTime() {
        return this.hour + ":" + this.min; //5:30
    }
    
    //자신(객체)의 데이터를 반환하도록 재정의
    @Override
    public String toString() {
        return this.hour + ":" + this.min;
    }
}
 
 
 
 
cs


'WEB > JAVA' 카테고리의 다른 글

비디오마을  (0) 2015.09.10
FINAL  (0) 2015.05.22
ABSTRACT CLASS(추상클래스)2  (0) 2015.05.22
ABSTRACT CLASS(추상클래스)1  (0) 2015.05.22
OBJECT CLASS  (0) 2015.05.22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.test;
 
public class abstract {
 
    public static void main(String[] args) {
        
        Circle c1 = new Circle();
        Rectangle r1 = new Rectangle();
        
        c1.draw();
        r1.draw();
        
        c1.erase();
        r1.erase();
        
    }
 
}
 
 
//도형 클래스
//    - 원, 사각형 클래스
 
//부모 클래스를 일반 클래스? 추상 클래스? 할 지의 기준?
//1. 자식에게 물려줄 멤버만 필요 -> 일반 클래스
//2. 자식에게 물려줄 멤버 + 자식 행동을 표준화 -> 추상 클래스
abstract class Shape {
    
    //ex)2번
    
    //일반멤버
    public String name;
    public int width;
    public int height; 
    
    public void check() {
        System.out.printf("도형 : %s\n"this.name);
    }
    
    //추상멤버
    public abstract void draw();
    public abstract void erase();
}
 
//일반 클래스
class Circle extends Shape {
    
    @Override//추상메소드를 재정의했따..
    public void draw() {
        System.out.println("원을 그립니다.");
    }@Override
    public void erase() {
        System.out.println("원을 지웁니다.");
    }
}
 
class Rectangle extends Shape {
    
    @Override
    public void draw() {
        System.out.println("사각형을 그립니다.");
    }@Override
    public void erase() {
        System.out.println("사각형을 지웁니다.");
    }
}
cs


'WEB > JAVA' 카테고리의 다른 글

FINAL  (0) 2015.05.22
OVERRIDE(오버로딩)  (0) 2015.05.22
ABSTRACT CLASS(추상클래스)1  (0) 2015.05.22
OBJECT CLASS  (0) 2015.05.22
INHERITANCE(상속)  (0) 2015.05.22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.test;
 
public class abstract {
 
    public static void main(String[] args) {
 
        
        //추상 클래스, Abstract Class
        //    - 상속받는 클래스(객체)의 사용법을 표준화 (사용자경험중시)
        //    - 멤버 중 메소드에 대한 제약 사항
        //    - 행동에 대한 강제성 부여
        //    - 부분 구현이 가능
        //    - 추상 메소드를 가림
        //    - 객체 상성 불가능
        //    - 사용 용도 : 일반 클래스의 부모 역할, 참조 변수
        //    - 추상 클래스 = 일반 클래스 + 추상 메소드
        
        //추상 메소드, Abstract Method
        //    - 상속받는 클래스(객체)의 사용법을 표준화
        //    - 구현부가 없는 메소드
        
        
        //주의! 추상클래스는 객체를 생성할 수 없다.(실체화될수x)
        //일반클래스의 부모역할만 한다., 변수는 만들 수 있다. 
        //그러면?.. 자식으로 객체를 만든다.
        //Monitor m1 = new Monitor();
        //m1.on();
        
        LG550 lg = new LG550();
        lg.on();
        lg.off();
        
        HP660 hp = new HP660();
        hp.on();
        hp.off();
    }
 
}
 
//ex) 추상클래스
abstract class Monitor {
    
    //뭘 적느냐?
    //일반 클래스 멤버 구현(변수, 메소드)와
    //추상 메소드
    
    public String model; //모델명
    public int width;      //해상도
    public int hejght;
    
    public void checkModel() {
        System.out.printf("모델명 : %s\n"this.model);
    }
    
    //추상 메소드 선언 - 구현부가 없음(구현이 안된 메소드) {}가 없음
    public abstract void on();
    public abstract void off();
        
}
 
 
//추상 클래스를 부모로 상속
//    -> 반드시(***) 추상 클래스의 추상 메소드와 동일한 메소드를 구현 
class LG550 extends Monitor {
    
    //LG550만의 멈버 추가
    
    public void on() {
        //on()-> ㅗ모니터는 on(0 사용법을 가지고 전원 켜주세요.,
        System.out.println("lG 모니터 켜기");
    }
    
    public void off() {
        System.out.println("LG 모니터 끄기");        
    }
}
 
 
//extends Monitor : LG550과 동일하게 규격을 지키겠습니다.
class HP660 extends Monitor {
    
    //HP660만의 일반 멤버 구현.,
    
    @Override
    public void on() {
        System.out.println("HP660 전원 켜기");
    }
    
    @Override
    public void off() {
        System.out.println("HP660 전원 끄기");
    }
    
    
}
cs


'WEB > JAVA' 카테고리의 다른 글

OVERRIDE(오버로딩)  (0) 2015.05.22
ABSTRACT CLASS(추상클래스)2  (0) 2015.05.22
OBJECT CLASS  (0) 2015.05.22
INHERITANCE(상속)  (0) 2015.05.22
CONSTRUCTOR(생성자)3  (0) 2015.05.22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.test;
 
import java.util.Calendar;
 
public class Object {
 
    public static void main(String[] args) {
 
        //Object 클래스
        //오브젝트 클래스는 가장 최상위 클래스이다(단군)
        
        DDD d = new DDD();
        d.a = 10//증조할배
        d.b = 20//할배
        d.c = 30//아버지
        d.d = 40//자신
         //d,e
 
        
        System.out.println(d.toString()); //출력 : com.test.DDD@15db9742
        System.out.println(d.hashCode());
        
        Calendar c = Calendar.getInstance();
        System.out.println(c);
        System.out.println(c.toString()); //
    }
}
 
//자바는 클래스 선언 시 부모 클래스를 지정하지 않으면
//자동으로 java.lang.Object 클래스를 부모 클래스로 지정한다.
 
//class AAA extends Object {  -> 이게 원형
class AAA {
    public int a;
}
 
class BBB extends AAA {
    public int b;
}
 
class CCC extends BBB {
    //멤버 x 3개
    public int c;
}
 
class DDD extends CCC {
    public int d;
}
 
class EEE extends CCC {
    public int e;
}
cs


'WEB > JAVA' 카테고리의 다른 글

ABSTRACT CLASS(추상클래스)2  (0) 2015.05.22
ABSTRACT CLASS(추상클래스)1  (0) 2015.05.22
INHERITANCE(상속)  (0) 2015.05.22
CONSTRUCTOR(생성자)3  (0) 2015.05.22
CONSTRUCTOR(생성자)2  (0) 2015.05.22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.test;
 
import java.util.Random;
 
public class Inheritance {
 
    public static void main(String[] args) {
        
        //상속,    Inheritance
        //    - 클래스간의 상속
        //    - 뭘 상속?(재산) -> 클래스의 멤버(변수, 메소드)
        //    - 부모 클래스가 가지고 있는 멤버를 자식 클래스에게 물려줘서 자식 코드의 구현을 좀 더 빠르게.,(편하게., 정확하게.,)
        //    - 자식 클래스는 부모가 물려준 멤버를 자신이 직접 선언한것처럼 사용이 가능하다.
        //    - 코드 재사용(************* 생산성↑)
        
        //부모 클래스 vs 자식 클래스
        //기본 클래스 vs 파생 클래스
        //슈퍼 클래스 vs 서브 클래스
        
        Child c = new Child();
        c.a = 10;
        c.b = 10;
        c.Test(); //부모가 물려준
        c.c = 20;
        c.ccc(); //자기가 가진
        
        //c, d 접근 불가
        
        MyRandom rnd = new MyRandom();
        System.out.println(rnd.nextInt()); //1번기능
        System.out.println(rnd.getNum()); //2번기능
        System.out.println(rnd.getColor()); //3번기능
        
    }
}
 
//부모역할
class Parent {
    
    //재산
    public int a;
    public int b;
    public int d; //본인만 쓰기 위한 멤버(자식도 접근을 못함)**
    
    public void Test() {
        
    }
}
//자식 역할
class Child extends Parent {
    
    public int c;
    
    public void ccc() {
         
    }
}
 
 
//랜덤 클래스 -> 자식 클래스 구현
//상황] 난수 발생 잦음
//1. Random 클래스 기능 사용 난수 발생(nextInt, nextBoolean.,)
//2. 정수(5~10사이) -> Random 클래스 기본 기능 x -> 추가 가공
//3. 색상 난수 -> 새로운 기능
 
//확장용(파생)
class MyRandom extends Random {
    
    //1. Random 기본 기능 상속
    
    //2.
    public int getNum() {
        Random rnd = new Random();
        return rnd.nextInt(6+ 5//5~10사이
    }
    
    //3.
    public String getColor() {
        Random rnd =new Random();
        String[] color = {"red""orange""yellow""green""blue"};
        return color[rnd.nextInt(color.length)];
    }
 
    
}
cs


'WEB > JAVA' 카테고리의 다른 글

ABSTRACT CLASS(추상클래스)1  (0) 2015.05.22
OBJECT CLASS  (0) 2015.05.22
CONSTRUCTOR(생성자)3  (0) 2015.05.22
CONSTRUCTOR(생성자)2  (0) 2015.05.22
CONSTRUCTOR(생성자)1  (0) 2015.05.22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package com.test;
 
public class Constructor {
 
    public static void main(String[] args) {
 
        
        //Time인스턴스
        Time t1 = new Time();
        t1.check();
        
        Time t2 = new Time(23050);
        t2.check();
        
        Time t3 = new Time(11080);
        t3.check(); //1:11:20
        
        Time t4 = new Time(215080);
        t4.check(); //4:31:20
        
        Time t5 = new Time(10000);
        t5.check(); //2:46:40
    }
 
}
 
 
//시간 클래스
class Time {
    private int hour;
    private int min;
    private int sec;
    
    //초기화
    public Time() {
        this.hour = 1;
        this.min = 0;
        this.sec = 0//요청:1시간0분0초가 필요하다
    }
    
    //생성자 오버로딩
    //1. new Time (2, 30, 50)
    //2.추가ask] new Time (2, 70, 50)
    public Time(int hour, int min, int sec) {
/*1        this.hour = hour;
        this.min = min;
        this.sec = sec; */
 
        //초단위 60이 넘을 경우
/*2        //30초 -> 0분 30초
설명용 //70초 -> 1분 10분
        //150초 -> 2분 30초
        if (sec<60) {
            this.sec = sec;
        } else {
            this.min = sec / 60; //1
            this.sec = sec % 60;
        } 조건문 만들 필요가 없다 */
        
        this.min = sec / 60;
        this.sec = sec % 60;
        
        //분단위 60이 넘을 경우
        this.hour = min / 60;
        this.min += min % 60;
        
        this.hour += hour;
    }
    
    //오버로딩 연습 추가
    //new Time(10000) 이거반올림해달라.,
    public Time(int sec) {
        this.min = sec / 60//160분
        this.sec = sec % 60//40초
        
        this.hour = this.min / 60//2시간
        this.min = this.min % 60//46분
    }
    
    
    //확인용.,
    public void check() {
        System.out.printf("%d:%s:%s\n"this.hour, setFormat(this.min), setFormat(this.sec)); //자릿수 맞춰준 분과 초는 setFormat으로 감싸준다
    }
    
        //분,초 한자리 숫자 -> 두자리 숫자
        //5 -> "05" (숫자->문자열)
        private String setFormat(int num) {
            if (num <10) {
                return "0" + num;
            } else {
                //두자리 숫자
                return num + "";
                
                //숫자->문자열 정석st
                //String.valueOf(100);
            }
        }
cs


'WEB > JAVA' 카테고리의 다른 글

OBJECT CLASS  (0) 2015.05.22
INHERITANCE(상속)  (0) 2015.05.22
CONSTRUCTOR(생성자)2  (0) 2015.05.22
CONSTRUCTOR(생성자)1  (0) 2015.05.22
STATIC(정적)2  (0) 2015.05.22

+ Recent posts