SL-275 Day 4
** 4일차 예정 교육
String/StringBuffer
<String>
"immutable 문자열 상수" - (변하지 않는)
==/equals()
String s1 = new String("하바리");
①String s = new String("하바리");
(s1.equals(s)) -> true
②String s2 = "하바리";
String s3 = "하바리";
(s2 == s3) -> true
System.out.println(5 + 5 + "하바리");
System.out.println("하바리" + 5 + 5);
※String 과 Non-Stinrg이 결합해서 String이 되는데, 숫자가 먼저오면 연산이 먼저 수행되고,
문자열이 먼저 오면 뒤에 연산이 수행되지 않는다.
<StringBuffer>
자주 변하는 문자열은 tring은 임시객체가 많이 생성되어 StringBuffer가 효율이 높다
** Test King Dump A 풀이
A-103. 135, 136, 137
<CommandLine>
public static void main(String[] args) {
int grade = args[0];
if (grade >= 90) System.out.println("A");
if (grade >= 80 && grade < 90) System.out.println("B");
}
Run-Time에 인자를 받을 수 있도록 하는 메카니즘.
java Test args0 args1, ...
args[0] = args0;
args[1] = args1; 이다.
** Test King Dump 풀이
A-125, B-220
<Math>
바로바로 호출해서 쓰기 위해서 member method를 모두 static으로 선언
★★★
random() Method 호출
Math.random();
<Vector>
Vector v = new Vector(1, 50); // 초기 사이즈 : 1, 한번에 증가되는 사이즈 : 50
array와 다르게 resizing이 가능하다.
1. Object만 들어간다
<Wrapper class>
Primitive Data Type의 값들을 객체로 활용할 수 있도록 해줌.
byte -> Byte
sshort -> Short
int -> Integer
long -> Long
float -> Float
double -> Double
char -> Character
boolean -> Boolean
<Thread>
┌ Process : 실행중인 파일(~.class)
├ Thread : 하나의 Process 내에서 진행되는 세부적인 작업단위
│ ※Process와 Thread의 차이는 Data공유 여부
├ Multi-Tasking : Multi-Processing System(time-sliced방식) - 코드가 별도
└ Multi-Threading : Code, Data 공유(문제점 해결 -> 동기화)
Creating Thread
┌ ①class T extends Thread {
│ -> T t = new T();
└ ②class T implements Runnable {
-> T t = new T();
Thread tt = new Thread(t)
-> public void run() {} 실행되는 Method
1. thread 객체 생성 Thread t = new Thread();
2. start를 P/G가 호출
3. 실행 가능 상태에서 run();을 받고 running 된다
의문점
1. who? JVM내의 Scheduler
2. why? 우선순위(1[low] ~ 5[default] ~ 10[high])에 의해서 호출됨
함수 정의에서 명시적으로 throws를 하는 것은 try ~ catch로 명시적인 처리를 해주면서 써야된다.
sleep : 자신 보다 우선순위가 낮은 쓰레드에게 양보
join : 특정 쓰레드가 수행될때 수행권을 보장받는 메쏘드. 다른 쓰레드가 끼어들지 못하도록...
InterruptedException 으로 감싸서 써야한다
public class MyStack {
int idx = 0;
char [] data = new char[6];
public void push(char c) {
data[idx] = c;
idx++;
}
public char pop() {
idx--;
return data[idx];
}
}
특정한 쓰레드가 수행을 다 끝내기전에 다른 쓰레드가 수행권을 가져감
->(Solution)동기화처리, Synchronized
i)synchronized(this) {lock을 걸려고 하는 bloack}
ii)return type 앞에 synchronized를 붙인다
<deadlock>
동기화 처리된 2개이상의 thread에서 발생
자신이 설정한 lock은 해제하지 않으면서 상대방이 lock을 해제하기만을 기다리는 영원한 교착상태
wait()
notify()
deadlock을 예방하기 위해서 동기화 처리된 쓰레드에서만 쓸 수 있다
Test King Dump 풀이
A-113, 114(?), 115, 116, 119
i)사용자정의 쓰레드 : ex. run() 함수
ii)데몬 쓰레드 : Demon 에서 호출되는 Thread, ex. main() 함수
setDaemon(true); // 이것을 만나면 main() method 호출함
** 내일 할 내용
<Assertion>
<Stream>