DEV ℧ Developer Diary

[EffectiveJava] item23 - 태그달린 클래스보다는 클래스 계층구조를 활용하라

이번 내용은 OOP에 관련된 내용이다. 객체지향언어인 자바를 좀더 객체지향적으로 사용할 수 있도록 정리된 글이다.

태그 달린 클래스 (tagged class)란 하나의 클래스안에 두 가지 이상의 의미를 표현할 수 있도록 현재 표현하는 의미의 태그값을 통해 클래스가 구분되고 있는 클래스이다.

태그 달린 클래스 (tagged class)

태그클래스에 대한...

[EffectiveJava] item22 - 인터페이스는 타입을 정의하는 용도로만 사용하라

인터페이스는 자신이 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 달리말해, 클래스가 어떤 인터페이스를 구현한다는것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는것이다.

인터페이스는 오직 이용도로만 사용해야한다.

지침에 맞지 않은 인터페이스

상수 인터페이스라는 것이 있다. 상수 인터페이스는 메서드없이, static final 필드로만 가득찬 인터페이스인데...

[EffectiveJava] item21 - 인터페이스는 구현하는 쪽을 생각해 설계하라

인터페이스는 구현하는 쪽을 생각해 설계하라

디폴트 메서드

자바 8전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었다.

하지만 디폴트 메서드가 생긴 이후에 기존 인터페이스에 메서드를 추가할 수 있게 되었다.

디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서...

[EffectiveJava] item20 - 추상 클래스보다는 인터페이스를 우선시하라

추상 클래스보다는 인터페이스를 우선하라.

자바의 다중 구현 메커니즘

자바에서는 인터페이스와 추상 클래스 이렇게 두가지를 제공하고 있으며, 자바 8부터는 인터페이스도 디폴트 메서드(default method)를 제공해 두 메커니즘 모두 인스턴스 메서드를 구현형태로 제공 할 수 있게 되었다.

인터페이스와 추상 클래스의 차이

인터페이스는 선언한 메서드를 모두...

[Java] No serializer found for class (Jackson Databind 에러) 해결하기

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...