인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 았는 타입 역할을 합니다. 달리 말해, 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에게 말해주는 것입니다. 인터페이스는 오직 이 용도로만 사용해야 합니다. 인터페이스의 잘못된 예 🧨 예제 코드 인터페이스에는 메서드뿐만 아니라 상수도 작성할 수 있기 때문에 메서드 없이 상수만 선언하는 상수 인터페이스를 만들 수 있습니다. public interface PhysicalConstants { static final double AVOGADROS_NUMBER = 6.022_140_857e23; static final double BOLTZMAN_CONSTANT ..
인터페이스는 구현하는 쪽을 생각해 설계하라 Java 8버전 부터는 인터페이스에도 default 메서드를 추가할 수 있습니다. 해당 default 메서드를 사용하여 인터페이스 내에도 로직을 직접 추가할 수 있게 되었습니다. default 메서드를 선언하면, 구현한 모든 클래스에서 default 메서드가 쓰이게 됩니다. 💡예제 코드 Phone 인터페이스와 이를 구현한 IPhone 클래스가 있습니다. 그런데 기존에는 해당 인터페이스에 call 메서드만 있었는데 기능 추가를 위해 videoCall 메서드가 추가되야하는 상황이 되었습니다. 그래서 이 메서드를 인터페이스에 추가하면 해당 인터페이스를 구현하는 모든 하위 클래스에서 메서드를 구현하지 않으면 컴파일 에러가 발생합니다. 그렇기 때문에 모든 하위 클래스에 ..
추상 클래스보다는 인터페이스를 우선하라 Java 8버전부터는 인터페이스에도 default 메서드 및 static 메서드를 제공하고 있습니다. default 메서드와 static 메서드는 body를 가질 수 있으며 static 메서드의 경우 인터페이스명.메서드명으로 호출할 수 있습니다. 인터페이스에 정의되는 메서드 중 구현 방법이 명확하고 공통적인 경우라면 default 메서드로 만들게되면 하위 클래스에서 각각 재정의할 필요가 없어집니다. 💡예제 코드 아래 예제 코드에서 static 메서드는 구현 클래스에서 재정의할 수 없으며 호출시 인터페이스명.메서드명으로 호출할 수 있습니다. public interface Calculator { default void add(int x, int y) { System.o..
상속을 고려해 설계하고 문서화하라. 그렇지 않다면 상속을 금지하라 상속을 염려해두지 않은 외부 클래스(프로그래머의 통제권 밖에 있어 변경시점을 알 수 없는 클래스)를 상속할 경우 여러 문제가 발생할 수 있습니다. 그렇기 때문에 상속용 클래스를 설계할 때는 문서화가 중요합니다. 상속을 고려한 설계와 문서 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용되는지 문서로 남겨야 합니다. 호출된 메서드가 재정의 가능한 메서드라면 즉, 하위 클래스의 메서드라면 그 사실을 호출한 메서드의 API에 설명을 적시해야 합니다. 더불어 어떤 순서로 호출하는지, 각각의 호출 결과가 어떻게 이어지는지, 처리는 어떻게 되는지 등 모든 상황을 적시해야 합니다. 여기서 재정의 가능 메서드란 public, prote..
- Total
- Today
- Yesterday
- redis 대기열 구현
- @ControllerAdvice
- service based architecture
- transactional outbox pattern
- spring boot excel download oom
- spring boot excel download paging
- 공간 기반 아키텍처
- microkernel architecture
- spring boot redisson sorted set
- 레이어드 아키텍처란
- spring boot redis 대기열 구현
- 자바 백엔드 개발자 추천 도서
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- redis sorted set으로 대기열 구현
- spring boot redisson 분산락 구현
- redis sorted set
- pipeline architecture
- spring boot redisson destributed lock
- java ThreadLocal
- 서비스 기반 아키텍처
- 람다 표현식
- spring boot 엑셀 다운로드
- JDK Dynamic Proxy와 CGLIB의 차이
- java userThread와 DaemonThread
- space based architecture
- 트랜잭셔널 아웃박스 패턴 스프링부트
- polling publisher spring boot
- spring boot poi excel download
- transactional outbox pattern spring boot
- pipe and filter architecture
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |