전체 카테고리361 [Effective Java] 아이템42 익명 클래스보다는 람다를 사용하라 ■ 익명 클래스와 람다 비교 예전에는 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스를 사용했다. 익명 클래스의 인스턴스를 함수 객체로 사용하는 것은 낡은 기법이다. 익명 클래스 방식은 코드가 너무 길기 때문에 자바는 함수형 프로그래밍에 적합하지 않았다. Collection.sort(words, new Comparator() { public int compare(String s1, String s2){ return Integer.compare(s1.length(), s2.length()); } }); 지금은 함수형 인터페이스라 부르는 이 인터페이스들의 인스턴스를 람다식을 사용해 만들 수 있게 됐다. 다음은 익명 클래스를 사용한 앞의 코드를 람다 방식으로 바꾼 모습이다. 위의 코드 보.. 2021. 6. 20. [Effective Java] 아이템39 명명 패턴보다 애너테이션을 사용하라 ■ 명명 패턴의 단점 오타가 나면 안된다. 예를 들어 JUnit3를 사용할 경우 실수로 이름을 tsetSafetyOverride로 지으면 개발자는 이 테스트가 통과했다고 오해할 수 있다. 올바른 프로그램 요소에서만 사용되리라는 보장할 수 없다. 클래스 이름에 Test를 붙여서 지을 경우 개발자는 JUnit이 테스트를 실행해줄꺼라고 생각했지만 그러지 않는다. 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없다. 특정 예외를 던져야만 성공하는 테스트가 있고 기대하는 예외 타입을 테스트에 매개변수로 전달해야 하는 상황이 그 예이다. ■ 애너테이션 도입 애너테이션은 이 모든 문제를 해결해주는 개념으로, Junit도 4부터 전면 도입하였다. Test라는 이름의 애너테이션을 정의한다. 자동으로 수행되는 간단한 애.. 2021. 6. 15. [Effective Java] 아이템41 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 ■ 마커 인터페이스 아무 메서드도 담고 있지 않고 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스를 마커 인터페이스라 한다. Serializable이 대표적이다. package java.io; public interface Serializable { } 마커 인터페이스는 마커 애너테이션보다 두 가지 측면에서 낫다. 첫번째로 마커 인터페이스는 이를 구현한 클래스의 인스턴스를 구분하는 타입으로 쓸 수 있다. 마커 애너테이션은 런타임에서 발견할 수 있는 오류를 마커 인터페이스를 사용할 경우 컴파일 타임에 발견할 수 있다. 두번째로는 적용 대상을 더 정밀하게 지정할 수 있다. 애너테이션은 @Target 을 이용해서 클래스, 인터페이스, 열거 타입, 애너테이션에 부착 할 수 있기 때문에 세.. 2021. 6. 15. [Effective Java] 아이템40 @Override 애너테이션을 일관되게 사용하라 ■ @Override를 달지 않았을 경우 버그 발생 예시 코드 다음은 메서드를 재정의 하려는 의도일 때 @Override 애너테이션을 달지 않아서 개발자가 의도한대로 동작하지 않는 예시 코드이다. import java.util.HashSet; import java.util.Set; public class Bigram { private final char first; private final char second; public Bigram(char first, char second) { this.first = first; this.second = second; } public boolean equals(Bigram b) { return b.first == first && b.second == second;.. 2021. 6. 15. [Effective Java] 아이템38 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 ■ 열거 타입과 확장 열거 타입은 책 초판에서 소개한 타입 안전 열거 패턴보다 우수하다. 하지만 타입 안전 열거 패턴은 확장할 수 있지만 열거 타입은 그럴 수 없다. 사실 대부분 상황에서 열거 타입을 확장하는 것은 좋지 않다. 확장한 타입의 원소를 기반 타입의 원소로 취급하지만 그 반대는 성립하지 않는다. 또한 기반 타입과 확장된 원소 모두를 순회할 방법도 마땅치 않다. 그리고 확장성을 높이면 고려할 요소가 늘어나 설계와 구현이 더 복잡해진다. ■ 확장할 수 있는 열거 타입 하지만 연산 코드에서는 확장할 수 있는 열거 타입이 어울린다. 기본 아이디어는 열거 타입이 인터페이스를 구현할 수 있다는 사실을 이용하는 것이다. 연산 코드용 인터페이스를 정의하고 열 거 타입이 이 인터페이스를 구현하게 하면 된다. .. 2021. 6. 15. vi/vim 여러줄 주석 및 해제 방법 vi/vim 편집기에서 한번에 여러줄을 주석처리하거나 해제하는 방법에 대해서 간단히 알아보겠습니다. 1. 여러줄 주석 처리 1.1 vi/vim 명령어를 통해 수정할 파일을 연다. 1.2 v를 클릭하여 visual 모드로 진입 후 hjkl을 이용하여 주석 처리할 줄을 선택한다. 1.3 : 키를 누르고 norm i#을 입력 후 엔터를 클릭한다. 위의 3단계의 과정을 거치면 한번에 여러줄에 문자를 입력할 수 있습니다. #을 넣었으니 주석 처리가 됩니다. 2. 주석 해제 2.1 vi/vim 명령어를 통해 수정할 파일을 연다. 2.2 v를 클릭하여 visual 모드로 진입 후 hjkl을 이용하여 주석 해제할 줄을 선택한다. 2.3 : 키를 누르고 norm 1x를 입력한다. 1x는 가장 앞 문자 1개를 없앤다는 의.. 2021. 6. 6. 이전 1 ··· 11 12 13 14 15 16 17 ··· 61 다음