
개발 중 어노테이션을 사용해서 AOP를 적용해보려다 어노테이션에 대해 알고 가는 게 좋을 것 같아 스터디한 내용이다. 어디에 사용할 수 있는지? Class instance creation expression new @Interned MyObject(); Type cast myString = (@NonNull String) str; implements clause class UnmodifiableList implements @Readonly Llist { ... } Thrown exception declaration void monitorTemperature() throws @Critical TemperatureException { ... } @interface는 자동으로 Annotation 클래스를 상속..
스트림 API는 다량의 데이터 처리 작업을 위해 Java 8 에 추가되었다. 스트림이 제공하는 추상 개념 중 핵심은 두 가지다. stream은 데이터 원소의 유한 혹은 무한 sequence를 의미한다. stream pipeline은 이 원소들로 수행하는 연산 단계를 표현하는 개념이다. 스트림의 원소들은 어디로부터든 올 수 있다. collection, array, file, regex pattern matcher, random generator, 다른 stream이 있다. 스트림 파이프라인 스트림 파이프라인은 source stream ( -> intermediate operation) -> terminal operation으로 이루어진다. 각 중간 연산은 스트림을 변환한다. 각 원소에 함수를 적용하거나 특..
함수형 인터페이스란? Java 8에 생긴 개념으로, 1개의 추상 메소드를 갖고 있는 인터페이스를 말한다.@FunctionalInterface public interface FunctionalInterface { public abstract void doSomething(String text); } java.util.function 에 다양한 용도의 표준 함수형 인터페이스가 있다. 즉, 직접 구현하지 말고 있는 거 쓰라는 말이다. 총 43개의 인터페이스가 있다. 기본 인터페이스 6개만 살펴보자. Operator : 인수가 1개인 UnaryOperator와 2개인 BinaryOperator로 나뉘며, 반환값과 인수의 타입이 같은 함수를 뜻한다. ex) String::toLowerCase, BigInteger..
Optional 사용법 Optional의 의도는 라이브러리 메서드가 반환할 결과값이 '없음'을 명백하게 표현해야 하지만 null을 반환하면 에러가 발생할 수 있는 곳에 반환하는 타입 isPresent() - get() 대신 orElse()/orElseGet()/orElseThrow() { Optional t = ..; if(t.isPresent()) return t.get(); else return null; } 보다 { return t.orElse(null); } orElse(new ...) 대신 orElseGet(() → new ...)대부분의 경우 method1(method2()) 가 실행되면 method2()는 method1()보다 먼저, 언제나 실행된다 orElse 는 Optional에 값의 유..
final 키워드 final은 entity가 오로지 한 번 할당될 수 있음을 의미 final 변수 : 한 번만 초기화 가능 final 메서드 : 해당 메서드를 오버라이드하거나 숨길 수 없음 final 클래스 : 상속할 수 없음. 상속 계층 구조에서 '마지막' 클래스 보안과 효율성을 위해 자바 표준 라이브러리 클래스에서 사용 대표적으로 java.lang.System, java.lang.String 이 있다 final 멤버 변수가 반드시 상수는 아니다 final의 의미가 '상수'가 아니라 '한 번만 초기화 가능하다'이기 때문 private 메서드와 final 클래스의 모든 메서드는 명시하지 않아도 final처럼 동작 오버라이드가 불가능하기 때문 static 키워드 static은 해당 데이터의 메모리 할당을 ..

volatile Main Memory에 저장되는 변수. read, write 할 때마다 메인 메모리에 접근한다 여러 thread 가 동시에 read/write 하는 경우 각 CPU의 CPU cache의 데이터를 보고 실행된다. 이 과정에서 데이터가 일치하지 않을 수 있다 그러나 여러 thread가 write를 하는 경우 volatile 키워드를 사용하더라도 불일치가 발생할 수 있다. thread 1에서 공유되는 변수인 counter 변수 0을 CPU 1의 CPU 레지스터로 읽고, 동시에 thread 2가 counter 변수 1을 CPU 2의 CPU 레지스터에 읽는다 두 스레드가 메인 메모리로부터 counter 변수 값을 읽는다 이제 두 스레드가 counter 값을 1로 증가시킨다. 실제로는 값이 2가 되..
💡 Heap 영역의 오브젝트 중 stack 에서 도달 불가능한 (Unreachable) 오브젝트들은 가비지 컬렉션의 대상이 된다. Garbage Collection 과정은 Mark and Sweep 이라고도 한다. JVM의 Garbage Collector 가 스택의 모든 변수를 스캔하면서 각각 어떤 오브젝트를 레퍼런스 하고 있는지 찾는과정이 Mark 다. Reachable 오브젝트가 레퍼런스하고 있는 오브젝트 또한 marking 한다. 첫번째 단계인 marking 작업을 위해 모든 스레드는 중단되는데 이를 stop the world 라고 부르기도 한다. 가비지 컬렉션 프로세스 새로운 오브젝트는 Eden 영역에 할당된다. 두개의 Survivor Space 는 비워진 상태로 시작한다. Eden 영역이 가득차..
DAO (Data Access Object) DB 접근하는 객체 Persistence Layer(DB에 data를 CRUD하는 계층) repository layer DTO (Data Transfer Object) 데이터 계층 간 데이터 교환하는 Java Bean Request, Response 에 사용되는 객체 Presentation model VO (Value Object) DTO 와 유사. 단 read-only Entity domain package 실제 DB 테이블과 매칭될 클래스 최대한 외부에서 Entity 클래스의 getter를 사용하지 않도록 클래스 안에서 필요한 로직 method를 구현한다 단, Domain logic만 가지고 있어야 하고 Presentation logic은 가지고 있어선 안..
- Total
- Today
- Yesterday
- querydsl
- 이펙티브자바
- 암호화
- effective-java
- SQL 전문가 가이드
- 이벤트스토밍
- SHA
- point
- 실용주의
- ruby
- DesignSystem
- annotation
- IntelliJ
- WebClient
- sort algorithm
- fetchResults
- 코테 log
- gitignore
- 사고..
- Spring-Boot
- ASCII
- ActiveAdmin
- Lombok
- Generic
- Encoding
- aws
- Git
- TroubleShooting
- 메모리 릭
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |