분류 전체보기
[Effective Java] @Override 애너테이션을 일관되게 사용하라
@Override를 사용하지 않았을 때 버그의 발생 import java.util.HashSet; public class Bigram { private final char first; private final char second; public boolean equals(Biagram b) { ... } public int hashCode() { return ...; } public static void main(String[] args) { Set s = new HashSet(); for(int i = 0; i < 10; i++) { for(char ch = 'a'; ch
![[Effective Java] 명명 패턴보다 애너테이션을 사용하라](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSaEj%2Fbtsh2OV279S%2FiTIKeotRuWncudqnKpjq8K%2Fimg.png)
[Effective Java] 명명 패턴보다 애너테이션을 사용하라
명명 패턴 특별히 다뤄야 할 프로그램 요소에는 구분되는 명명패턴을 이용했다. 예를 들어 JUnit은 테스트 메서드 이름이 test로 시작하게끔 했었다. 이런 명명 패턴은 다음과 같은 문제가 있다. 타입 세이프 하지 않다. tsetSaftey라고 적으면 JUnit은 이를 인지하지 못한다. 올바른 프로그램 요소에서만 사용된다는 보장이 없다. -> 클래스의 이름에 test를 붙여도 클래스에는 적용되지 않는다. 프로그램 요소를 매개변수로 전달할 방법이 없다. -> 예외 테스트가 힘들다. 애너테이션 @Retention가 @Target이라는 메타 어노테이션을 이용해 애너테이션의 라이프사이클을 지정하고 사용자가 올바른 프로그램 요소에 사용할 수 있도록 도와준다. 이러한 마커 애너테이션은 잘못 사용하면 컴파일 타임에 ..
[독후감] 유시민의 글쓰기 특강 요약
"유시민의 글쓰기 특강" 책을 읽고 발췌 요약한 것이다. [간단한 규칙만 지키면 논리적인 글을 쓸 수 있다] 1. 취향 고백과 주장을 구별한다. "비싼 옷을 사기 보다는 아프리카 어린이를 위해 기부하는 것이 도덕적으로 올바르다" 라는 주장은 도덕적 가치판단을 한 것이다. 따라서 그 판단의 근거를 댈 의무가 생긴다. 2. 주장은 반드시 논증한다. "나는 xxx가 대한민국 최고 미남이라고 생각한다" -> 이에 대한 근거를 제시해야 한다. 사실과 주장을 구별하고 논증 없는 주장을 배척해야 한다. 3. 처음부터 끝까지 주제에 집중한다. [글쓰기의 철칙] 1. 쉽게 읽고 명확하게 이해할 수 있는 글이어야 한다. 2. 논리적으로 반박하거나 동의할 근거가 있는 글이어야 한다. 이렇게 글을 쓰기 위해서는 다음 네 가지..
![[독후감] 유시민의 글쓰기 특강](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQp5Fa%2Fbtsh3l67ieo%2FixjakKTHVnfYISckwRdvKK%2Fimg.jpg)
[독후감] 유시민의 글쓰기 특강
나의 목표 중 하나는 커리어를 쌓고 10년 안에 내 이름으로 책을 써보는 것이다. 이것이 내가 블로그를 시작한 이유 중 하나이다. 블로그를 2년 넘게 운영해왔지만 글쓰기 실력이 늘었다는 생각은 들지 않았다. 그래서 글쓰기와 관련된 강의나 책을 찾아보기로 했고 유시민의 글쓰기 특강이라는 책을 읽게 되었다. 화려하고 기교있는 문장을 구사한다고 글을 잘 쓰는 것이 아니다. 읽는 사람이 글쓴인이의 마음과 생각을 느끼고 이해하고 공감할 수 있게 써야 잘 쓰는 것이다. 이 책은 논리적인 글쓰기를 하기 위한 몇 가지 규칙과 연습 방법, 사람들이 흔히 실수하는 문법적 실수를 짚어준다. 마지막에는 글쓰기가 힘든 사람에게 독려의 말을 전하고 있다. 유시민의 글쓰기 특강은 특강이라고 할 만 하다. 군더더기 없이 중요한 내용..
[Effective Java] 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라
확장할 수 없는 열거 타입 열거 타입은 확장할 수 없다. 이유는 다음과 같다. 확장한 타입의 원소는 기반 타입의 원소로 취급하지만, 그 반대는 성립하지 않는다는 어딘가 조금 이상하다. 기반 타입과 확장된 타입들의 원소 모두를 순회할 방법도 마땅치 않다. 화작성을 높이려면 고려할 요소가 늘어나 설계와 구현이 더 복잡해진다. 그럼에도 불구하고 확장할 수 있는 열거 타입이 필요할 때가 있다. 이때는 인터페이스를 이용하면 된다. 인터페이스를 이용한 확장 열거 타입이 임의의 인터페이스를 구현할 수 있기 때문에 꼭 정의해야 하는 메서드를 정의한 부모 인터페이스를 정의하고 이를 열거 타입에서 구현할 수 있다. public interface Operation { double apply(double x, double y..