개발

    java.util.collections 총정리 List편

    저번의 queue에 이어 list에 대해서도 알아보자. (javadoc, 구현 코드를 중심 분석해볼 예정) Collection List AbstactionCollection AbstractList ArrayList AbstractSequentialList LinkedList Vector Stack List sequence라고도 알려진 순서가 있는 collection이다. 각각의 원소가 어디에 있는지 알 수 있다. 정수인 인덱스를 통해, 원소에 접근할 수 있고, 검색할 수 있다. Set과는 다르게, 일반적으로 중복을 허용한다. null인 원소를 허용한다. public interface List extends Collection * An ordered collection (also known as a seq..

    java.util.collections 총정리 Queue편

    저번의 set에 이어 queue에 대해서도 알아보자. javadoc, 직접 코드를 확인해보면서 분석해보자. 아래와 같은 상속, 구현 구조를 띄고 있다. Collection Queue Deque ArrayDeque AbstractQeue PrioirtyQueue Queue public interface Queue extends Collection 위와 같이 Collection을 확장하고 있다. javadocs에 기술된 내용을 의역해보면 아래와 같다 1.5에서 소개됨. 처리하기 전에 elements들을 담아두기 위해 설계된 collection이다. 기본적인 collection의 연산 외에 추가적인 insertion, extraction, inspection 연산을 제공한다. 각각의 메소드는 연산에 따라 두 ..

    Netty란?

    Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server. 2009년 Ryan Dahl은 수천개의 동시 연결을 처리할 수 있는 Apache Http Server의 제한된 성능으로 인해 Node.js를 발명. JS Engine + Event Loop, I/O를 결합함. 완전 새로운 개념은 아님. 이미 자바에 1.4 NIO가 있었음. Netty는 이를 ..

    컨텍스트 스위칭시 일어나는일

    P1이 실행중이고 P2가 준비상태임. 일부 중단이 발생하면 컨텍스트를 저장한 후 프로세스 P1을 실행 중에서 준비 상태로 전환하고 P2를 준비에서 실행중 상태로 전환해야함 언제 발생? 1. 인터럽트 : CPU는 디스크에서 데이터를 읽을 것을 요청하고, 인터럽트가 있는 경우 컨텍스트 스위칭은 인터럽트를 처리하는데 더 적은 시간이 필요 2. 멀티태스킹 : 다른 프로세스가 실행될 수 있도록 프로세스가 CPU에서 전환될 수 있도록 하는 멀티태스킹의 특성 3. 커널 / 사용자 스위치 : PCB : 운영제체에서 모든 데이터와 관련된 정보를 프로세스에 저장하는데 사용되는 데이터 구조, 프로세스가 생성되면 프로세스의 업데이트 정보, 프로세스의 정보 전환, PCB의 프로세스 종료 등이 있음. 1. 실행 상태에 있는 프로..

    C10K부터 Event-Driven까지

    하드웨어 자원이 충분함에도 불구하고 IO 처리방식의 문제 때문에 프로세스가 제대로 처리하지 못하는 문제. BSD 소켓을 처음 설계할 때 10K 클라이언트를 처리할 하드웨어 여력이 되지 않았다. 그래서 이를 고려하지 않고 설계함. 10K가 붙으면 네트워크 대역만 해도 기가비트급이고 당시에 상상도 못할일. 이걸 감당할 하드웨어도 없었다. 처음에 OS 커널을 수정하는 방식으로 해결하려고 했음. 그 이후에는 event-driven 서버(Nginx, Node.js)를 통해 해결하려는 시도들이 등장. 무어의 법칙 : 18개월마다 반도체 직접회로의 성능이 2배로 증가 에 비해 소프트웨어의 한계로 인해 발생한 문제. 스레드는 서버 CPU 코어수에 종속적이다. 하나의 Connection당 하나의 스레드가 처리하는 모델 ..

    Lombok의 동작원리

    Lombok은 컴파일 시점에 바이트코드를 변환하여 원하는 부분을 주입해주는 방식으로 동작한다. 아래에서 더 자세히 알아보자. Lombok이 처리되는 과정은 다음과 같다 1. javac는 소스파일을 파싱하여 AST트리를 만든다. 2. Lombok은 AnnotaionProcessor에 따라 AST 트리를 동적으로 수정하고 새 노드(소스코드)를 추가하고 마지막으로 바이트 코드를 분석 및 생성한다. (컴파일 과정에서 생성된 Syntax Tree는 com.sun.source.tree.*에서 public accesss를 제공한다.) 4. 최종적으로 javac는 Lombok Annotation Processor에 의해 수정된 AST를 기반으로 Byte Code를 생성한다. 코드레벨에서 더 자세히 알아보자 우선 아래의..

    java.util.collections 총정리 set편

    java.util에 존재하는 collection들을 이번 글에서는 Set부터 정리해보자. javadoc, 구현 코드를 중심 분석해볼 예정 간단하게 java.util에 존재하는 Collection들을 알아보고 Set에 대해서 알아보자. 우선 상속과 구현된 구조를 살펴보자 인터페이스 구조 Collection 인터페이스 Set SortedSet NavigableSet Queue Deque List AbstractCollection Collection 인터페이스를 구현한 추상 클래스 중복을 허용함 실제 저장 구조와 관계된 함수는 미구현됨. AbstractSet HashSet LinkedHashSet TreeSet EnumSet AbstractList ArrayList AbstractSequentialList L..

    Lombok 이란?

    공식문서 : "Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more." 어노테이션 기반으로 코드를 자동완성 해주는 라이브러리 장점 코드 자동생성을 통한 생상성 향상 반복되는 코드를 줄여 가독성 및 유지보수성 향상 빌더패턴이나 로그 자동 생성 등 다양한 방면으로 활용 가능 단점 ..

    mixin이란

    특정 행동을 실행해주는 메소드를 제공하는데 단독으로 쓰이지 않고 다른 클래스에 행동을 더해주는 용도로 사용됨. 특정 기능만을 담당하는 클래스, 단독 사용이 아닌 다른 클래스에 사용될 목적으로 작성된 부품 같은 클래스를 의미. 전통적인 다중상속을 클래스의 부분부분으로 쪼개서 조립하는 것. 클래스들을 재조립하여 새로운 클래스 타입을 만드는 것. 즉 각각의 기능을 컴포넌트처럼 구현하고 원하는 기능들을 조합하여 새로운 타입을 만들 수 있음