개발/Java

    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이란

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

    hashCode()

    /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * * The general contract of {@code hashCode} is: * * Whenever it is invoked on the same object more than once during * an execution of a Java application, the {@code hashCode} method * must consistently return the same integer, provided ..

    자바 스레드 덤프 Thread Dump 분석

    Synchronized Block 키워드는 다음 네가지 유형의 블록에 쓰인다. 인스턴스 메소드에 Synchorinzed 키워드: 인스턴스를 기준으로 이뤄짐. 스태틱메소드에 Synchronized 키워드 : 클래스를 기준으로 이뤄짐. JVM안애 클래스 객체는 클래스당 하나만 존재 가능하므로, 오직 한 스레드만 동기화된 스태틱 메소드를 실행할 수 있다. 인스턴스 메소드 코드블록 : 특정 블록에 대해서만 동기화. 동기화 블록 안에 전달된 모니터 객체를 기준으로 동기화 됨. 스태틱 메소드 코드블록 : synchronzied 블록의 매개변수에 클래스를 넘겨, 해당 클래스를 기준으로 동기화 된다. 위를 기반으로 아래의 4가지 시나리오 대로 스레드 덤프를 분석해보고자 한다. 일반메서드에서 synchronized 블록..

    힙덤프

    Heap 동적으로 할당되어 사용할 수 있는 메모리 영역 주로 실행중에 생성되는 객체들이 저장되고, 실행 후 제거되는 영역 GC(Garbage Collection)의 대상의 되는 메모리 영역 가비지 컬렉터는 가비지 컬렉션을 통해 힙 영역에 있는 사용되지 않는(더이상 참조가 없는) 객체를 회수한다. 힙 덤프 : 힙 메모리의 내용을 그대로 파일로 떠놓은 것. 주의 : 서버에서 이 파일을 열면 안됨. 서버의 메모리를 사용하여 서버 다운될 수 있다. 메모리 누수 힙 영역에 있는 동적으로 할당된 객체가 더 이상 사용되지 않음에도 불구하고 가비지 컬렉터에 의해 회수되지 않고 메모리에 남아있어서 자리만 차지하는 현상 OOM 메모리 부족현상 어플리케이션이 동작하지 못하고 JVM이 종료되는 최악의 상황. 24시간 서비스하..