* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다. 38. 인자의 유효성을 검사하라 대부분의 메서드와 생성자는 인자로 사용할 수 있는 값을 제한한다. 값이 음수가 될 수 없다거나, null이 될 수 없다거나 등등등.. -> 이러한 제한들은 문서로 남겨야 할 뿐만 아니라 메서드 시작 부분에서 검사해야 한다. (오류(error)는 가급적 빨리 탐지해야 한다는 원칙에 의해) 이러한 검증을 생략하면 오류를 탐지하기 힘들어질 뿐만 아니라 문제 발생 지점을 파악하기도 곤란해진다. -> 메서드 앞부분에서 인자의 유효성을 검사하도록 하면 적절한 예외를 통해 깔끔하고 신속하게 오류를 검출할 수 있다. 하지만 만약 인자 유효성을 검사하지 않는다면 다음과 같은 문제가 생길 수 있다. 1. 처리 도중에 이상한..
* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다. 36. Override 애노테이션은 일관되게 사용하라 @Override 애노테이션은 메서드 선언부에만 사용할 수 있고, 상위 자료형에 선언된 메서드를 재정의한다는 사실을 표현한다. @Target(ElementType.METHOD) // 메서드에만 적용 가능 @Retention(RetentionPolicy.SOURCE) // 소스코드 까지만 적용 (.class 파일부턴 적용 X) public @interface Override { } 이 @Override 애노테이션을 일관되게 잘 사용하면 의외로 끔찍한 버그 발생을 방지할 수 있는 효과가 있다고 한다. - 개발자의 실수로 의도치 않게 Overriding이 아니라 Overloading이 되는..
* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다. * (영어) ordinal: 서수(first, second...) cardinal: 기수(1, 2, 3...) 31. ordinal 대신 객체 필드를 사용하라 상당수의 enum 상수는 자연스럽게 int값 하나에 대응된다. 모든 enum에는 ordinal이라는 메서드가 있는데, enum 자료형 안에서 enum 상수의 위치를 나타내는 정수값을 반환한다. - 유지보수 관점에서 매우 끔찍한 결과를 불러올 수 있다. 가급적 절대 사용하면 안된다. - 상수의 순서를 변경하거나, 중간에 끼워넣기라도 하게 되면 순서를 기반으로 작성된 메서드에 모두 문제가 발생한다. 정 위치값이 필요하다면 ordinal을 사용하는 대신 상수 객체 필드에 별도로 정의해서..
- 국민내일배움카드 실업자 유형으로 발급 완료 (6월 말) - 아직 교육과정 따로 진행중인 것은 없음. - 7월달에 배민커넥터로 등록해서 주 15시간 미만(운행시간 기준)으로 일함 (소득은 30만원도 안됨) 빠른 결론 국비지원은 받을 수 있으나, 훈련 장려금은 받기 어렵다. 소소한 용돈벌이 겸 도보로 배민커넥트를 좀 뛰었더니 문제가 좀 생겼다. 국민내일배움카드를 이용해 국비지원을 받으려고 하면 교육은 문제없이 받을 수 있는데, 거기서 나오는 훈련 장려금을 아예 받을 수 없다는 얘기가 있어서 급 당황,, 인터넷을 한참 뒤져봤다. 인터넷을 찾아봤을 때는 아예 한푼도 못받았다는 얘기도 있고, 문제없다는 얘기도 있고 진짜 뭐가뭔지를 알 수가 없었다. 특히 네이버 지식인. 여긴 진짜 더이상 못쓰겠더라 광고글밖에 ..
* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다. 30. int 상수 대신 enum을 사용하라 열거타입(enumerated type)은 고정 개수의 상수들로 값이 구성되는 자료형이다. enum 자료형이 등장하기 이전에는 통상 int형의 상수를 정의해서 열거타입을 흉내냈다. public static final int APPLE_FUJI = 1; public static final int APPLE_PIPPIN = 2; public static final int ORANGE_NAVEL = 1; public static final int ORANGE_BLOOD = 2; 이러한 방법은 int enum 패턴이라고도 하는데, 형 안전성 관점에서도 그렇고 편의성 관점에서도 그렇고 문제점들이 있다. ..
* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다. 25. 배열 대신 리스트를 써라 배열은 제네릭 자료형과 중요한 두가지 차이점이 있다. 1. 배열은 공변 자료형(covariant)이고, 제네릭은 불변 자료형(invariant)이다. 2. 배열은 실체화(reifiable)되는 자료형이고, 제네릭은 삭제과정(erasure)을 통해 구현된다. 벌써부터 머리가 아프다. 공변 자료형이라니.. 공변 자료형이란 Sub가 Super의 하위 자료형이면 Sub[]도 Super[]의 하위 자료형이라는 것이다. 반면 불변 자료형은 Type1과 Type2가 있을 때 List은 List의 상위 자료형이나 하위 자료형이 될 수 없다. 이게 왜 중요해? 싶은데 그 이유는 바로 예외를 컴파일 시점에 잡아낼 수 있느냐..
* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다. 24. unchecked warning(무점검 경고)을 제거하라 unchecked 하니까 checked exception이랑 unchecked exception이 먼저 생각나는데 그런건 아니다. 컴파일 시에 발생하는 여러 Warning들(노란 느낌표) 이야기. - 잠재적 위험을 갖고있음을 뜻함 unchecked warning중 상당수는 쉽게 없앨 수 있는 것들이다. - 무점검 형변환 경고(unchecked cast warning) - 무점검 함수 호출 경고(unchecked method invocation warning) - 무점검 제네릭 배열 생성 경고(unchecked generic array creation warning) - 무점..
* 이펙티브 자바 2/E를 읽고 공부하기 위해 기록한 게시글입니다. 23. 새 코드에는 무인자 제네릭 자료형(raw type)을 사용하지 마라 자바에는 제네릭(Generic)이라는 개념이 있다. 먼 옛날 제네릭이 도입되기 이전에는 컬렉션에서 객체를 읽을때 마다 형변환(type cast)를 해줘야 했다. 그러다 누군가가 컬렉션에 엉뚱한 자료형 객체라도 넣어놓기라도 했으면 캐스팅 오류가 나고 만다. 하지만 제네릭을 사용하면 컬렉션에 넣을 객체의 자료형이 무엇인지를 컴파일러에게 알려줄 수 있다. -> 형변환 코드는 컴파일러가 알아서 만들어주고, 컬렉션에 잘못된 자료형의 객체를 넣으려는 시도는 컴파일 과정에서 미리 차단해준다. 제네릭 덕분에 안전하고 명료한 개발이 가능해진다! 선언부에 형인자(type param..