일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- FCM
- Service Locator 패턴
- Connection Pool
- 트랜잭션
- deleteById
- multi module
- java
- springboot
- @ControllerAdvice
- Effective Java
- 이펙티브 자바
- @Valid
- db
- Firebase
- Proxy Patter
- Item04
- 플라이웨이트
- NotEmpty
- restTemplate
- 디자인 패턴
- Spring Boot
- NotBlank
- @MockBean
- @SpyBean
- Effetive Java
- JPA
- 데이터베이스
- SQL 삽입 공격
- Web
- Service Locator
- Today
- Total
목록분류 전체보기 (64)
NoTimeForDawdling
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dVZZVw/btqXgpCPL9c/ERjL6QqaNki71ZKLPkTxak/img.png)
불변 리스트를 생성하는 방법을 알아보기에 앞서 불변 객체가 주는 장점을 알아보겠습니다. Immutable Object 장점 불변 객체는 생성된 시점의 상태를 파괴될 때까지 간직하고 있으므로 Thread Safe 하여 따로 동기화할 필요가 없습니다. 불변 객체는 어떤 스레드도 다른 스레드에게 영향을 줄 수 없으므로 안심하고 공유할 수 있습니다. 불변 객체는 그 자체로 *실패 원자성을 제공합니다. 즉, 상태가 절대 변하지 않으므로 잠깐이라도 불일치 상태에 빠질 가능성이 없습니다. 실패 원자성: 메서드에서 예외가 발생한 후에도 그 객체는 여전히(메서드 호출 전과 똑같은) 유효한 상태여야 한다. Immutable ArrayList 만드는 방법 1. Collections.unmodifiableList() 첫 번째..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bpELxy/btqW1tl3MQk/yxIcBZjQzF3zIzl4zxzMRK/img.png)
코드를 구현하던 중 Arrays.asList()로 생성한 List객체에 새로운 값을 추가할 때 UnsupportedOperationException이 발생했습니다. 그래서 Arrays.asList()에 대해 알아보려 합니다. Arrays.asList() Arrays.asList()는 AbstracList를 상속받은 private static class인 ArraysList를 반환합니다. 이 클래스는 set(), get(), contains() 메서드를 제공하고 있습니다. 하지만 add 메서드 호출 시에는 AbstractList가 제공하는 메서드를 호출하여 UnsupportedOperationException이 발생하게 됩니다. 즉, asList()로 생성한 객체의 구조적 변경 시 UnsupportedOp..
Java에 애플리케이션의 성능 향상을 위한 Cache로직이 종종 사용됩니다. 실제로 Integer 클래스는 내부에서 Integer 사용을 위해 IntegerCache를 관리합니다. IntegerCache 정적 클래스 public final class Integer extends Number implements Comparable { ... private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be configured by property int h = 127; String integerCacheHigh..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c4mJl7/btqW4hK9rcN/Bn2q79ksiAxSof74i99ADk/img.png)
JVM이란? 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 합니다. 자바 가상머신으로 자바와 운영체제 사이에서 중계자 역할을 합니다. 자바가 운영체제 종류에 영향받지 않고 돌아갈 수 있도록 합니다. 메모리 관리를 자동으로 해줍니다.(GC) JVM 구성 JVM은 크게 4가지로 구분됩니다. Class Loader Execution Engine JVM Memory (Runtime Data Area) Native 1. Class Loader Class Loader는 .class 파일(바이트 코드)을 로드하는데 사용되는 하위 시스템입니다. Class Loader는 크게 세 가지 기능을 수행합니다. Loading Lo..
들어가기 C나 C++에서는 OS레벨에서 메모리에 직접 접근하기 때문에 메모리를 명시적으로 해제해줘야 합니다. 그렇지 않으면 memory leak(누수현상)이 발생하게 되며, 현재 실행 중인 프로그램에서 memory leak이 발생하면 다른 프로그램에도 영향을 끼칠 수 있습니다. Java는 OS의 메모리 영역에 직접적으로 접근하지 않고, JVM이라는 가상 머신을 이용해서 간접적으로 접근합니다. JVM은 오브젝트가 필요해지지 않는 시점에서 알아서 메모리를 확보합니다. Java는 가상머신을 사용하여 운영체제로부터 독립적입니다. 그렇기 때문에 OS레벨에서의 memory leak는 불가능하게 된다는 장점이 있습니다. Java가 메모리 누수현상을 방지하는 또 다른 방법이 Garbage Collector 입니다. G..
Spring은 기본적으로 빈 주입을 설정을 자동으로 해줍니다. 하지만 동일한 타입을 가진 빈 객체가 두개 이상이라면 어떤 빈을 주입해야 할 지 알 수 없기 때문에 NoUniqueBeanDefinitionException을 발생시킵니다. @Qualifier @Qualifier 어노테이션은 주입할 빈 객체를 선택할 수 있도록 도와줍니다. 코드 예제를 통해 확인해 보겠습니다. MainRestTemplateConfig.class @Configuration public class MainRestTemplateConfig { private static final int READ_TIME = 3000; private static final int CONNECT_TIME = 3000; @Bean(name = "main..
Spring Boot를 사용하여 외부의 특정 값들을 주입받아야 할 때가 있다. 예로 API를 사용하기 위한 API key나 token 값이 될 수 있습니다. 이런 값들은 application.properties나 application.**yml**과 같은 파일에 적어두고 사용할 수 있고, .jar 파일을 실행하기 위한 커맨드에 직접 값을 넘겨주기도 합니다. 여기서는 외부 파일(.properties, .yml)에 있는 값들을 소스 코드에 주입하는 방법을 알아보겠습니다. properties -> yml 을 사용했을 시 이점 properties 값 주입 방법을 알아보기에 앞서 properties 대신 yml이 주는 이점을 알아보겠습니다. 1. 가독성 - yml은 계층 구조로 표현합니다. 그렇기 때문에 prop..
전략 패턴(Strategy Pattern)이란? 전략 패턴이란 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화하는 인터페이스를 정의하여 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법입니다. 즉, 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로도 행위의 수정이 가능하도록 만든 패턴이라고 볼 수 있습니다. 전략 패턴 예제(계산기) 계산을 하는 방식은 +, -, *, / 총 4가지 방식이 있습니다. 유사한 행위들을 캡슐화하는 인터페이스를 정의하겠습니다. public interface OperationStrategy { int ..