자바

남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 클래스 생성과 구성 클래스는 인스턴스를 생성하기 위한 설계도이다. 클래스는 크게 변수 + 메서드로 구성된다. a. 변수란? 변수는 쉽게 말해서 데이터(Value / Refernce)를 저장할 수 있는 저장공간이다. 변수는 선언위치에 따라 클래스 변수, 인스턴스 변수, 지역 변수로 나눌 수 있고, 이에 따라 사용가능한 스코프(영역)에 차이가 있다. 변수선언 예시 class Variables { int iv; // 인스턴스 변수 static int cv; // 클래스 변수 void method() { int lv = 0; // 지역 변수(메서드 내부에서만 사용) } } public static void main(String ar..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 스트림(Stream)이란?Java 8에서 추가되었다.컬렉션, 배열 등에 저장된 데이터를 for문을 사용하지 않고, 요소를 하나씩 참조해서 람다식과 함께 처리할 수 있도록 해주는 반복자이다. 스트림을 사용하기 전public class Test { public static void main(String[] args) { String[] str = {"aaa", "ddd", "ccc"}; List stringList = Arrays.asList(str); Arrays.sort(str); Collections.sort(stringList); for(String s ..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 쓰레드 동기화 두 개 이상의 쓰레드가 공유 데이터에 동시에 접근하게 되면 예상과 벗어난 결과가 나타날 수 있다. 이러한 문제를 해결하는 것이 쓰레드 동기화이다. 쓰레드 동기화를 이해하기 위해서는 임계영역과 락에 대한 이해가 필요하다. 임계영역(Critical section): 여러 쓰레드가 동시에 접근하면 문제가 발생할 수 있는 부분 잠금(Lock): 임계 영역에 대한 접근을 제어하기 위한 도구 2. synchronized를 이용한 동기화 a. 임계 영역을 지정하는 2가지 방법 // 1. 메서드 전체를 임계 영역으로 지정 public synchronized void calcSum() { // 임계 영역 } // 2. 특정 영..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 쓰레드의 상태와 실행제어 a. 쓰레드 상태 실행대기는 큐와 같은 구조로 먼저 실행대기열에 들어오면 먼저 실행된다. 실행 중에 suspend(),sleep(), wait(), join(), I/O Block에 의해 일시정지된 상태가 될 수 있다. (time-out), notifiy(), resume(), interrupt()에 의해 일시정지 상태가 끝나면 실행대기 상태가 된다. 상태 설명 NEW 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태 RUNNABLE 실행 중 또는 실행 가능한 상태 BLOCKED 동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태) WAITING, TIME_WAITING..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 데몬 쓰레드(Daemon thread) 일반 스레드의 작업을 돕는 스레드(보조) 일반 스레드가 종료되면 데몬스레드는 자동 종료 주로 무한루프와 조건문을 이용해서 실행 후 대기하고 있다가 특정 조건에서 다시 수행 boolean isDaemon() // 데몬 스레드일 경우 true void setDaemon(boolean on) // true일 경우 데몬스레드가 된다. threadEx th = new threadEx(); th.setDaemon(true) // 데몬 스레드 th.start(); // 데몬 스레드 시작 데몬 쓰레드 예제 public class DaemonThreadEx implements Runnable { static..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 싱글쓰레드와 멀티쓰레드 a. 싱글쓰레드 public class SingleThredTest { public static void main(String[] args) { long startTime = System.currentTimeMillis(); for (int i = 0; i < 300; i++) { System.out.printf("%s", new String("_")); } System.out.println("소요시간1: " + (System.currentTimeMillis() - startTime)); System.out.println(); for (int i = 0; i < 300; i++) { System.out.pr..
남궁성님의 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와 UDP TCP/IP 프로토콜에 포함된 프로토콜로 OSI 7계층에 전송계층에 해당된다. 항목 TCP UDP 연결방식 연결기반 - 연결 후 통신 - 1:1 통신방식 비연결형기반 - 연결없이 통신 - 1:1, 1:n, n:n 통신방식 특징 - 데이터의 경계를 구분안함 - 신뢰성 있는 데이터 전송 - 데이터의 수신여부를 확인함(손실되면 재전송) - 패킷을 관리할 필요가 없음 - UDP보다 느림 - 데이터 경계 구분함..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. 해싱이란? 해싱이란 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법이다. 해시함수의 결과를 가지고 데이터가 저장되어 있는 곳을 찾아 데이터를 빠르게 검색할 수 있다. 해싱에서 사용하는 자료구조는 배열과 LikedList 조합 해시함수는 자바에서 Object클래스의 메서드 hashCode() 개념과 동일하다. 2. 해시테이블 검색 과정 검색하고자 하는 키로 해시함수를 호출한다. 해시함수의 결과(해시코드)로 해당 값이 저장되어 LikedList를 찾는다. LikedList에서 검색한 키와 일치하는 데이터를 찾는다. 3. 해시 테이블 성능 개선 링크드 리스트는 검색에 불리한 자료구조 이기 때문에 링크드 리스트의 크..
Iterator, ListIterator, Enumeration 모두 Collection에 저장된 데이터를 접근하는데 사용되는 인터페이스 Enumeration은 Iterator의 구버젼(호환성 때문에 남아있을 뿐 잘 사용하지 않음) ListIterator는 Iterator의 접근성을 향상시킨 것(단방향 → 양방향) Iterator public class Main { public static void main(String[] args) { ArrayList list = new ArrayList(); for(int i=0; i
kmindev
'자바' 태그의 글 목록