지역변수의 범위를 최소화하라 지역변수의 유효범위를 최대한 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아집니다. 💡 가장 처음 쓰일때 선언합니다. 지역변수를 미리 선언하고 나중에 할당하면 코드가 지저분해지고 가독성이 떨어집니다. 또한 변수를 실제 사용하는 시점에서 타입과 초기값이 기억나지 않을 수 있습니다. 변수의 범위를 제대로 제한하지 않는다면 이미 사용한 뒤에도 GC가 수거하지 않고 힙 메모리에 여전히 남아있을 수 있습니다. 💡 모든 지역변수는 선언과 동시에 초기화합니다. 단 초기화에 필요한 정보가 충분하지 않다면 정보가 충분해질때까지 선언을 미뤄야 합니다. 하지만 try-catch 문에서는 예외입니다. 변수를 초기화하는 과정에서 Checked Exception이 발생할 가능성이 있다면..
옵셔널 반환은 신중히 하라 자바 8이전에는 메서드에서 반환할 수 있는 값이 없는 경우 두 가지를 취할 수 있었습니다. 하지만 각각의 단점이 존재합니다. 1. 예외를 던집니다. 단점 1 - 예외는 반드시 예외적인 상황에서만 사용해야 합니다. 단점 2 - 예외는 실행 스택을 추적을 캡처하기 때문에 비용이 비쌉니다. 2. 반환 타입이 객체인 경우 null 반환 단점 1 - 클라이언트 코드에서는 항상 null 체크 로직을 추가해야하며 그렇지 않은 경우 NPE가 발생합니다. 💡 Optional의 등장 Optional이란, 값이 있을 수도 있고 없을 수도 있는 객체입니다. Optional은 원소 하나를 가지는 불변 컬렉션입니다. 자바 8이전의 코드보다 null-safe한 로직을 처리할 수 있게끔 해줍니다. Opti..
null이 아닌, 빈 컬렉션이나 배열을 반환하라 클라이언트에서 컬렉션을 반환하는 메서드나, 배열을 반환하는 메서드를 호출했을 경우 만약 null을 반환한다면 클라이언트쪽에서 null체크를 감지하는 방어 코드를 항상 작성해주어야 합니다. 💡 예제 코드 아래 예제에서 getMembers 메서드는 컬렉션이 비어있는 경우 null을 반환하는 메서드입니다. 이 메서드가 어떤 문제를 발생시킬 수 있을까요? 답은 main 메서드에서 getMembers 메서드를 호출할 때 null 검사를 하는 방어 로직을 작성해야 합니다. 이처럼 방어 코드가 작성되지 않았을 경우 NPE가 발생하게 됩니다. public class Member { private static List members = new ArrayList(); pri..
가변인수는 신중히 사용하라 💡 가변인수란? 매개변수를 동적으로 받을 수 있는 방법이며, 자바 5부터 지원되기 시작했습니다. 매개변수에 ...을 사용하여 가변인수를 설정할 수 있고, 0개 이상의 인수를 받을 수 있습니다. 가변인수 메서드를 호출하면 가장 먼저 인수의 개수와 길이가 같은 배열이 만들어지고 생성된 배열에 인수들을 저장하여 메서드에 전달하며, 해당 메서드에서는 생성된 배열을 사용합니다. 이처럼 메서드를 호출할 때마다 새로운 배열을 생성해서 전달해주는데, 이 부분도 결국 비용이고 낭비일 수도 있습니다. public class Example { public static void main(String[] args) { varargs("H", "E", "L", "L", "O"); } public sta..
- Total
- Today
- Yesterday
- spring boot excel download paging
- java userThread와 DaemonThread
- spring boot redisson 분산락 구현
- microkernel architecture
- 공간 기반 아키텍처
- redis sorted set으로 대기열 구현
- @ControllerAdvice
- spring boot redisson sorted set
- 트랜잭셔널 아웃박스 패턴 스프링부트
- space based architecture
- polling publisher spring boot
- pipe and filter architecture
- service based architecture
- spring boot redisson destributed lock
- spring boot poi excel download
- transactional outbox pattern spring boot
- JDK Dynamic Proxy와 CGLIB의 차이
- spring boot excel download oom
- 서비스 기반 아키텍처
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- redis sorted set
- redis 대기열 구현
- pipeline architecture
- 람다 표현식
- 레이어드 아키텍처란
- transactional outbox pattern
- 자바 백엔드 개발자 추천 도서
- spring boot redis 대기열 구현
- spring boot 엑셀 다운로드
- java ThreadLocal
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |