일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 자바 ORM 표준 JPA 프로그래밍
- JPQL
- java
- 영속성
- jdbc
- 최범균
- 30기
- rabbitmq-delayed-message-exchange
- JPA
- cicd
- Domain Driven Design
- scheduling messages with rabbitmq
- 도메인 주도 개발 시작하기
- 자동처리
- reactive operaton
- 교육기획팀원
- RESTClient
- 한국대학생it경영학회
- 객체지향 쿼리 언어
- 밋업프로젝트
- Spring Batch
- GitHub Actions
- delayed message plugin
- kusitms
- springboot
- 큐시즘
- 이펙티브자바
- Spring
- ddd
- 교육기획팀
- Today
- Total
목록이펙티브자바 (7)
코딩은 마라톤
아이템 29. 이왕이면 제네릭 타입으로 만들라Object 기반 스택 public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { elements[size++] = e; } public Object pop() { if (size == 0) { throw..
5장 제네릭자바 5부터 사용 가능제네릭을 사용하면 컴파일러에게 타입을 알려주어 더 안전하고 명확한 프로그램을 만들어 준다. 아이템 26. 로 타입은 사용하지 마라제네릭 타입클래스, 인터페이스 선언에 타입 매개변수가 쓰인 것List 인터페이스는 원소의 타입을 나타내는 타입 매개변수 E를 받는다. 제네릭 타입은 일련의 매개변수화 타입(parameterized type)을 정의한다.클래스(혹은 인터페이스) 이름에, 꺾쇠괄호 안에 실제 타입 매개변수 나열ex) List : String이 정규 타입 매개변수 E에 해당하는 실제 타입 매개변수 로 타입(raw type)제네릭 타입에서 타입 매개변수를 전혀 사용하지 않는 타입타입 선언에서 제네릭 타입 정보가 전부 지워진 것처럼 동작private final List l..
아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라인터페이스는 자신을 구현할 클래스의 인스턴스를 참조할 수 있는 "타입" 역할을 한다.클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에게 알려주는 것! 위 용도로 인터페이스를 사용해야 한다. 안티 패턴 - 상수 인터페이스static final 필드로만 가득 찬, 메서드는 없는 인터페이스public interface NumberConstants { static final double ONE_NUMBER = 1.111111; static final double TWO_NUMBER = 2.222222; static final double THREE_NUMBER = 3.333333;} 클래스..

아이템 13. clone 재정의는 주의해서 진행하라Cloneable : 복제해도 되는 클래스임을 명시하는 용도의 인터페이스-> 의도한 목적을 제대로 이루지 못함. 가장 큰 문제 : clone 메서드가 선언된 곳이 Cloneable이 아닌 Object이고, protected 접근제어자그래서 Cloneable을 구현하는 것만으로는 외부 객체에서 clone 메서드를 호출할 수 없다. Cloneable이 하는 일Cloneable 인터페이스를 구현하지 않고 Object's clone 메서드 사용시 'CloneNotSupportedException' 발생Object의 protected 메서드인 clone의 동작 방식을 결정Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 그 객체의 필드들을 하..

아이템 7. 다 쓴 객체 참조를 해제하라public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if(size == 0) th..
아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라저번 블로그에 작성했었던 유틸 클래스의 경우 정적 메서드와 정적 필드만을 갖고 있습니다.이러한 유틸 클래스는 인스턴스를 생성해 사용하는 것이 아닌 유틸 클래스의 정적 메서드와 정적 필드를 사용합니다.그런데 Util이란 단어가 클래스에 붙지 않고, 그냥 클래스와 똑같이 생겨서 외부에서 인스턴스화 하여 사용할 수 있습니다.왜냐하면 생성자가 없이 정적 필드와 메서드만 있어도 기본 생성자가 컴파일러에 의해 자동으로 생성되기 때문입니다.public class Util { // 컴파일러가 생성해주는 기본 생성자 public Util() {} 기본 생성자의 접근 제어자는 Public이기 때문에 외부에서 인스턴스화할 수 있습니다. 이를 방지..
아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라정적 팩터리 메서드 : 그 클래스의 인스턴스를 반환하는 정적 메서드 장점(5)1. 반환될 객체의 특성을 쉽게 묘사할 수 있는 "이름" 을 지을 수 있다.// 생성자new Bake(String, String, String)// 정적 팩터리 메서드Bake.bakeCookie(String, String, String) 2. 호출될 때마다 새로 인스턴스를 생성하지 않아도 된다.public static Boolean valueOf(boolean value) { return value ? true : false;}// valueOf 메서드는 true, false를 미리 만들어놓고 반환하기 때문에 // 자주 요청해도 요청 횟수만큼 생성되는 것이 아니라 성능 향상의..