프로그래밍/JAVA&J2EE 15

내가 생각하는 클린코드란?

내가 생각하는 클린코드란? 간결해야하고 잘 읽혀야한다. 즉, 각 객체가 자신이 맡은 일'만' 충실해야하고 이 일 저 일 뒤죽박죽 하면 안된다. 하나의 클래스는 하나의 업무를 하나의 메소드는 하나의 작업만을 해야한다. 변수명, 클래스명 작명에 힘을 써야한다. 비즈니스 예외를 잘 처리해야한다. 테스트하기 쉬워야한다. 클린한 코드는 하는일이 명확해야하고 한가지일에 집중해야하고 부수효과가 없을수록 좋다. 부수효과가 없을수록 좋다는건 맡은일에 관한 일만 처리하고 그 외에 다른부분에 영향이 없다는 것이다. 부수효과가 없으면 테스트하기도 덩달아 쉬워진다. 간결하게 잘 분리된 클래스, 메서드는 읽기가 쉽다. 복잡하지 않다. 복잡하지 않으면 실수가 발생할 확률이 줄어든다. 코드가 간결하면 논리적인 파악이 잘되고 코드를 ..

예외 처리 전략

자바에서 Exception 이 발생한 경우, 모든 Exception 은 적절히 복구되고 정확하고 친절한 로그를 남기거나복구될 수 없는 경우 정확하고 친절한 로그를 남기고 작업이 취소되야한다. 예외를 Catch 했으면 적절한 처리를 하라.예외 로그를 남길때는 정확하고 도움이 될 정보를 남겨라.root cause 를 남겨라구체적인 예외를 Catch 해라.예외마다 처리 방법이 다르면 각각의 예외를 모두 Catch 하여 적절히 처리하라.무슨 예외든 상관없이 처리방법이 같다면 적절한 예외로 변환하여 하나만 throw 해라 복구불가능한 System 관련 예외는 따로 catch 하지 않고@ControllerAdvice 에서 로그레벨 error 로 친절한 메세지 로깅하고 500 리턴 복구가능한 예외는 Catch 하고 ..

주석에 대하여.

클린코드 중 주석에 대한 부분을 그대로 옮겨적는다. 글을 잘 정리하여 간결하게 적으려고 했는데, 무엇하나 버릴 내용이 없어서 그대로 옮겨 적는다. 잘 달린 주석은 그 어떤 정보보다 유용하다. 경솔하고 근거 없는 주석은 코드를 이해하기 어렵게 만든다. 오래되고 조잡한 주석은 거짓과 잘못된 정보를 퍼뜨려 해악을 미친다.주석은 쉰들러 리스트가 아니다. 주석은 '순수하게 선하지'못하다. 사실상 주석은 기껏해야 필요악이다. 프로그래밍 언어자체가 표현력이 풍부하다면, 아니 우리에게 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면,주석은 거의 필요하지 않으리라. 아니, 전혀 필요하지 않으리라. 우리는 코드로 의도를 표현하지 못해, 그러니까 실패를 만회하기 위해 주석을 사용한다. 여기서 내가 실패라는 단..

자바 8 Optional

Null Pointer Exception 이 피곤하신가요? 그렇다면 자바 8 Optional 을 써보세요 . 예를 들어 아래와 같은 클래스가 있다고 가정합시다. public class Computer { private Soundcard soundcard; public Soundcard getSoundcard() { ... } ... } public class Soundcard { private USB usb; public USB getUSB() { ... } } public class USB{ public String getVersion(){ ... } 우리는 USB 클래스의 getVersion 을 호출하고 싶습니다. 그렇다면 이러한 방법을 생각해볼 수 있습니다. String version = compu..

Google Guava

프로젝트를 하다보면 Collection ( List , Map ), String 을 정말 많이 다룬다. Map에서 특정 키로 get해서 꺼내쓰거나 String 의 값을 equals 로 비교하여 특정조건문을 수행할 때, 개발자가 아무리 꼼꼼하게 테스트하더라도 개발자도 사람이라 비교하려는, 혹은 사용하려는 값이 null인 경우는 거의 무조건 발생한다. 그렇기 때문에 NullPointerException 정말 자주 만나게 된다. 디버깅해보면 금방 알아내긴 하지만 경우에 따라선 찾기 힘든경우도 있고, 때로는 정말 찾기 힘든 끔찍한 버그를 만들기도 한다. FastFail 이라는 말이 있다. 문제가 있을 땐 최대한 빨리 실패시키는 것이 좋다. 제일 좋은것은 컴파일 시점에 알아내는것이고. 요즘은 프로젝트가 거의 Sp..

엑셀의 내용을 도메인에 셋팅하는 유틸리티 클래스

엑셀의 내용을 도메인클래스에 셋팅하는 유틸리티 클래스를 만들어보았습니다. 우선 메소드는 아래와 같습니다. /** * @param excelFile : 읽어들일 엑셀파일 * @param clazz : 읽어들인 엑셀파일의 내용을 셋팅할 Domain 클래스 * @return 읽어들인 엑셀파일의 내용이 셋팅된 Domain 클래스 리스트 */public static List excelToDomain(File excelFile, Class clazz) 만들면서 발생했던 이슈는, 처음에는 Domain 클래스의 setter 메소드를 엑셀의 셀의 순서대로 호출하는 것이였습니다. 이렇게 엑셀 데이터를 순차적으로 setter 메소드에 Reflection을 사용하여 셋팅하려 했습니다. 그런데 이 방법은 너무 위험해보였습니다...

Java 7의 새로운 특징 : Java7에서의 중요한 변화들과 업데이트된 항목에 대한 조사.

제공 : 한빛 네트워크 저자 : Madhusudhan Konda 역자 : 김상현 원문 : A look at Java 7's new features Java 7에는 개발자들이 좋아할만한 많은 특징들이 있다. switch구문에서 사용하는 String, 다중 exception처리multi-catch exception), try-with-resource 구문, 새로운 파일시스템 API, JVM의 확장, 동적 타입의 언어에 대한 지원, 유사한 작업을 위한 fork와 join 프레임워크 등 분명히 많은 곳에서 수용되어질 것이다. 아래에 Java 7의 특징을 설명하고 예제를 제공하였다.. 이 글에서 사용한 코드가 담긴 zip파일은 이곳에서 다운로드 받을 수 있다.개선된 점들Java 7은 Project Coin을 통한..