
변경 가능성을 최소화하라 불변 클래스란 간단히 말해 해당 인스턴스의 내부 값을 수정할 수 없는 클래스를 말합니다. 사용할려는 객체가 캡슐화가 잘 되어 있을수록 서비스단에서 해당 객체에 대한 위/변조를 덜 걱정하게 되고 오류 발생 여지도 낮아집니다. 또한 불변 클래스에 저장된 정보는 객체가 파괴될때까지 변경되지 않습니다. 💡예제 코드 각각 다른 쓰레드에서 병렬적으로 처리가 되는데 2번째 쓰레드에서 Point의 값을 수정하니 다른 쓰레드에도 영향을 준 것을 확인할 수 있습니다. @Setter @Getter @ToString @AllArgsConstructor public class Point { public double x; public double y; } public class EffectiveJavaA..
public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 아래 클래스는 위치 정보를 가지는 Point 클래스이며, 멤버 변수의 접근제한자는 public으로 어디서든 접근할 수 있습니다. 그렇기 때문에 정보 은닉(캡슐화)을 할 수 없습니다. public class Point { public double x; public double y; } 데이터 캡슐화 접근 제한자를 public -> private로 변경한 후 메서드를 통해 해당 필드에 접근할 수 있도록 변경합니다. 이처럼 public 클래스에서 필드를 private로 선언한 뒤 getter/setter를 통해 캡슐화를 할 수 있습니다. public class Point { private double x; private double y..
클래스와 멤버의 접근 권한을 최소화하라 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데아터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐입니다. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리합니다. 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개입하지 않습니다. 이렇게 구현과 API가 분리되어 있다면 사용자 입장에서는 API만 신경쓰면되고 그 결과에 집중하면 됩니다. 이런 개념을 정보 은닉과 캡슐화라고 합니다. 정보 은닉의 장점 시스템 개발 속도를 높입니다. 여러 컴포넌트를 병렬적으로 개발할 수 있기 때문입니다. 시스템 관리 비용을 낮춥니다. 각 컴포넌트를 빨리 파악하여 디버깅이 가능..
Comparable을 구현할지 고려하라 객체간 정렬이 필요한 경우 사용할 수 있는 인터페이스는 Comparator, Comparable이 있습니다. 여기서 Comparable 인터페이스는 compareTo라는 하나의 메서드를 정의하고 있으며, 이 메서드의 성격은 Object의 equals 메서드와 비슷한데, 동치성 뿐만 아니라 객체의 순서까지 비교가능하고 제네릭하다는 차이점이 있습니다. Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 의미합니다. 알파벳, 숫자, 연대 같이 순서가 명확한 값 클래스를 작성한다면 반드시 Comparable 인터페이스를 구현하는게 좋습니다. compareTo 메서드 규약 해당 객체와 주어진(매개변수) 객체의 순서를 비교합니다. 해당 객..
- Total
- Today
- Yesterday
- transactional outbox pattern spring boot
- service based architecture
- spring boot redis 대기열 구현
- 공간 기반 아키텍처
- 트랜잭셔널 아웃박스 패턴 스프링부트
- redis 대기열 구현
- 람다 표현식
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- space based architecture
- 서비스 기반 아키텍처
- redis sorted set
- spring boot redisson 분산락 구현
- pipeline architecture
- spring boot 엑셀 다운로드
- spring boot excel download paging
- polling publisher spring boot
- spring boot poi excel download
- microkernel architecture
- transactional outbox pattern
- JDK Dynamic Proxy와 CGLIB의 차이
- @ControllerAdvice
- spring boot redisson sorted set
- 레이어드 아키텍처란
- redis sorted set으로 대기열 구현
- pipe and filter architecture
- java ThreadLocal
- java userThread와 DaemonThread
- spring boot redisson destributed lock
- spring boot excel download oom
- 자바 백엔드 개발자 추천 도서
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |