2018년 10월 15일 월요일

자바 정리

자바 타입

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 -> 종속성, 클래스 은닉

str = "hello" -> literal pool을 참고해서 hello가 있으면 가져오고 없으면 새로 만듬
str2 = new String("hello") -> 무조건 heap에 새로 만듬
        
this() - 생성자 실행
this - 현재 객체의 참조값

import - 메모리는 상관없지만 많이하면 느려짐

부모가 예외처리를 안던지면 자식도 못던짐 -> try catch써야함
                           
래퍼런스 변수를 syso로 찍으면 toString()의 값을 가져온다

오버라이딩 -> 접근지정자는 같거나 넓게, 예외는 같거나 좁게

상태값 유지, 구현된 메소드를 지님 -> 추상클래스
인터페이스의 모든 메소드는 public, 변수는 스테틱 파이널
-> 객체의 동일한 동작을 보장한다. (규격)
( 대규모 프로젝트에서 설계할 때, 다형성을 구성할 떄 )

inputstream, outputstream
바이트 단위의 입출력 최상위 스트림
노드 스트림 -> 입출력에 직접 연결되는 스트림 (저 수준 -> byte단위로 읽고 씀)
필터 스트림, 프로세싱 스트림 -> 옵션 ( 스트링을 한번에 읽음), 줄바꾸기

























flutter 기본 개념 1

  Scaffold  - 화면 뼈대 역할  - 기본적으로 AppBar body floatingActionButton 같은걸 배치해줌  return Scaffold (       appBar : AppBar ( title : const Text ...