불필요한 객체 생성을 피하라 여기서 말하는 불필요한 객체란 무엇일까? 아래 예제를 보면 String 타입의 변수 a, b, c는 모두 "Hello World"라는 문자열을 가지게 됩니다. 하지만 이 세 문자열이 참조하는 주소값은 모두 다릅니다. 동일한 문자열을 이처럼 여러개로 중복 생성하는 것은 메모리 낭비입니다. String Constant Pool에 대하여 String a = new String("Hello World"); String b = new String("Hello World"); String c = new String("Hello World"); 💡그럼 어떻게 사용해야 불필요한 객체 생성을 피할 수 있을까요? 아래 예제를 보면 리터럴로 선언을 해 놓으면 컴파일 시점에서 상수풀에 해당 Str..
자원을 직접 명시하지 말고 의존 객체 주입을 사용하라. 하나의 클래스에서 다른 자원에 의존하는 경우가 많습니다. 또한 해당 클래스가 유틸리티 클래스라면 싱글톤이나 정적 클래스로 사용되는 경우가 많습니다. 💡 예제 코드 // 상품 클래스 @Data public class Product { private String name; private int price; public boolean isPayable(int money) { return price
인스턴스화를 막으려거든 private 생성자를 사용하라. static 메서드와 static 필드만을 담은 유틸리티 클래스는 객체 지향과 거리가 멀지만, 쓰임새가 있습니다. 하지만 해당 클래스는 abstract 클래스로 만들어서 상속 받아서 인스턴스를 만들 수 있기 때문에 인스턴스를 만드는 것을 막을 수 업습니다. 아무런 생성자를 만들지 않는 경우에는 컴파일러가 기본적으로 매개변수가 없는 public 생성자를 만들어 주기 때문에 그런 경우에는인스턴스를 만들 수 있습니다. 따라서 인스턴스화를 막기 위해서는 명시적으로 private 생성자를 추가해야 합니다. 인스턴스화 막기 💡 추상 클래스로 만드는 것은 인스턴스화를 막을 수 없습니다. 하위 클래스를 만들어 인스턴스화를 하면 그만입니다. 추상 클래스를 본 사용..
이전 내용 앞에서 정적 팩토리 메서드를 사용하여 객체를 생성할 때 매개변수가 많을수록 적절히 대응하기 어렵다는 점을 느끼게 되었습니다. 책에서는 여러 매개변수를 받는 생성자를 만들어 놓았지만 저는 불편하여 빌더패턴을 사용했습니다. 점층적 생성자 패턴 💡 예제 코드 아래 예제코드처럼 점층적 생성자 패턴을 사용할 수 있지만, 매개변수가 많아지면 생성자를 그만큼 많이 만들어줘야하고 클라이언트에서 객체를 생성하는 시점에 값의 의미가 무엇인지 헷갈릴 것이고, 매개변수가 몇 개인지도 주의해서 봐야할 것입니다. public class User { private int id; private String name; private int age; private String phoneNumber; private String..
- Total
- Today
- Yesterday
- spring boot 엑셀 다운로드
- redis sorted set
- spring boot redisson destributed lock
- spring boot redis 대기열 구현
- redis sorted set으로 대기열 구현
- transactional outbox pattern
- spring boot redisson 분산락 구현
- spring boot poi excel download
- 트랜잭셔널 아웃박스 패턴 스프링부트
- spring boot redisson sorted set
- redis 대기열 구현
- service based architecture
- 공간 기반 아키텍처
- @ControllerAdvice
- pipe and filter architecture
- spring boot excel download paging
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- pipeline architecture
- microkernel architecture
- transactional outbox pattern spring boot
- polling publisher spring boot
- 서비스 기반 아키텍처
- spring boot excel download oom
- 레이어드 아키텍처란
- JDK Dynamic Proxy와 CGLIB의 차이
- 람다 표현식
- java ThreadLocal
- space based architecture
- 자바 백엔드 개발자 추천 도서
- java userThread와 DaemonThread
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |