13 Apr 2023 EffectiveJava
인터페이스는 자신이 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 달리말해, 클래스가 어떤 인터페이스를 구현한다는것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는것이다.
인터페이스는 오직 이용도로만 사용해야한다.
지침에 맞지 않은 인터페이스
상수 인터페이스라는 것이 있다. 상수 인터페이스는 메서드없이, static final 필드로만 가득찬 인터페이스인데...
07 Apr 2023 EffectiveJava
인터페이스는 구현하는 쪽을 생각해 설계하라
디폴트 메서드
자바 8전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었다.
하지만 디폴트 메서드가 생긴 이후에 기존 인터페이스에 메서드를 추가할 수 있게 되었다.
디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서...
06 Apr 2023 EffectiveJava
추상 클래스보다는 인터페이스를 우선하라.
자바의 다중 구현 메커니즘
자바에서는 인터페이스와 추상 클래스 이렇게 두가지를 제공하고 있으며, 자바 8부터는 인터페이스도 디폴트 메서드(default method)를 제공해 두 메커니즘 모두 인스턴스 메서드를 구현형태로 제공 할 수 있게 되었다.
인터페이스와 추상 클래스의 차이
인터페이스는 선언한 메서드를 모두...
27 Mar 2023 Java
No serializer found for class
테스트 코드를 작성 하던 도중 테스트를 실행하니 아래와 같은 에러가 발생했다.
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.example.TestClass]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No...
23 Mar 2023 Java
Database Lock을 이용해 동시성 제어하기
동시성 (Race Condition)
Race Condition이란 두개 이상의 동시적인(Concurrent) 프로세스나 스레드들이 하나의 리소스에 접근하기 위해 경쟁하는 상태를 말한다.
이러한 상태가 발생했을때 자료의 일관성을 해치는 결과가 나타날 수 있다.
예를 들면 1개 남은 재고의 N개 이상의 프로세스(스레드)가 접근한다면? 겨우 1개의...