분류 전체보기

남궁성님의 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. 해시 테이블 성능 개선 링크드 리스트는 검색에 불리한 자료구조 이기 때문에 링크드 리스트의 크..
남궁성님의 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..
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[] arr1 = {1, 2, 3, 4, 5}; int[] arr2..
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
남궁성님의 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 만 변경해주면 되기 때문에 배열의 단점을 보완함. ..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 1. ArrayList이란? List 인터페이스를 구현하기 때문 데이터 저장순서가 유지되고 중복을 허용 Vector를 개선한 것으로 기능적인 면에서 동일 베이스가 배열이라서 더 이상 저장 공간이 없으면 보다 큰 새로운 배열(저장 공간)을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사(리사이징)한 다음 저장 ⇒ 미리 여유 있게 공간을 차지하도록 할당하는 것이 효율적임. 장점 읽기(접근시간)가 빠름. 순차적인 추가/삭제 빠름 단점 비순차적인 추가/삭제는 느림(배열을 복사하는 과정이 있기 때문) 비효율적인 메모리 사용 2. Vetor vs. ArrayList Vector는 기존에 작성된 소스와 호환성을 위해 남긴 것이기 때문..
1. Google Guice? Spring은 DI 뿐만 아니라 다양한 기능을 제공하는 반면에 Google Guice는 DI 프레임워크이다. 작은규모의 프로젝트나 경량성이 중요한 경우에 사용하는 것이 적합하다. Communicator 인터페이스를 정의했다고 가정하자. Communicator 구현체는 CommunicatorImpl이다. 만약 구현체를 변경해야 하는 상황이 오면 Communication과 Communicator 는 강하게 결합되어 있어 유지보수에 상당한 어려움이 생길 수 있다. 2. 문제 코드 public interface Communicator { } public class CommunicatorImpl implements Communicator{ } public class Communica..
남궁성님의 Java의 정석(3rd Edition)을 보고 정리한 글입니다. 자바에서 제공하는 java.net 패키지를 사용하면 네트워크 애플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있다. java.net 패키지를 알아보기 전에 네트워크 모델과 IP 주소에 대해 알아보자. 1. 네트워크 모델 / IP 주소 a. 클라이언트(Client)/서버(Server) 서버는 서비스를 제공하는 컴퓨터 클라이언트는 서비스를 사용하는 컴퓨터 안정적인 서비스의 제공이 가능하다. 공유 데이터의 관리와 보안이 용이하다. 서버구축비용과 관리비용이 든다. b. P2P 모델(peer-to-peer model) 별도의 서버없이 각 클라이언트가 서버역할을 동시에 수행하는 모델 서버구축 및 운용비용을 절감할 수 있다. 자원의 활용을 ..
kmindev
'분류 전체보기' 카테고리의 글 목록 (4 Page)