728x90
반응형

전체 글 168

[Effective Java] 아이템 65. 리플렉션보다는 인터페이스를 사용하라.

🎯 아이템 65. 리플렉션보다는 인터페이스를 사용하라. 리플렉션은 복잡한 특수 시스템을 개발할 때 필요한 강력한 기능이지만, 단점도 많다. 컴파일타임에는 알 수 없는 클래스를 사용하는 프로그램을 작성한다면 리플렉션을 사용해야 할 것이다. 단, 되도록 객체 생성에만 사용하고, 생성한 객체를 이용할 때는 적절한 인터페이스나 컴파일타임에 알 수 있는 상위 클래스로 형변환해 사용해야 한다. @Before(VO_SETTING_EXPRESSION) public void setVO(JoinPoint joinPoint) { Object[] objects = joinPoint.getArgs(); if(SecurityContextHolder.getContext().getAuthentication()!= null) { In..

Java 2023.03.29

[Effective Java] 아이템 64. 객체는 인터페이스를 사용해 참조하라.

🎯 아이템 64. 객체는 인터페이스를 사용해 참조하라. 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. /* 할인 정책 인터페이스 */ public interface DiscountPolicy { int discount(Member member, int price); } /* 정액 할인 클래스 */ public class FixDiscountPolicy implements DiscountPolicy{ private int discountFixAmount = 1000; // 1000원 할인 @Override public int discount(Member member, int price) { ... } } /* 정률 할인 클래스 */ public cl..

Java 2023.03.29

[Spring] Springboot와 Redis 연동

Springboot와 Redis 연동 Redis란? https://redis.io/docs/ Redis는 오픈 소스로 제공되는 인메모리 데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커 및 스트리밍 엔진으로 사용됩니다. Redis는 인메모리 데이터 세트와 함께 최상의 성능을 제공합니다. 사용 사례에 따라 Redis는 데이터 세트를 주기적으로 디스크에 덤프하거나 각 명령을 디스크 기반 로그에 추가하여 데이터를 영구적으로 저장할 수 있습니다. 단순히 기능이 풍부하고 네트워크 연결된 인메모리 캐시만 필요한 경우 영구 저장소를 비활성화할 수도 있습니다. Redis는 비동기 복제를 지원하며, 빠른 비동기식 동기화와 네트워크 분리 상태에서의 자동 재연결 및 부분 재동기화를 지원합니다. Redis를 사용하는..

Spring 2023.03.28

[Effective Java] 아이템 63. 문자열 연결은 느리니 주의하라.

🎯 아이템 63. 문자열 연결은 느리니 주의하라. 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. 문자열 연결을 잘못 사용한 예 - 느리다! public String statement(){ String result = ""; for(int i = 0; i < numItems(); i++) result += lineForItem(i); return result; } 품목이 많을 경우 이 메서드는 심각하게 느려질 수 있다. 성능을 포기하고 싶지 않다면 String 대신 StringBuilder를 사용하자. StringBuilder를 사용하면 문자열 연결 성능이 크게 개선된다. public String statement2(){ StringBuilder b = new StringBuilder..

Java 2023.03.28

[Effective Java] 아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라.

🎯 아이템 62. 다른 타입이 적절하다면 문자열 사용을 피하라. 1️⃣ 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 받는 데이터가 수치형이라면 int, float, BigInteger 등 적당한 수치 타입으로 변한해야한다. &#39;예/아니오&#39; 질문의 답이라면 적절한 열거 타입이나 boolean으로 변환해야 한다. 2️⃣ 문자열은 열거 타입을 대신하기에 적합하지 않다. 3️⃣ 문자열은 혼합 타입을 대신하기에 적합하지 않다. 혼합 타입을 문자열로 처리한 부적절한 예 String compoundKey = className + "#" + i.next(); 4️⃣ 문자열은 권한을 표현하기에 적합하지 않다. @Entity public class Member { @Id private Long id; ..

Java 2023.03.28

[자료구조] B-Tree & B+Tree

🎯 B-Tree & B+Tree B-Tree와 B+Tree는 대용량의 데이터를 관리하기 위한 자료구조로, 데이터베이스나 파일 시스템에서 주로 사용됩니다. B-Tree란? 자식 노드의 개수가 일정하게 유지되는 트리입니다. 이진 탐색 트리의 일반화된 형태로, 노드당 키값이 여러개 저장됩니다. B-Tree는 매우 균형잡힌 트리로, 트리의 높이가 작아 검색 시간이 빠릅니다. B-Tree는 블록 단위로 데이터를 저장하는데, 이는 대용량 데이터 처리에 용이합니다. B+Tree란? B-Tree의 변형으로, 내부 노드에는 키값만 저장하고, 리프 노드에만 데이터를 저장합니다. 이로 인해 리프 노드의 개수가 많아지며, 대용량 데이터를 처리하는 데 더욱 효과적입니다. 또한, 범위 검색에 용이하며, 인덱스를 이용한 검색에도 ..

자료구조 2023.03.27
728x90
반응형