본문 바로가기

AdvancedJava

객체 직렬화 참조 : HTTP://HYEONSTORAGE.TISTORY.COM/TRACKBACK/252 객체직렬화는 JVM에 힙영역에 있는 객체를 네트워크 전송이나 외부클래스와의 통신 중에, 객체를 바이트 단위의 형태로 나열하여 만드는 것이 객체 직렬화 라고 한다. 그래야 String형태의 데이터로 전송이 되고 원격지에서 그걸 받아서 객체화를 한다. 보안상 보안 정보가 있을 경우 transient 필드를 선언하여, 받는 정보지에서 null로 받을 수 잇따. 더보기
[4일차]cuncurrent, Thread pool 자바에 동시 수행 javja.util.concurrent.atomic AtomicInteger, Atomiclong, AtomicBoolean 값을 읽기와 변경을 동시에 수행해서 멀티 쓰레드 환경에서 값이 잘 못 되는 것을 막기 위한 클래스들의 패키지들. class A{ static int count;A() {count++;} } 멀티쓰레드 환경. 에서 저렇게 하면 count값이 제대로 더하기 되지 않는다. 그래서 이걸 사용하는거다. Thread pool쓰레드를 매번 생성할때 발생하는 Overhead를 줄이기 위해 TreadPool을 사용함. 만들고 처리가 끝난 쓰레드를 재활용하고, 만들수 있는 쓰레드의 수를 제한하는 것. 완료된 쓰레드 처리는 바로 죽이지 않고 얼마 동안 살려둔다 그게 Keep_Aliv.. 더보기
[4일차] Thread, syncronized,생산자 소비자 Thread쓰레드 안에 run() 이라는 함수를 오버라이드 해서 코드를 넣을 수 있다. runnable이라는 객체를 넘겨줘서 코드를 넣어줘도 된다. ex:) new Thread(new Runnable(){public void run(){ print"HI"} }) 할당했다고 돌지 않는다. 반드시 new Thread() 객체를 생성해서 코드를 넣고th.start()를 해줘야 한다. sleep(); 일정 초 동안 일시정지 : wait큐에 지정 시간 동안 넣고 다시 cpu에 스케줄러에 할당 한다. wait() : 런어블 객체를 웨이트 큐에 넣는다. notify()는 런어블 객체를 스케줄러로 할당하는 것이다. notifyall() 하면 웨이트 큐에 있는 모든 객체를 cpu 스케줄러를 통해 할당한다. 큐이기때문에 .. 더보기
[3일차]쓰레드 쓰레드 Thread Process 메로리나 cpu와 관련한 자원들을 쫙 모아놓은 애가 process 그 중에서 코드를 한줄 한줄 실행하고 있는애가 쓰레드 이다. 쓰레드 이다. 그런데 하나를 작업하다 노는 경우가 생겨서 나온 개념이 멀티 프로세스이다. 그러다 보니까 하나의 프로그램 안에서도 그런 일이 일어나면 안되는거다. 그래서 Thread라는 개념이 만들어 진거다. Process간에는 서로 다른 자원을 접근하지 못하게 하고 있다. 그런데 Thread 는 ? 자원을 서로 공유한다. 결국 Process는 회사고 Thread는 일하는 사람이다. 뭐하는 회사야 하지만 일하는 주체는 사람. 같이 일하는 사람끼리 프린트 공유해서 쓰는 것처럼. 쓰레드도 자원을 공유한다. 이와 같은 개념이다. /////////////////.. 더보기
[3일차] 문자세트와 문자 인코딩 그리고 직렬화... 테이블 이름. euc - kr unix시스템에서 정의한 문자셋 리눅스서버로 많이 사용하기 때문에 이거 쓰는 경우가 많다. ksc-5601코리아 스탠다드 char-set 테이블 이름. iso -2022-kr 인터내셔널 스탠다드 한글 char-set 표준 cp949코드페이지 949 char-set 윈도우에서 쓰는 문자셋 utf-8 unicode전세계의 문자를 표현 그래서 글자가 커져서 숫자를 바로 쓰면 바이트단위로 쓰기 때문에 문제가 생김 , 그래서 1byte단위로 받아서 하는 인코딩하는게 utf-8 ,2byte단위로 받아서 쓰는게ㅔ utf-16 자바는 unicode에 utf-16을 쓴다. 한글일본어중국어다 됨 다 ~ '가' -> charset (unicode)-> code-> encoding(utf-8) .. 더보기
[3일차] IO Input/Output 프로그램에 들어가는 것을 인풋 나오는것을 아웃풋 프로세스란 컴퓨터를 돌릴때 메모리 영향 핸들 영향 돌아가고있을때, 그 순간에, 시간을 멈췄을 때, 내가 실행한 프로그램 뭐지 ../// 하고 뽑았을때 프로그램을 실행했을 때, 잡아먹는 메모리 이런 자원들을 관리하는 것을 프로세스라 한다. 그 중에서 코드를 실행하는 애를 쓰레드라 한다. 파일로 부터 byte array로 읽어오면 InputStream파일로 나가면 OutputStream; 자바는 IO에 접근하기위해서 IO장치가 무엇이 됬는지는 신경쓰지 않는다. InputStream과 Output Stream을 가지고 데이터를 주고 받는다, Byte단위로 가져오면 느리기 때문에 write 함수인 BufferInputStream 이나 Buf.. 더보기
[3일차] list 실습 package org.taca.hellojava; import java.util.HashMap;import java.util.List;import java.util.Map; public class PersonManager { Map items = new HashMap();public void put(String address, Person p){List list = items.get(address);if(list ==null){list = new ArrayList();items.put(address, list);}list.add(p);}} 이런형식으로 많이 쓴다. map 안에 String 과 List로 이루어져있는 곳에 List안에 접근할 경우 ... 더보기
[3일차] List Array,Collection Array String [] stringArray 와 같이 정의 연속한 메모리 공간. 각각 하나하나에 들어가는 동일한 연속된 공간 이런것들은 어레이라 한다. . . . . 메모리가 연속해서 존재한다. 자바에서 array 는 변수의 array Person[] p = new person[10] person 변수 10개를 연속해서 만들겠다는 의미. 그래서 객체가 아니라 변수다. 변수를 만든거지 객체를 할당한것이아니다. array를 만드는방법은 여러가지가 있다. public void m(String... s){// 이 파라미터는 가변처리를 할 수 있다. } hash 일단 저장공간을 크게 만들어서 hash(object)함수를 실행시켜서 만들어지는 숫자(메모리 주소)를 가지고 데이터를 넣어놓는다. object를 가.. 더보기
[3일차] 제네릭 왜 제네릭을 쓸까 ??컴파일 단계에서 에러를 띄우기 위해서 클래스나 메소드 안에서 특정한 타입을 정해서 쓸 수 있다 . ? T data; // 이 경우 data에 String이 보장되기 때문에 data.substring(); 접근이 가능하다. String 도 상속받고, 인터페이스도 상속받고 싶을때, 이렇게 처리할 수 있다. 이렇게 하면 된다. 메소드에 쓰고 싶을 때는 public void putData(T data){ }이렇게 쓸 수 있다. 임의에 제네릭 타입을 넣는 경우데이터를 추가할 순 없다. public printLog(MyClass p){} 타입과 관계없는 것을 불러올 때 사용한다. 이게 끝이지만 많이 쓴다. 예를 들면 파싱한 경우, 처리하고 결과를 넘겨주는 함수는 제네릭으로 만든 다. 절차는 동.. 더보기
[3일차] 어노테이션 실습 drawable 인터페이스를 implements한 class에 anndotation을 기입하여 friend와 enemy를 구분하게 만든다. 어떻게 ? 일단 어노테이션을 만든다. 내가 원하는 drawale에서 정의한다. 그리고 걔가 있는지 확인하는거다. 적과 친구가 같은거냐 아니냐에따라 충돌했냐 안했냐를 비교한다. isCollapse(Drawabled d1, d2){ } 더보기