자바공부

· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 65. 리플렉션보다는 인터페이스를 사용하라 리플렉션 리플렉션 기능을 이용하면 프로그램에서 임의의 클래스에 접근할 수 있다. Class 객체가 주어지면 그 클래스의 생성자, 메서드, 필드에 해당하는 Constructor, Method, Field 인스턴스를 가져올 수 있고, 이 인스턴스들로 그 클래스의 멤버 이름, 필드 타입, 메서드 시그니처 등을 가져올 수 있다. Constructor, Method, Field 인스턴스를 이용해 실제 생성자, 메서드, 필드를 조작할 수 있다. 드물긴 하지만, 리플렉션은 런타임에 존재하지 않을 수도 있는 다른 클래스, 메서드, 필드와의 의존성을 관리할 때 적합하다. (외부 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 56. 공개된 API 요소에는 항상 문서화 주석을 작성하라 좋은 API를 개발하기 위해서는 해당 API에 대한 문서도 잘 작성되어야 한다. 기본적으로 API 문서는 사람이 직접 작성하므로 코드가 변경되면 매번 같이 수정해줘야 하는데, 자바에서는 Javadoc이라는 유틸리티가 이 작업을 도와준다. Javadoc Javadoc은 프로그래머가 자바독 문서를 올바르게 작성했는 지 확인하는 기능을 제공한다. 자바 7에서는 명렬줄에서 -Xdoclint 스위치를 켜주면 이 기능이 활성화되고, 자바 8부터는 기본으로 작동한다. 소스코드 파일에서 문서화 주석이라는 특수한 형태로 기술된 설명을 추려 API 문서로 변환해준다..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 53. 가변인수는 신중히 사용하라 가변인수 메서드 명시한 타입의 인수를 0개 이상 받을 수 있다. 가변인수 메서드를 호출하면, 가장 먼저 인수의 개수와 길이가 같은 배열을 만들고 인수들을 이 배열에 저장하여 가변인수 메서드에 건네준다. ex 1) 입력받은 int 인수들의 합을 계산해주는 가변인수 메서드 static int sum(int... args) { int sum = 0; for (int arg : args) sum += arg; return sum; } ex 2) 인수가 1개 이상이어야하는 가변인수 메서드 (좋지 않은 예) static int min(int... args) { if (args.len..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 52. 다중정의는 신중히 사용하라 다중정의 ex 1) 컬렉션의 종류를 출력하는 예 public class CollectionClassifier { public static String classify(Set s) { return "집합"; } public static String classify(List lst) { return "리스트"; } public static String classify(Collection c) { return "그 외"; } public static void main(String[] args) { Collection[] collections = { new HashSet(), n..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 51. 메서드 시그니처를 신중히 설계하라 API 설계 요령 1. 메서드 이름을 신중히 짓자. 항상 표준 명명 규칙을 따라야한다. 2. 편의 메서드를 너무 많이 만들지 말자. 너무 많으면 익히고, 사용하고, 문서화하고, 테스트하고 ,유지보수 하기 어렵다. 확신이 서지 않으면 만들지 말자. 3. 매개변수 목록은 짧게 유지하자. 4개 이하가 좋다. 같은 타입의 매개변수 여러 개가 연달아 나오는 경우가 특히 좋지 않다. → 실수로 순서를 바꿔 입력하는 경우, 그대로 컴파일되고 실행되어 의도와 다른 동작이 일어남 과하게 긴 매개변수 목록을 줄이는 방법 여러 메서드로 쪼갠다. 쪼개진 메서드 각각은 원래 매개변수 목록..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 48. 스트림 병렬화는 주의해서 적용하라 병렬화 자바 8부터 parallel 메서드만 한 번 호출하면 파이프라인을 병렬 실행시할 수 있는 스트림을 지원한다. 동시성 프로그래밍을 할 떄는 안정성과 응답 가능 상태를 유지해야 하는데, 병렬 스트림 파이프라인 프로그래밍에서도 마찬가지이다. ex 1) 스트림을 사용해 처음 20개의 메르센 소수를 생성하는 프로그램 public static void main(String[] args) { primes().map(p -> TWO.pow(p.intValueExact()).subtract(ONE)) .filter(mersenne -> mersenne.isProbablePr..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 47. 반환 타입으로는 스트림보다 컬렉션이 낫다. 원소 시퀀스 일련의 원소를 반환하는 메서드 ex) Collection, Set, List, Iterable, 배열 기본은 컬렉션 인터페이스이다. 자바 8이 스트림을 지원하기 시작하면서 적합한 타입을 선택하는 것은 복잡해졌다. 스트림은 반복을 지원하지 않기 때문에, 스트림과 반복을 알맞게 조합해야 좋은 코드가 나온다. ex 1) 자바 타입 추론 실패 예 for (ProcessHandle ph : ProcessHandle.allProcesses()::iterator) { // 프로세스를 처리한다. } 이 코드는 컴파일 오류가 발생한다. ex 2) 스트림을 반복..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 46. 스트림에서는 부작용 없는 함수를 사용하라 스트림 패러다임 스트림 패러다임의 핵심은 계산을 일련의 변환으로 재구성 하는 부분이다. 이 때, 각 변환 단계는 가능한 한 이전 단계의 결과를 받아 처리하는 순수 함수여야 한다. 순수 함수 오직 입력만이 결과에 영향을 주는 함수 다른 가변 상태를 참조하지 않고, 함수 스스로도 다른 상태를 변경하지 않는다. 이렇게 하려면 중간 단계든 종단 단계든 스트림 연산에 건네는 함수 객체는 모두 부작용이 없어야 한다. ex 1) 스트림 패러다임을 이해하지 못한 예 Map freq = new HashMap(); try (Stream words = new Scanner(fi..
멍목
'자바공부' 태그의 글 목록