반응형

재정의

    static method와 Override hiding 대한 정리

    static 메소드를 자기고 있는 클래스를 상속받은 자식 클래스에서 그 static 메소드를 override 할 수 있을까? 안될거 알지만 한번 확인해보고 싶었다. 먼저 static method를 가지고 있는 Parent을 만들었다. 123456789101112/** * 부모 클래스 */static class Parent { public static void getData() { System.out.println("부모 getData"); } public void method() { System.out.println("부모 method"); }}Colored by Color Scriptercs 그리고 이를 상속하는 Child 클래스를 만들어보자.123456789101112/** * 자식 클래스 */sta..

    어노테이션 - 규칙 36 Override 어노테이션은 일관되게 사용하라.

    자바 1.5에 어노테이션이 추가되었을 때, 자바 기본 라이브러리에 몇 가지 어노테이션 자료형이 추가되었다. 그 중 대표적인 어노테이션 @Override이다. @Override 어노테이션은 메서드 선언부에서만 사용할 수 있고, 부모 자료형에 선언된 메서드를 재정의 할 때 사용한다. 만약 메서드를 재정의 할 때 @Override 어노테이션을 입력하지 않으면 다음과 같은 문제가 발생할 수 있다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162package effective36; import java.util.Objects; /** * Stdudent c..

    모든 객체의 공통 메서드 - 규칙 11 clone을 재정의할 때는 신중하라

    Cloneable은 객체의 복제를 허용한다는 사실을 알리는데 쓰려고 고안된 인터페이스이다. 하지만 Cloneable은 선언된 메서드가 없는 마커 인터페이스로, 상위 클래스의 protected 멤버가 어떻게 동작할지 규정하는 용도로 쓰인다. 또한 객체의 cloneable을 구현하면, Object의 clone 메서드는 해당 객체를 필드 단위로 복사한 객체를 반환한다. Cloneable을 구현하지 않았다면, clone 메서드는 CloneNotSupportedException을 던질 것이다. Java API 문서에 기재된 clone 메서드의 명세는 다음과 같다. - 객체의 복사본을 만들어서 반환한다. - "복사"의 정확한 의미는 클래스마다 다르다. - 일반적으로 x.clone() != x 는 참이다. - x.c..

    모든 객체의 공통 메서드 - 규칙 10 toString은 항상 재정의하라

    toString 재정의를 하지 않은 경우 기본으로 제공되는 toString을 사용하게 될 경우 @ 기호와 16진수로 표현된 해시코드가 붙은 문자열이 반환된다. 이는 사용자가 원하는 정보가 아니므로 사용자는 해당 객체가 원하는 형태로 문자열을 반환할 수 있도록 재정의를 해놓으면 조금 더 유용하게 사용 할 수 있다. 일반적으로 toString 메서드를 재 정의하여 사용하는 경우에는 객체 내의 중요 정보를 전부 담아 반환해야 한다. 또한 toString를 재정의 하였을 경우에는 해당 내용에 대한 주석을 상세하게 기입해 놓아야 한다. 12345678910/* * 모든 객체의 멤버 변수에 대한 데이터를 반환한다. * * a는 첫번재, b는 두번 째 값이다. */ @Override public String toSt..

    모든 객체의 공통 메서드 - 규칙 8 equeals 재정의할 때는 일반 규악을 따르라

    Object 는 모든 객체 생성이 가능한 클래스이긴 하지만 기본적으로 계승해서 사용하도록 설계된 클래스 이다. 그런 Object에 정의된 equals, hashCode, toString, clone, finalize는 명시적인 일반 규약이 있다. 재정의 하도록 설계된 메서드들이기 때문에 상황에 따라 재정의를 하지 않을 경우 HashMap, HashSet처럼 해당 규약에 의존하는 클래스와 함께 사용하면 문제가 발생한다. ※ equals를 재 정의 하지 않아도 되는 경우 이중 equals 메서드에 대해서 이야기 해보자. Equals 재정의를 하였을 때 실패할 경우, 문제가 되기 때문에 아래와 같은 상황에서는 구태여 재정의 하지 않아도 된다. 1. 각각의 객체가 고유하다. - Thread 같은 클래스는 Obj..

    HashMap에서 사용되는 인스턴스 객체의 equals()와 hashCode() 재 정의 중요성

    HashMap에 저장되어 있는 키 값을 통해 저장된 value 값을 찾을 때, 입력된 object와 동일한 hashCode 값을 가지고 있는키를 찾기 위해 객체에 정의된 equals 메소드를 사용한다. 두 개의 object를 재 정의한 equals를 통해 비교한 후 동일한 객체 일 경우 동일한 hashCode값을 반환한다. 그렇기에 instance 객체를 hashMap에 key값으로 사용하고 싶은 경우에는 비교에 사용되는 equals()와 동일한 객체에 대한 동일한 hashCode 값을 반환하는 hashCode() 메소드를 Override 해야한다. 참고자료 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.K..

    Spring Interceptor와 Filter에서 POST 방식으로 전달된 JSON 데이터 처리하기

    이번 회사 프로젝트에서 진행할 때 parameter값이 아니라 Josn 데이터가 필요할 때가 있었다. 이를 위해서는 HttpServletRequest에서 InputStream으로 데이터를 추출해야한다. 하지만 HttpServletRequest에서 InputStream을 한번 추출하게되면, Controller에서 parameter를 매핑하려고 데이터를 바인딩할 때 다음과 같은 오류가 발생한다. 이는 톰캣에서 막아놓았기 때문이다. [에러내용] 12java.lang.IllegalStateException: getReader() has already been called for this requestorg.springframework.http.converter.HttpMessageNotReadableExcept..

반응형