제네릭이 나오게 된 이유? 제네릭이 도입되기 이전에는 상황에 따라 각기 다른 데이터를 다루기 위해 최상위 클래스인 Object를 사용하여 코드를 작성하곤 하였다. 그를 통해서 어떠한 데이터라도 받아 저장할 수 있었으나 몇가지 문제가 있었는데. 저장했던 값을 사용해야 할 때 명시적으로 캐스팅을 해서 사용해야 한다. 잘못된 캐스팅을 통한 오류가 발생할 수 있다. (String → Integer 등..) 들어온 타입에 대한 검증하는 로직이 추가로 들어가야한다. ( instanceof 결국 런타임에서 발견 ) 에러의 유무를 컴파일 단계에서 체크할 수 없다. (사전에 방지할 수 없다.) 즉 모호하고 찾기 어려운 잠재적인 오류를 가지게 된다. Reifiable type의 문제점! 이러한 문제를 방지하기 위해서는 컴..
자바 ORM 표준 JPA 프로그래밍 서적을 학습하면서, 정리하고 있는 내용입니다. EntityManagerFactory 사용자의 요청이 들어옴에 따라 EntityManager를 생성하는 책임을 가지고 있다. JPA를 동작시키기 위한 내부 객체들이 이 Factory를 통해 생성되고, 구현체에 따라선 커낵션 풀도 별도로 구성하므로 생성 비용이 크다고 한다. 여러 EntityManagerFactory를 생성하여 공유할 수 있으나. 하나의 객체만 생성해서 전 영역에 공유하는 것이 권장된다. (configuration lite mode를 사용하면 여러 개를 생성하고 공유할 수 있을 것 같다.) EntityManager (Persistence Context) 엔티티 정보를 저장하고 있는 환경. 요청 결과가 DB에 ..
스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O I/O? Input : 입력, Output : 출력 Application(JVM) 외부의 입력을 받고, 내부의 결과를 외부로 전달하는 모든 흐름을 의미한다. Scanner, InputStream을 통한 키보드, CSV 등의 포맷 파일 입력 등 OutputStream을 통한 Console 출력, TCP/IP를 이용한 외부 Application(JVM)에 전달 등 Stream - Java I/O? 데이터를 전달하고, 입력받을 때 필요한 단방향 통로를 말한다. 기본적인 Java I/O API에서는 입력과 출력을 위한 각각의 Stream이 필요하다. 기본적으로 Buffer를 사용하지 않는 방식이며, 데이터를 받은 즉시 처리..
GRASP : General Responsibility Assignment Software Patterns? 해당 내용은 상호작용하는 클래스 혹은 객체에 책임을 할당하는데 도움이 되는 개념과 방법 즉 패턴들로 이루어져 있습니다. 이러한 내용들을 준수함으로써 좋은 객체지향 디자인 패턴을 만들어낼 수 있습니다. Responsibility? 책임은 SOLID나 지금 다룰 GRASP 등 Oriented-Object-Design 패턴과 원칙에서 핵심이 되는 개념입니다. 이는 클래스와 객체가 어떤 메시지(요청)에 대해 처리할 수 있거나, 적절한 행동을 해야 하는 의무가 있는 경우 해당 객체가 이러한 책임을 가진다라고 이야기할 수 있습니다. 책임은 메서드를 통해 구현되게 됩니다. Example. String은 문자열..
Annotation을 정의하는 방법 Annotation이란? JDK 1.5에 추가된 기능으로 실제 코드에 직접적인 영향을 주지 않고, 해당 코드를 처리하는 ****Compiler , Interpreter 혹은 Runtime에서 JVM에게 처리를 위한 정보를 제공하는 것이 주목적이다. Single-Value Annotation 단일 변수만을 갖는 Annotation을 말하며, 값을 명시하여 데이터를 전달할 수 있다. @SuppressWarnings, @Retention, @Target... Full Annotation 두 개 이상의 변수를 갖는 어노테이션으로 여러 데이터를 ", "를 기준으로 Key : value 형식으로 전달하게 된다. @Generated... Marker Annotation과 Inter..
Reflection이란? Compile Time에 Class나 Method 명을 알지 못하더라도 Runtime에 Type, Classpath를 이용하여 인스턴스화, 객체의 상태, 메서드 정보 등을 가져올 수 있도록 지원하는 API이다. 사용하는 Library, Framework, API, Feature Jackson, GSON 등의 JSON Serialization Library Log4 j2, Logback 등의 Logging Framework Apache Commons BeanUtils 등의 Class Verification API Spring의 @Autorwired와 같은 DL, DI 기능 (: processInject(), inject() Method ) 내부적으로 Spring의 Reflectio..
해당 예제는 01. RESTful 개념과 사전 지식 에서 정리하였던 일부 내용들을 복습하는 용도로 작성된 글입니다. Spring RESTful API 개발환경 구성하기 프로젝트 생성 https://start.spring.io/ 기호에 맞게 Maven, Gradle, Java 버전 등을 선택하시면 됩니다. 사용되는 의존성은 Spring Web Lombok H2 Database Validation Spring Data JDBC입니다. 해당 프로젝트는 단일 Entity를 가지는 단순한 RESTful API 예제입니다. HATEOAS를 만족시키진 않았습니다. 해당 내용과 관련해서 인프런에 백기선 님의 RESTful 강의를 수강해보시길 추천드립니다. Entity, DTO 만들기 @Builder @Getter pu..
enum 정의하는 방법 해당 타입은 JDK 5에 추가되었으며, 상수들을 정의, 열거하는 데 사용되는 키워드이다. 기존에 사용되던 final static keyword를 사용한 변수 선언 등을 대체하였다. 해당 키워드의 특징으로는 모든 Java의 enum들은 암시적으로 java.lang.Enum Class를 확장한다. 정의된 상수 하나당 하나의 인스턴스가 생성된다. public static final type instance 데이터를 비교할 때 실제 값과 함께 타입을 체크한다. 메서드와 필드를 추가하고 인터페이스를 구현할 수 있다. 다른 Primitive Type Variable 과 같이 Switch Statement에서 사용할 수 있다. 정의 시 Class Level에서 사용된다. 정도가 있다. enum..
RESTful Tutorial!이 글은 RESTful에 대하여서 완벽하게 정리하는 것이 아닌 기본적인 내용을 학습하도록 작성한 글입니다. 세세한 내용에 대해서는 각 목차를 Keyword로 검색하시길 바랍니다. 해당 예제들은 다음 글에서 업로드할 예정입니다. Notion에서 작성하고 옮겨오다 보니 몇몇 양식이 깨져있을 수 있습니다. 그렇기에 Notion Link도 남겨드립니다. www.notion.so/Week_02-01-REST-8d07b91683d548c2aa4e20f2f404eeef RESTful을 위한 사전 지식HTTP (Hypertext Transfer Protocol)Web client와 Server 간의 데이터 전송을 위해 사용되는 Application Layer Protocol입니다...
G1 GC 구조 개념 구조 (모든 영역을 블록으로 표기하지 않음) G1 GC는 여러 Background Thread를 이용하여 Heap 크기에 따라 1MB~32MB로 분할된 Region들을 지정된 Pointer를 통해 Scan 하고 제일 많은 수집 대상이 존재하는 Region에 대해 이름을 지정한다. 이름이 지정된 영역은 GC의 대상이 된다. Young Generation Region (Non-Contiguous Region) Heap 메모리 공간에서 비연속적으로 존재하는 Young Object의 주거지를 의미한다. 해당 영역의 크기는 Heap 전체 크기의 5~60% 까지를 차지할 수 있다. G1 GC 특징 G1 GC는 Scan을 하는 도중에 해당 Region에 대한 Compacting도 수행한다. Re..
- Total
- Today
- Yesterday
- 게으른개발자컨퍼런스
- cglib
- JVM
- spring AOP
- 게으른 개발자 컨퍼런스
- URN
- Distributed Cache
- mybatis
- HTTP
- 소비자 관점의 api 설계 패턴과 사례 훑어보기
- URI
- JPA
- java
- Url
- RESTful
- Global Cache
- 근황
- Local Cache
- THP
- rabbitmq
- JDK Dynamic Proxy
- RPC
- configuration
- lambda
- Cache Design
- spring
- AMQP
- hypermedia
- Switch
- Data Locality
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |