본문 바로가기

java

(97)
직렬화 item 87 커스텀 직렬화 형태를 고려해보라. https://donghyeon.dev/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C%EC%9E%90%EB%B0%94/2021/11/06/%EC%BB%A4%EC%8A%A4%ED%85%80-%EC%A7%81%EB%A0%AC%ED%99%94-%ED%98%95%ED%83%9C%EB%A5%BC-%EA%B3%A0%EB%A0%A4%ED%95%B4%EB%B3%B4%EC%9E%90/ item 88 readObject 메서드는 방어적으로 작성하라 https://jithub.tistory.com/377 https://donghyeon.dev/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C%EC%9E%90%EB%B0%94/2021/11/0..
[java] api 클래스
[item 74] 메서드가 던지는 모든 예외를 문서화 하라 각 메서드가 던지는 예외 하나하나를 문서화하는 데 충분한 시간을 쏟아야 한다. 검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하자. 공통 상위 클래스 하나로 뭉뚱그려 선언하는 일은 삼가자 극단적인 예로 메서드가 Exception이나 Throwable을 던진다고 선언해서는 안 된다. /** * * @return secondField * @throws Throwable * @throws Exception */ public int getSecondField() throws IllegalAccessError { return secondField; } 비검사 예외도 문서화두면 좋다 비검사 예외는 일반적으로 프로그래밍 오류를 뜻하는데 자신이 일으..
[item 73] 추상화 수준에 맞는 예외를 던져라 [item 73] 추상화 수준에 맞는 예외를 던져라 예외 번역 수행하려는 일과 관련 없어 보이는 예외가 발생하면 당황스럽다. 메서드가 저수준 예외를 처리하지 않고 바깥으로 전파해버릴대 종종 일어나는 일이다. 이는 내부 구현 방식을 느러내어 윗 레벨 API를 오염시킨다. 다음 릴리스에서 구현 방식을 바꾸면 다른 예외가 튀어나와 기존 클라이언트 프로그램을 깨지게 할 수도 있다. 상위 계층에서는 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꿔 던져야 한다. 이를 예외 번역(exception translation)이라 한다. 예외 번역 예시 try { ... // 저수준 추상화를 이용한다. } catch (LowerLevelException e) { /* 추상화 수준에 맞게 번역한다. */ throw..
[item 70] 복구할 수 있는 상황에서는 검사 예외, 프로그래밍 오류에는 런타임 예외를 사용하라 [item 70] 복구할 수 있는 상황에서는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 핵심 정리 복구할 수 있는 상황이면 검사 예외를, 프로그래밍 오류라면 비검사 예외를 던지자. 확실하지 않다면 비검사 예외를 던지자. 검사 예외도 아니고, 런타임 예외도 아닌 throwable은 정의하지도 말자. 검사 예외라면 복구에 필요한 정보를 알려주는 메서드도 제공하자. 핵심 정리 복구할 수 있는 상황이면 검사 예외를, 프로그래밍 오류라면 비검사 예외를 던지자. 확실하지 않다면 비검사 예외를 던지자. 검사 예외도 아니고, 런타임 예외도 아닌 throwable은 정의하지도 말자. 검사 예외라면 복구에 필요한 정보를 알려주는 메서드도 제공하자. 에러 예외 프로그램 종료 프로그램 종료 정상 실행 상태로 못..
[item 69] 예외는 진짜 예외 상황에만 사용하라 [item 69] 예외는 진짜 예외 상황에만 사용하라 핵심정리 예외는 예외 상황에서만 쓸 의도로 설계되었다. 정상적인 제어 흐름에서 사용하면 안된다. 이를 프로그래머에게 강요하는 API를 만들어서도 안된다. for문으로 예외가 발생하면 for문을 끝나도록 작성함. 신박한 아이디어...로 개발하지 마라. 예외를 완전히 잘못 사용한 예 - 따라 하지 말 것! try { int i = 0; while (true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { } 무슨 일을 하는 코드인지 알겠는가? 전혀 직관적이지 않다는 사실 하나만으로도 코드를 이렇게 작성하면 안 되는 이유는 충분하다. 이 코드는 배열의 원소를 순회하는데, 아주 끔찍한 방식..
[java] 예외 처리 에러 예외 프로그램 종료 프로그램 종료 정상 실행 상태로 못돌아감 예외 처리 코드 추가 -> 정상 실행 상태로 돌아감 일반 예외 = 컴파일러 체크 예외 실행 예외 Exception RuntimeException 예외 처리 코드가 필요하다고 강제적으로 알림 예외처리 코드가 필요하다고 알림이 안뜸. 개발자가 경험적으로 작성해야함 nullPoniterException ArrayIndexOutOfBoundsException NumberFormatException ClassCastException 컴파일러가 체크함. 컴파일 오류를 발생시킴 강제적으로 예외 처리 코드를 작성하다로고 요구한다. 컴파일러가 체크안함. 개발자의 경험으로 작성 자바는 예외를 클래스로 관리한다. 에외가 발생하면 해당 예외 클래스로 객체를 생..
[java] url 파일 업로드, 다운로드 보진 않았는데 끌려서 저장해줌 https://devofhwb.tistory.com/85 자바(JAVA) 파일(미디어파일) 처리(다운로드, 동영상, 이미지 등) 라이브러리 안녕하세요. 산뜻한 5월의 시작이네요.. 이번주는 황금 연휴 개꿀.. 헤헤 서버에 저장된 동영상 파일을 스트리밍 해주는 데 있어서, 구글링을 하던 중 좋은 자료가 있어 공유합니다! 링크 - https:/ devofhwb.tistory.com 회사에서 원래 사용하던거는 https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html FileUtils (Apache Commons IO 2.11.0 API) Converts from a URL to..