이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 77. 예외를 무시하지 말라 API 설계자가 메서드 선언에 예외를 명시하는 까닭은 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다. 예외를 무시하기는 아주 쉽다. 예로 메서드 호출을 try 문으로 감싼 후 catch 블록에서 아무 일도 하지 않는 경우이다. 예외는 문제 상황에 잘 대처하기 위해 존재하는데 catch 블록을 비워두면 예외가 존재할 이유가 없어진다. 이 내용은 검사와 비검사 예외에 똑같이 적용된다. 만약, 예외를 무시하기로 결정했다면 catch 블록 안에 그렇게 결정안 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꿔두자. ex 1) 예외를 무시하는 예 Future..
자기 개발
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 76. 가능한 한 실패 원자적으로 만들라 실패 원자적(failure-atomic) 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다는 특성 메서드를 실패 원자적으로 만드는 방법 가장 간단한 방법은 불변 객체로 설계하는 것 불변 객체는 태생적으로 실패 원자적이기 때문 메서드가 실패하면 새로운 객체가 만들어지지 않을 수 있으나 기존 객체가 불안정한 상태에 빠지는 일은 없다. 가변 객체의 메서드를 실패 원자적으로 만드는 가장 흔한 방법은 작업 수행에 앞서 매개변수의 유효성을 검사하는 것이다. 객체의 내부 상태를 변경하기 전에 잠재적 예외의 가능성을 대부분 걸러낼 수 있는 방법 ex ..
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라 예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 스택 추적(stack trace) 정보를 자동으로 출력한다. 스택 추적은 예외 객체의 toString 메서드를 호출해 얻는 문자열로, 보통은 예외 클래스 이름 뒤에 상세 메시지가 붙는 형태다. 에외의 toString 메서드에 실패 원인에 관한 정보를 가능한 한 많이 담아 반환하는 일이 중요하다. 예외 메시지 팁 실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 한다. 예컨데, IndexOutOfBoundsException의 상세 메시지는 범위의 최..
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 74. 메서드가 던지는 모든 예외를 문서화하라 검사 예외 문서화 메서드가 던지는 예외는 그 메서드를 올바로 사용하는데 필요한 정보다. 검사 예외는 항상 따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하자. 공통 상위 클래스 하나로 뭉뜽그려 선언하는 것은 좋지 않다. 메서드 사용자에게 각 예외에 대처 방안을 줄 수 없다. 같은 맥락에서 발생할 여지가 있는 다른 예외들까지 삼켜버릴 수 있어 API 사용성을 크게 떨어뜨린다. 이 규칙에 유일한 예외는 main 메서드다. (main은 오직 JVM만 호출하기 때문) 비검사 예외 문서화 자바 언어가 요구하는 것은 아니지..
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 73. 추상화 수준에 맞는 예외를 던지라 수행하려는 일과 관련 없어 보이는 예외가 튀어나오는 경우가 있는데, 메서드가 저수준 예외를 처리하지 않고 바깥으로 전파해버릴 때 종종 일어나는 일이다. 이는 단순히 프로그래머를 당황시키는 데 그치지 않고, 내부 구현 방식을 드러내어 윗 레벨 API를 오염시킨다. 다음 릴리스에서 구현 방식을 바꾸면 다른 예외가 튀어나와 기존 클라이언트 프로그램을 깨지게 할 수도 있는 것이다. 이 문제를 피하려면 상위 계층에서는 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꿔 던져야 한다. (= 예외 번역) ex 1) 예외 번역 try { ... // 저수준 추상화를 이용한..
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 72. 표준 예외를 사용하라 숙력된 프로그래머는 그렇지 못한 프로그래머보다 더 많은 코드를 재사용하듯, 예외도 재사용하는 것이 좋으며 자바 라이브러리는 대부분 API에서 쓰기에 충분한 수의 예외를 제공한다. 표준 예외 표준 예외를 재사용하면 얻는 게 많다. 개발자의 API가 다른 사람이 익히고 사용하기 쉬워진다. (많은 프로그래머에게 이미 익숙해진 규약을 그대로 따르기 때문) 예외 클래스 수가 적을수록 메모리 사용량도 줄고 클래스를 적재하는 시간도 적게 걸린다. Exception, RuntimeException, Thorwable, Error는 직접 재사용하지 말자. 이 클래스들은 추상 클래스라고 생각하는..
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 71. 필요 없는 검사 예외 사용은 피하라 검사 예외 검사 예외는 발생한 문제를 프로그래머가 처리하여 안정성을 높일 수 있게 해준다. 검사 예외를 과하게 사용하면 오히려 쓰기 불편한 API가 될 수 있다. 어떤 메서드가 검사 예외를 던질 수 있다고 선언됐다면, 이를 호출하는 코드에서는 catch 블록을 두어 그 예외를 붙잡아 처리학나 더 바깥으로 던져 문제를 전파해야만 한다. 어느 쪽이든 API사용자에게 부담을 준다. API를 제대로 사용해도 발생할 수 있는 예외이거나, 프로그래머가 의미있는 조치를 취할 수 있는 경우라면 이러한 단점을 감수하고도 사용하는 것이 좋고, 둘 중 어디에도 속하지 않는다면 비검사..
- 알고리즘 분류 : 정렬, 덱 - 사용 언어 : JAVA - 문제 요점 - 오름차순 or 내림차순으로 정렬해서 앞뒤로 번갈아가면서 넣어주면 된다. 소스 설명은 주석을 참고해주세요. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Deque; import java.util.LinkedList; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ BufferedRead..