상속보다는 컴포지션을 사용하라 여기서 말하는 상속은 클래스가 다른 클래스를 확장하는 상속을 말합니다. 그렇기 때문에 클래스가 인터페이스를 구현하거나 인터페이스가 다른 인터페이스를 확장하는 상속과는 무관합니다. 상속을 사용하게 되면 메서드 호출과 달리 캡슐화를 깨뜨립니다. 다르게 말하면 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있으며, 상위 클래스는 릴리즈마다 내부 구현이 달라질 수 있어서 그 여파로 하위 클래스가 오작동할 수 있습니다. 컴포지션이란 다른 클래스에서 상위 클래스를 private 필드로 작성해 참조하도록 하여 기존 상위 클래스가 다른 클래스의 구성 요소로 쓰인다는 의미입니다. 🧨 문제가 발생하는 예제 아래 예제를 실행 했을 때 결과는 3이 나올것 같지만 실..
변경 가능성을 최소화하라 불변 클래스란 간단히 말해 해당 인스턴스의 내부 값을 수정할 수 없는 클래스를 말합니다. 사용할려는 객체가 캡슐화가 잘 되어 있을수록 서비스단에서 해당 객체에 대한 위/변조를 덜 걱정하게 되고 오류 발생 여지도 낮아집니다. 또한 불변 클래스에 저장된 정보는 객체가 파괴될때까지 변경되지 않습니다. 💡예제 코드 각각 다른 쓰레드에서 병렬적으로 처리가 되는데 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만 신경쓰면되고 그 결과에 집중하면 됩니다. 이런 개념을 정보 은닉과 캡슐화라고 합니다. 정보 은닉의 장점 시스템 개발 속도를 높입니다. 여러 컴포넌트를 병렬적으로 개발할 수 있기 때문입니다. 시스템 관리 비용을 낮춥니다. 각 컴포넌트를 빨리 파악하여 디버깅이 가능..
- Total
- Today
- Yesterday
- redis sorted set
- 공간 기반 아키텍처
- pipe and filter architecture
- microkernel architecture
- 트랜잭셔널 아웃박스 패턴 스프링부트
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- pipeline architecture
- java userThread와 DaemonThread
- spring boot poi excel download
- spring boot 엑셀 다운로드
- service based architecture
- spring boot redis 대기열 구현
- spring boot redisson 분산락 구현
- spring boot redisson destributed lock
- redis sorted set으로 대기열 구현
- java ThreadLocal
- @ControllerAdvice
- 레이어드 아키텍처란
- spring boot excel download oom
- JDK Dynamic Proxy와 CGLIB의 차이
- transactional outbox pattern spring boot
- space based architecture
- spring boot excel download paging
- spring boot redisson sorted set
- 람다 표현식
- transactional outbox pattern
- 자바 백엔드 개발자 추천 도서
- redis 대기열 구현
- 서비스 기반 아키텍처
- polling publisher spring boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |