-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjava4.txt
More file actions
611 lines (302 loc) · 14.4 KB
/
java4.txt
File metadata and controls
611 lines (302 loc) · 14.4 KB
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
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
명령문=스테이트먼트
익스프레스(결과가 생성되는 명령문)
부동소수점 사용법
-유효자릿수 7자리 이하의 값을 단순이 저장하고 꺼내는 경우 float 타입 사용
예) float height;
float weight;
부동소수점에 대해 연산을 수행하는 경우 double 타입을 사용하라!
예) double average;
double area;
좋은 코딩이란 다른사람이 봤을때 아예 잘못된 가능성을 배제 시키는 코딩
*블록과 변수
{
int = a;
//int = a; 같은 블럭에서 가은 이름의 변수 선언불가!
}
{
int = a; <- 블럭이 다르다면 상관없다.
}
a= 100; <- 블럭을 벗어나면 사용불가!
* Static type bindong vs dynamic type binding
고정 동적
Java Javascript
int a; var a;
1= 100; <변수의 타입은 변경할수 없다 a= 100; -> 값을 저장할때 변수의 타입이 결정된다.
a = true; X a = true; 다른 타입의 값을 저장하면 변수의 라인도 바뀐다
a = " aaa"; X a= "aaa";
*서로 다른 타입의 데이터를 계산
int 연산자 float
↓
float 같은 타입으로 맞춘다음에 연산 수행
자동형변환 수행 => implicit tyoe comversion (암시적형변환)
byte
short -> int ------------long-----------float------------------->double
char
* 클래스 와 메서드
수학관련 메서드를 분류= 도구를 담아두는 함 =도구함
class Math {
abs(){-} <- 수학관련 메서드 = 수단,방법,도구
round(){-}
max(){-}
min(){-}
* &비트 연산자 응용
*&연산은 어떤 값에서 특정 비트를 차단(o)하고 0110 0011
특정 비트를 추출(1)하는 &0000 1111
효과가 있다. 0000 0011
차단 추출
%보다 계산속도가 더 빠르다
varlue % 2 = value & ob0000_0001;
varlue % 3 = x
varlue % 4 = value & ob0000_0011;
varlue % 5 = x
varlue % 6 = x
varlue % 7 = x
varlue % 8 = value & ob0000_0111;
varlue % 16 =value & ob0000_1111;
System.out.println(54 & 0b0000_0001);
실무에서 이코드를 보면 끝나는 값이 짝수인지 홀수인지 확인하는 코드
for 문은 배열과 함께 썻을때 좋다
*keyboard 입렵과 읽기
키보드에서 입력한 키값을 임시 보관하는 메모리가 있다 그 메모리를 버퍼라고 한다.
https://www.toptal.com/developers/keycode
nextInt 는 버퍼에 메모리에 엔터 입력이 들어왔는지 안들어왔는지 계속 기달리고있다.
* SI vs S SM
System INtegation (시스템 통합)
새로 시스템 개발 <- 새기능
회계시스템을 기존 시스템(인사관리시스템)에 엔동
legacy 통합)
인사관리 시스템 + 회게시스템은 인사관리 시스템에서 인사관리 시스템필요함
Sytem Maintenance (유지 보수)
시스템 프로젝트를 완료후
기능 변경,추가,삭제
버그 패치
*도구함의 도구를 쓰기위한 준비
도구함 = 클래스
도구(데이터를 다루는것) = 메서드
Math.abs(값) 부동소수점 비교할때 썻었음 0.000001
abs라는 도구는 별도의 데이터를 준비할 필요없이 바로 사용가능한 도구다. 이런도구는 도구함 이름으로 바로 사용할수 있다.
(값)을 파라미터 or 아규먼트라 칭하고 그 도구를 실행하는데 필요한 값.
parameter argumnet
데이터를 준비할 필요없이 바로 사용가능한 도구를 보통 스태틱 매서드라 한다.
사용법 Math.abs(값);
도구함.도구
calss. math
Date.getYear();
getYear 이 도구는 그냥 사용할 수 없다. Date 도구함을 이용해서 데이터를 준비한 후에 사용할 수 있다.
데이터를 준비한 후에 사용가능한 도구를 보통 인스턴스 메서드
사용법
1.도구 사용전 데이터를 준비한다.(설정)
Date d = new Date(); new는 도구함의 도구를 쓸수있도록 설정하기
d는 설정된 데이터를 가르키는 변수
2.설정된 정보를 가지고 도구를 실행한다.
d.getYear()
↑
설정된 정보를 가리키는변수
참조변수(reference)
createdDate = System.currentTimeMillis();//1970.1.1.00시
Allocates a Date object and initializes it to represent the specified number of milliseconds since the standard base time known as "the epoch", namely January 1, 1970, 00:00:00 GMT.기준
*일반 변수와 배열
일반변수는 변수하나당 크기가 저장되어있지만
배열에서는 메모리 주소가 저장되고 주소가 저장될만큼 충분한 공간이있다.
변수의 크기는 특정하지 않다.
배열은 연속된 int 메모리 있고 그안에 순서대로 번호가 지정되는데 그 번호는 배열의 각 메모리를 가리키는 번호 = 인덱스(index)라고 한다.
배열의 처음 가리키는 번호안에는 배열메모리의 시작 주소가 들어있다.
유요한 인덱스가 아닐때 발생하는것을 ArrayindexOutofBoundeException 오류 발생
메모리의 주소를 저장하는 변수를 레퍼런스(reference)라 한다.
new명령을 통해 준비한 메모리를 배열 인스턴스 (instunce)라 한다
*배열 레퍼런스와 배열 인스턴스
인스턴스에 소속된 변수는 기본값이 자동으로 설정된다
정수는 0 부동소수점은 0.0 논리는 false 로 문자는 /u0000으로 결국 모든 값이 0으로 자동 설정된다.
레퍼런스와 인스턴스 : Garbage 가비지
int[] arr1 = new int[3];
arr1 = new int[2];
이렇게 했을경우 메모리의 주소를 잃어버려 사용할 수 없는 인스턴스를 가비지라 부른다.
Garbage collector 가 cpu가 한가하거나 메모리가 부족할때 Garbage를 제거한다.
**JVM을 종료하면 JVM이 사용했던 모든 메모리를 OS가 강제로 해제시킨다.
* Garbage와 레퍼런스 카운트(인스턴스의 주소를 갖고있는 레퍼런스 변수의 개수)
=포인터
int[] arr1 = new int[3];
int[] arr2 = new int[2];
int[] arr3 = arr1 ;
arr2 = arr3;
레퍼런스 카운트가 0 인 인스턴스를 Garbage라 한다.
* Primitive type 변수와 레퍼런스(변수)
primitive(근원의 기초의,원시의) Date Type
byte b;
short s;
int i;
long l;
char c;
float f;
double d;
boolean bool;
=> 데이터안에 정수 값이 들어간다.
* String s; 당분간은 문자열을 저장된다.
Date date;
Date 도구함의 설정정보를 담으 메모리의 ★주소가 들어간다.
* final
int i = 100;
i = 200;
↑
변수는 기본적으로 언제든지 값을 변경할 수 있다.
원래의 특성을 변경한다. =modifier(변경자,한정자,제한자)
↓
final int x = 10;
x = 200; <= 오류뜸. final이 붙은 변수는 값을 한번만 저장할 수 있다.
* 코드를 유지보수하기 쉽게 만드는 문법
*메서드 ; 특정 작업을 수행하는 코드를 묶어 놓은것
파라미터 목록 -> 작업수행에 필요한 데이터를 받을 변수
↓
viod proccesBoardlist () { . .. . } <- 메서드 몸체(body)
↑ 작업을 수행하는 코드가 들어있다.
리턴타입 메서드명
↑ >>>>>>>>메서드명 ↓
작업 완료후 결과값의 리턴 여부 메서드가 수행하는 작업을 잘드러내는 이름으로 작명하고
void는 값을 리턴 안함 작업은 행위이기 때문에 동사구 형태로 만든다.
그 밖에는 리턴하는 값의 타입 가끔 명사구나 전치사구 형태를 만들 경우도 있다.
* 메서드에 묶인 코드 실행하기 : 메서드 호출(call)
↓메서드 파라미터의 전달할 값(아규먼트 argumnet)
변수 = 메스드명 ( 값, 값,...);
↓ 실행할 메서드
메서드가 값을 리턴할 경우
그 값을 받을 변수
(값을 받지 않아도 된다)
* 파라미터 와 아규먼트
int plus (int a, int b)
메서드 정의 디파인 define 메서드
return a+b;
int result = plus (100, 200); <- 메서드 호출(call)
파라미터에 넘겨주는 값 아규먼트( 100,200)
아규먼트 값을 넘겨받는 변수를 파라미터라한다. (a,b)
* 메서드 호출 -> 반드시 리턴됨
main thread
main () {
m1();
m2();
m3();
}
*메서드와 변수의 공유
* 로컬 변수 (local variables)
메서드 블록 안에 선언된 변수
메서드 실행할때 생성
메서드 완료할때 삭제
메서드 안에서만 사용가능
static 변수 사용 스태틱 메서드 안에 있는 변수들을 밖으로빼 통합해 쓰는 변수
모디피어 원래의 성질을 봐꿔 사용하는것.
*메소드 분류하기 => 클래스( class) 클래스 명은 명사,명사구,가끔 형용사 로 지을것
class App
main() {-}
welcome
displaymenu
prompt menu
dispalyLine
*컴파일 옵션: -sourcepath 옵션
다른클래스 까지 컴파일 해주는 옵션
javac -d bin/main -encoding UTF-8 -sourcepath src/main/java src/main/java/com/bitcamp/board/App.java
javac 컴파일러
-encoding UTF-8 소스파일의 인코딩 순자집합 컴파일러에게 소스파일이 어떤 규칭에 따라 저장되었는지 알려주는 옵션
-d bin/main 컴파일 결과로 생성되는 .class파일을 둘 폴더 지정
-sourcepath src/main/java 소스파일에서 참조하는 클래스가 있는 파일의 경로를 알려준다.
src/main/java/com/bitcamp/board/App.java 소스파일 경로
* 클래스 관계도
App이란 클래스는 boardhandler 를 사용한다. App -> BoardHandler
App을 client 라 하고 BoardHandler 을 dependency 의존객체라한다.
App을 client 라 하고 Prompt 를 dependency 의존객체라한다.
dependency 를 client 라하고 Prompt 를 dependency 의존객체라한다.
상대적이다
쌍방참조가 되면 버그 찾기가 힘들다.
단방향이 되어야한다.
class -> Responsibility= role 책임이있다
관계가 형성됨
* Eclipse Integrated Development Environment (IDE)
통합 개발 환경
IBM에서 만들었음 재단에서 기부받아서 무료로 배포
Eclipse + 플러그인 = 개발 환경 구축
이클립스 IDE 설정
eomcs-docs/devtool/eclipse_tomcat_webapp 참조
네이버 d2 폰트 다운 ( 개발자폰트)
whitespace
엔터 탭 스페이스
board-app / app <-프로젝트 폴더 <- Eclipse IDE가 임포트 못함
eclipse 설정파일 3개
project <- 프로젝트 정보를 담는 파일
classpath <- 소스 디렉토리 경로와 의존라이브러리 정보를 담은 파일
settings/* <- Eclipse IDE에서 자바관련 도구의 설정정보를담은 폴더
gradle eclipse <-설정파일 생성 ( 그전에 빌드 그레이들 들어가서 id '이클립스' 적어줘야함 )
eomcs-docs/devtool/
Ivar jacobson
3 Amigo Gracly booch
James Rumbaugh
↑
위의 대학교수들이 모여서 UNL을 만듦.
Rational 회사 창업하고 Rational Rose(UNL도구) 만듬 ===IBM이 인수
*UNL ( Unified Modeling Language) 국제표준
Unified -> 통합된
Modeling -> 생각하 바를 글과 그림으로 표현
Language -> 문법
Scanner 클래스 + System.in
System.in(키보드와 연결되어있음)의 역활은
키보드에서 들어오는 입력값을 들어오는역활
키보드의 입력을 잃는 일
Scanner 클래스
System.in이 넘겨준 값을 원하는 형태로 잘라주는 일
nextInt ()
nextLine()
오브젝트 = 객채 (클래스,인스턴스,메서드,변수) 다 객채다
하나의 일을하는것 . 역활단위로 분류시킨다
Static Method Math.abs (클래스다음바로 매서드)
= class Method
설정정보
↓
Instance Method
설정 정보를 가리키는 변수 설정 정보가 들어있는 메모리의 주소를 담는 변수 =레퍼런스(reference)
↓
Scannner keyboadInput = new Scanner(System.in);
↑
Scanner 도구함에 들어있고 도구를 사용하기 전에 필요 정보를 설정
Scanner.nextInt() 오류남 그 이유는 어느 데이터(파일,키보드,랜선)를 읽어야 할지 모름
keyboardInput.nextInt()
↑
nextInput()를 실행하는데 필요한 정보가 있는곳
SimpleDateFormat 클래스 사용법
-> format(); 인스턴스 메서드
new Date(createdDate) 밀리초를 가지고 날자 정보를 설정.
main () 메서드에 들어있는 코드를 기능별로 분리하여 메서드를 정의하고 이 분리된 메서드를 호출 한다.
클래스는 책임을 가진다 다른말로 역할을 가진다.
l== Low Coupling : 관련된 클래스를 줄여라!!
l ->다른클래스의 변경에 따른 영향 최소화
l
l== High Cohesion : 한 클래스가 가능한 한개의 역할을 수행하도록 응집력,집중도를 높여라
General
Rosponsible
Assignment
Software
Patterns
GRASP 패턴
객체지향 프로그래밍의 근본적인 가이드
* 클래스 사용법
Board <- 게시글 데이터를 저장할 새 메모리 설계도 - 사용자가 정의하는 데이터타입
new 명령으로 준비하는 변수
↓
**********primitive type 의 변수를 제외한 나머지 모든 변수는 인스턴스의 주소를 담는 레퍼런스변수이다.
맥 컨트롤 스페이스
시스템환경설정 keyboard선택 단축키탭선택 단축키에서 왼쪽에 입력소스 단축키 체크해재
primitive type 변수의 배열과 레퍼런스의 배열
int[] arr = new int[3]
int 메모리 3개 만들라
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
Board[] arr = new Board[100];
for (int i = 0; i < arr.length; i++) {
arr[i] = new Board();
Board[] boards = new Board[SIZE];
*부팅
부팅이란 전원 키면 메인보드안에 롬안에 펌웨워란 소프트웨어를 실행시키고
펌웨워는 부트섹터에 있는 OS Loader를 실행 시키고
OS Loader는 OS kernel을 실행 시킨다 OS 커널은 하드웨어를 관리한다
CPU,RAM,HDD,mouser,keyboard 등등
최소한의 상태를 로딩시키는것.
*HDD 의 데이터 저장
수직 기록 방식
수평 기록 방식