본문 바로가기

전체 글

(730)
[Java] lombok의 setter/getter 메소드 생성 시점문의 롬복의 동작원리는 간단히, 컴파일 시점에 바이트 코드를 변환하여 원하는 부분을 주입해주는 방식이다. 과정으로 자세히는 1. 자바 컴파일러는 소스파일을 파싱하여 AST트리를 만든다. 2. Lombok은 AnnotationProcessor에 따라 AST 트리를 동적으로 수정, 새노드를 추가하고 마지막으로 바이트 코드를 분석 및 생성한다. 3. 최종적으로 자바 컴파일러는 Lombok Annotation Processor에 의해 수정된 AST를 기반으로 Byte Code를 생성한다. Annotation Processor Lombok의 의존성을 추가할때 해당 키워드란, 자바 플러그 인의 일종으로, 어노테이션에 대한 코드베이스를 검사, 수정 생성하는 훅이다. 컴파일 에러나, 경고를 내기도하고 소스코드와 바이트코드를..
[Spring] RestTemplate RestTemplate이란? Spring 3.0에서부터 지원하는 RestTemplate은 Http 통신에 유용하게 쓸 수 있는 템플릿이다. Rest 서비스를 호출하도록 설계되어 HTTP 프로토콜 메서드에 맞게 여러 메서드를 제공한다. 특징 -통신을 단순화 하고 RestFul 원칙을 지킨다. -멀티쓰레드 방식을 사용한다. -블라킹 방식을 사용한다. RestTemplate의 구동방식 쓰레드 풀은은 요청자 어플리케이션 구동시에 만들어진다. Request 는 먼저 큐에 쌓이게 되고 가용한 쓰레드가 있으면, 스레드에 할당되어 처리된다. 1 요청당 1스레드가 할당 된다. 스레드에서는 블로킹 방식으로 처리되어, 응답이 올때까지 해당 스레드는 다른 요청에 할당 될 수 없다. 정확한 동작 방식 1. 어플리케이션이 Res..
[Java] Enum 클래스 Enum이란? 기존 상수를 표현할때는 해당 클래스 내부에 final static String, final static int 와 같이 정의했으나 가독성의 문제로 인해 Enum이 등장하였다. Enum은 Enumeration으로 열거형이라고 불리고, 연관된 상수들의 집합을의미한다. Enum클래스는 컴파일 시점에 모든 값에 대해 알아야하고, 고정된 상수들의 집합이여야 한다. 또한 다른 패키지나 클래스에서 해당 타입에 접근해서 동적으로 어떤 값을 정해줄 수 없다. 또한 클래스로 정의를 하기 때문에 정해진 값에 대한 신뢰있는 메소드를 사용하여, 값을 재조정 및 얻어서 사용할 수 있다. ex. MyEnum.toString() -> 별도 오버라이딩 등등
[Java] singleTon 디자인 패턴 싱글턴 패턴이란 -전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조 할 수 있도록 하는 패턴 하나의 인스턴스만 생성하여, 모든 클라이언트들에게 동일한 인스턴스를 반환한다. 생성자를 private으로 하고, 클라이언트에서는 해당 생성된 인스턴스를 사용하여 처리한다. 다중 스레드에서 Printer클래스를 이용할때 인스턴스 1개 이상 생성되는 경우가 발생할 수 있다. 경합 조건에서 두개의 쓰레드가 null을 체크후에 진행이 된다면, 동시에 두개의 인스턴스가 생성이 될 수도 있다. 1) static 변수로 인스턴스를 만들어서, 초기화 하는 방법 static 변수 객체가 생성되기 전 클래스가 메모리에 로딩될때 만들어져서 초기화가 한번만 실행된다. 메소드 영역에 메모리가 ..
[Java] Reflection 개념 및 사용법 리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드와 타입 그리고 변수들을 접근 할수 있도록 해주는 자바 API 이다. 런타임에 지금 실행되고 있는 클래스를 가져와서 실행해야하는 경우 동적으로 객체를 생성하고 메소를 호출하는 방법 클래스,인터페이스,메소드 들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다. -컴파일 타임 타입검사가 주는 이점을 누릴수 없다. -리플렉션을 이용하면 코드가 장황해지고 지저분해진다. -성능이 떨어진다. (리플렉션을 통한 메서드 호출은 일반 메서드 호출보다 훨씬 느리다.) 쉽게말하면, 특수한 시스템을 만들때는 강력하나, 컴파일 타임에서 명확한 객체를 사용하지 못해 독이 될수 있다. 따라서 되도록이면 인스턴스 생성에만 리플렉션을 쓰고..
[Java] LinkedList -각 노드가 데이터와 포인터를 가지고 한줄로 연결되어있는 방식이다. -노드의 포인트가 이전 노드,다음노드에 대한 정보를 가지고있고, 연결을 담당한다. -삭제,추가에 대해서 빠르다 -검색에 대해서는 순차 탐색을 해야하기때문에 느리다.(인덱스가 없다)
[Java] Vetor 개념 및 사용 방법 Vector란 Collection 프레임워크의 일부이다 ArrayList와 동일한 구조를 가지고, 배열의 크기가 늘거나 줄면 자동으로 크기가 조절된다. 항상 동기화를 지원한다. 스레드가 아닌 환경에서는 거의 사용이 되지 않는다. 크기를 구하거나 사이즈에 대한 조회를 할때 동기화 메소드가 걸려있어서 쓰레드에 락이 거는 특징이 있다.
[Java] Wrapper 클래스 래퍼 클래스 프로그램에 따라 기본타입의 데이터를 객체로 분류해야하는 경우가 있다. 메소드의 인수로 객체 타입만 요구되거나, nullable 한 상태가 요구될때 해당 클래스를 사용한다. 이럴때 기본타입에 해당하는 데이터를 객체로 포장해주는 클래스를 래퍼클래스라고 합니다. 박싱/언박싱 박싱 : 기본타입 -> 래퍼 클래스 언박싱 : 래퍼클래스 -> 기본타입