자바 타입
primitive (원시) - int, char, boolean, double ...
reference (참조) - 모든 객체
객체
속성 - 상태, 값
행위 - 동작, 기능
OOP
캡슐화 - 정보 은닉, 결합도 낮음
상속 - 코드 재사용, 개발 시간 단축, 개발 비용 절감, 결합도 높음(오버라이딩)
추상화 - 추상클래스, 인터페이스 ( 사용방법, 동작을 약속 )
다형성 - 오버로딩, 동적바인딩(컴파일시 부모, 런타임시 자식)
JVM
메소드 스택 heap
스테틱 객체1 객체1 값
객체2 객체2 값
메소드 - 클래스, 메소드가 실행 될때 정보를 저장
스택 - 실행되는 순서 (메소드, 변수, 객체 등 값 또는 참조값) ( 쓰레드 당 스택 하나)
heap - 객체의 실제 값
GC
heap - 2개의 new , 1개의 old
마이너 GC - new에 있는 객체 값을 지움 ( 필요한 건 다른 new, old에 옮김)
메인 GC - old에 있는 객체 값을 지움
스택에 참조값을 넣고 실행 순서가 되면 참조값으로 주소값을 찾음 주소값으로 실제 값을 찾음 ( garbage collection 때문)
자바 threadpool
갑작스런 스레드 증폭을 막기위함스레드를 제한된 개수만큼 정해 놓고 필요할떄마다 사용함
스레드가 생성,스케줄링,삭제로 인한 cpu메모리 손실을 방지함
불필요하게 많은 스레드가 만들어질수있음
노는 스레드가있을수있음
쓰레드
Thread -> (일꾼) t.start();
runnable -> 나중에 쓰레드가 처리할 객체 (일)
-> mr r = new mr(); //runnable을 상속받음
Thread t = new Thread(r);
t.run();
쓰레드
blocked
start() ↓ run() ↑ run()종료
new -> runnable -> running -> dead
자원동기화
자료구조
set -> 중복x , 순서x , equals 와 hashcode로 검사함list -> 순서 유지 , 중복 허용
map -> key로 관리(키값은 중복x -> 중복되면 덮어씀) , 순서 x , 중복 허용 (전화번호부)
트리셋 -> 원소의 정렬 유지 -> 추출할때 정렬함
링크드리스트 -> 큐, 덱
백터 -> 데이터 동기화하기떄문에 싱글스레드에서는 안좋음
속도
배열 > list > set > map
이지만 데이터가 10000 이상 담지 않는다면 크게 차이가 없음
ArrayList list = new ArrayList();
list.add(100);
list.add("hello");
list.add(0, "hi");
list.remove(0);
list.remove(new Integer(50));
-> 객체를 비교하는게아니라 내용값을 비교해서 삭제
for(int i=0;i<list.size();i++) {
Object o = list.get(i);
System.out.println(o);
}
ArrayList<Integer> -> list(100) -> int 타입의 100을 자동으로 Integer타입으로 포장해줌
-> get(1) -> Integer타입을 자동으로 int 타입으로 풀어줌
기타
입출력, 객체 생성제거 -> 오버헤드가 큼
패키지 -> name space
디폴트 -> 패키지 프라이빗
final -> 상속금지, 변경 X, 오버라이딩 x
final int z; -> 초기값을 지정하지 않은 상수는 생성자에서 설정해줌
inner class -> 종속성, 클래스 은닉
inner class -> 종속성, 클래스 은닉
str = "hello" -> literal pool을 참고해서 hello가 있으면 가져오고 없으면 새로 만듬
str2 = new String("hello") -> 무조건 heap에 새로 만듬
this() - 생성자 실행
this - 현재 객체의 참조값
import - 메모리는 상관없지만 많이하면 느려짐
부모가 예외처리를 안던지면 자식도 못던짐 -> try catch써야함
래퍼런스 변수를 syso로 찍으면 toString()의 값을 가져온다
오버라이딩 -> 접근지정자는 같거나 넓게, 예외는 같거나 좁게
상태값 유지, 구현된 메소드를 지님 -> 추상클래스
인터페이스의 모든 메소드는 public, 변수는 스테틱 파이널
-> 객체의 동일한 동작을 보장한다. (규격)
( 대규모 프로젝트에서 설계할 때, 다형성을 구성할 떄 )
필터 스트림, 프로세싱 스트림 -> 옵션 ( 스트링을 한번에 읽음), 줄바꾸기
래퍼런스 변수를 syso로 찍으면 toString()의 값을 가져온다
오버라이딩 -> 접근지정자는 같거나 넓게, 예외는 같거나 좁게
인터페이스의 모든 메소드는 public, 변수는 스테틱 파이널
-> 객체의 동일한 동작을 보장한다. (규격)
( 대규모 프로젝트에서 설계할 때, 다형성을 구성할 떄 )
inputstream, outputstream
바이트 단위의 입출력 최상위 스트림
노드 스트림 -> 입출력에 직접 연결되는 스트림 (저 수준 -> byte단위로 읽고 씀)필터 스트림, 프로세싱 스트림 -> 옵션 ( 스트링을 한번에 읽음), 줄바꾸기