남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 데몬 쓰레드(Daemon thread)일반 스레드의 작업을 돕는 스레드(보조)일반 스레드가 종료되면 데몬스레드는 자동 종료주로 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건에서 다시 수행boolean isDaemon() // 데몬 스레드일 경우 truevoid setDaemon(boolean on) // true일 경우 데몬스레드가 된다.threadEx th = new threadEx();th.setDaemon(true) // 데몬 스레드th.start(); // 데몬 스레드 시작 데몬 쓰레드 예제public class DaemonThreadEx implements Runnable { static boo..

Programming
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 싱글쓰레드와 멀티쓰레드a. 싱글쓰레드public class SingleThredTest { public static void main(String[] args) { long startTime = System.currentTimeMillis(); for (int i = 0; i 하나의 작업이 끝나고 다음작업을 진행하게 된다. b. 멀티쓰레드참고로 10코어 환경에서 실행한 예제이다. 싱글 코어의 경우에는 소요시간이 더 오래걸린다.public class MultiThreadTest { static long startTime = 0; public static void main(String[] ar..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 쓰레드 호출 스택쓰레드 별로 별도의 Stack Area(호출 스택), Register, Native Method Stack을 가진다.main 메서드 작업을 수행하는 것도 쓰레드이다.실행 중인 쓰레드가 없으면 프로그램이 종료 2. 쓰레드 생성과 호출 과정main 메서드에서 쓰레드1의 start()를 호출start()는 새로운 쓰레드를 생성하고, 쓰레드가 작업하는데 사용될 호출스택을 생성새로 생성된 호출스택에 run()이 호출되어, 쓰레드가 독립된 공간에서 작업을 수행이제는 호출스택이 2개이므로 스케줄러가 정한 순서에 의해서 번갈아 가면서 실행된다. 한 쓰레드가 예외가 발생해서 종료되어도 다른 쓰레드에게 영향을 미치지 않는다...
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다.1. 소켓(Socket) 프로그래밍소켓은 프로세스간 통신을 위해 사용되며, 양쪽 끝 간 데이터를 주고 받을 수 있는 데이터 통로를 통해 통신한다.소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분한다. 2. TCP와 UDPTCP/IP 프로토콜에 포함된 프로토콜로 OSI 7계층에 전송계층에 해당된다.항목TCPUDP연결방식연결기반 - 연결 후 통신 - 1:1 통신방식비연결형기반- 연결없이 통신 - 1:1, 1:n, n:n 통신방식특징- 데이터의 경계를 구분안함- 신뢰성 있는 데이터 전송 - 데이터의 수신여부를 확인함(손실되면 재전송) - 패킷을 관리할 필요가 없음 - UDP보다 느림- 데이터 경계 구분함 - 신뢰성 없는 데이터 ..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 해싱이란?해싱이란 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법이다.해시함수의 결과를 가지고 데이터가 저장되어 있는 곳을 찾아 데이터를 빠르게 검색할 수 있다.해싱에서 사용하는 자료구조는 배열과 LikedList 조합해시함수는 자바에서 Object클래스의 메서드 hashCode() 개념과 동일하다. 2. 해시테이블 검색 과정검색하고자 하는 키로 해시함수를 호출한다.해시함수의 결과(해시코드)로 해당 값이 저장되어 LikedList를 찾는다.LikedList에서 검색한 키와 일치하는 데이터를 찾는다. 3. 해시 테이블 성능 개선링크드 리스트는 검색에 불리한 자료구조 이기 때문에 링크드 리스트의 크기가 커..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. Comparator, Comparable객체를 정렬하는데 필요한 메서드를 정의한 인터페이스(정렬기준을 제공)Comparator는 compare(Object o1, Object o2) 메서드를 통해 객체를 비교한다.두 객체(매개변수)로 비교한다.Comparable는 compareTo(Object o1) 메서드를 통해 객체를 비교한다.자기자신과 매개변수 객체를 비교한다.compare(), compareTo() 모두 두 객체가 같으면 0, 비교하는 값보다 작으면 음수, 크면 양수를 리턴하도록 구현해야 한다. a. Comparator 예제age(나이)를 기준으로 오름차순 정렬class Student implements Compar..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. Arrays배열을 다루기 편리한 static 메서드 제공 a. 배열 출력 - toString(), deeptoString()toString(): 1차원 배열 출력deepToString(): 2차원 배열 출력int[] arr1 = {1, 2, 3, 4, 5};int[][] arr2 = {{11, 12}, {21, 22}};Arrays.toString(arr1); // [1, 2, 3, 4, 5]Arrays.deepToString(arr2); // [[11, 12], [21, 22]] b. 배열 비교 - deepEquals(), equals()equals(): 1차원 배열 비교deepEquals: 2차원 배열 비교int[] ar..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다.1. Iterator, ListIterator, Enumeration모두 Collection에 저장된 데이터를 접근하는데 사용되는 인터페이스Enumeration은 Iterator의 구버젼(호환성 때문에 남아있을 뿐 잘 사용하지 않음)ListIterator는 Iterator의 접근성을 향상시킨 것(단방향 → 양방향) a. Iteratorpublic class Main { public static void main(String[] args) { ArrayList list = new ArrayList(); for(int i=0; i b. ListIteratorpublic class Main { pub..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 스택과 큐 LIFO, FIFO 구조를 가진다. 스택과 큐를 알아보기 전에 LIFO, FIFO 구조에 대해서 알아보자. 1. LIFO 구조와 FIFO 구조LIFO 구조는 입구가 하나인 구조로, 가장 마지막에 들어간 요소가 가장 먼저 나오는 후입선출 구조이다.FIFO 구조는 입구와 출구가 서로 다른 구조로, 가장 먼저 들어간 요소가 가장 먼저 나오는 구조이다. 2. Stack이란?LIFO(Last In First Out) 구조(가장 마지막으로 들어간 요소가 가장 먼저 나온다.)Java에서 클래스로 구현되어 있음스택 활용 예시수식계산, 괄호검사, 웹브라우저 뒤로/앞으로Java에서는 Stack 클래스를 사용하는 것을 권장하지 않음.(..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. LinkedList는 ArrayList와 제공하는 기능을 거의 똑같지만 내부적으로 매우 다르게 동작한다. LinkedList의 3가지 유형을 소개하고 ArrayList와 차이점을 정리해보겠다. 1. 단방향 연결 리스트(Singly Liked List) 란?Class Node { Node next; // 다음 요소의 주소를 저장 Object obj; // 데이터}노드(객체)끼리의 주소(포인터)를 서로 가리키며 링크(참조)로 이어지는 구조.메모리에 순차적으로 저장되지 않고 데이터의 순서를 link를 통해서 순서를 보장하므로 데이터 추가, 삭제시 배열을 복사하지 않고, link 만 변경해주면 되기 때문에 배열의 단점을 보완함.장점비..