(Effective Java) 규칙12. toString을 항상 재정의하라 toString() java.lang.Object 클래스의 toString 메서드는 일반적으로 사용자가 보려는 문자열이 아니다. 클래스 이름 다음에 @기호와 16진수로 표현된 해시 코드가 붙은 문자열 (예: "PhoneNumber@163b91") toString의 일반 규약을 보게 되면 "사람이 읽기 쉽도록 간략하지만 유용한 정보를 제공해야 한다"라고 되어 있다. PhoneNumber@adbbd 보다는 707-867-5309가 훨씬 유익한 정보를 담고 있는 것처럼 더불어 toString 일반 규약에는 "모든 하위 클래스는 이 메서드를 재정의함이 바람직하다"라는 구절도 있음 toString()을 재정의 해야 하는 이유 toStrin..
(Effective Java) 규칙7. 다 쓴 객체 참조를 해제하라 C, C++ 처럼 손수 메모리 관리를 해야 하는 언어를 쓰다 쓰레기 수집가 포함된 언어를 사용하기 시작하면 프로그래밍이 아주 쉬워진다. 볼 일 없는 객체는 자동적으로 반환되기 때문에 메모리 누수가 발생하는 Stack 클래스 //"메모리 누수(memory leak)가" 어디서 생기는지 보이는가? 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]; } p..
(Effective Java) 규칙22. 인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스의 목적 인터페이스를 구현하는 클래스를 만들게 되면, 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형(type) 역할을 하게 된다. 해당 클래스의 객체로 어떤 일을 할 수 있는지 클라이언트에게 알리는 행위임 인터페이스의 목적은 여기까지이며 다른 목적으로 인터페이스를 정의 하고 사용하는 것은 적절치 못함 인터페이스를 잘못 사용하는 예 상수 인터페이스(constant interface) 형태 메서드가 없고, static final 필드만 있는 형태로 모든 필드는 상수 정의임 대체로 상수 이름 앞에 클래스 이름을 붙이는 번거로움을 피하기 위해서임 //상수 인터페이스 안티패턴 - 사용하지 말 것! pub..
(Effective Java) 규칙20. 추상 클래스 보다는 인터페이스를 우선하라 추상 클래스, 인터페이스 자바 언어에는 여러 가지 구현을 허용하는 자료형을 만드는 방법이 두가지 포함되어 있음. 인터페이스, 추상클래스(abstract class) 이 두 방법의 분명한 차이는 추상 클래스는 구현된 클래스를 포함할 수 있지만 인터페이스는 아니라는 것임. 자바 1.8 부터는 'default' 메서드를 통해 인터페이스에도 구현을 포함시킬 수 있음 좀 더 중요한 차이는 추상 클래스를 자료형으로 사용하기 위해서는 반드시 계승이 필요하다는 것이다. 인터페이스는 포함된 모든 메서드를 정의하고 인터페이스가 규정하는 일반 규약을 지키기만 하면됨 자바는 다중 상속(multiple inheritance)를 허용하지 않기 때문..
(Effective Java) 규칙18. 상속보다는 컴포지션을 사용하라 계승(Inheritance) 계승(Inheritance)은 재사용을 돕는 강력한 도구지만, 항상 최선이라고 할 순 없다. 계승을 적절히 사용하지 못한 소프트웨어는 깨지기 쉬움. 계승은 상위 클래스와 하위 클래스 구현을 같은 프로그래머가 통제하는 단일 패키지 안에 있을 경우 안전하다. 일반 객체 생성 클래스(concrete class)라면, 해당 클래스가 속한 패키지 밖에서 계승을 시도하는 것은 위험하다. 이 책에서는 계승(Inheritance)이라는 용어를 구현 계승 (implementation Inheritance)의 의미로 사용 즉 한 클래스가 다른 클래스를 'extends' 한다는 소리, 인터페이스 끼리의 계승은 해당하지 않음 ..
(EffectiveJava) 규칙 1. 생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩터리 메서드 클래스를 통해 객체를 만드는 일반적인 방법은 public 으로 선언된 생성자 (constructor)를 이용하는 방법이다. 그러나 모든 프로그래머가 반드시 알고 있어야 하는 방법이 하나 있다. 클래스에 public으로 선언된 정적 팩터리 메서드(static factory method)를 추가하는 것 Boolean(Java의 기본 타입 중 하나인 boolean을 클래스화 한 것) 클래스에 대한 간단한 예제 //boolean의 값을 Boolean 객체에 대한 참조로 변환 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean...
(Effective Java) 규칙6. 불필요한 객체 생성을 피하라 불필요한 객체.. 기능적으로 동일한 객체는 필요할 때마다 만드는 것보다 재사용하는 편이 낫다. 객체를 재사용하는 프로그램은 더 빠르고 우아함 변경 불가능 (immutable) 객체는 언제나 재사용할 수 있음 절대적으로 피해야 할 극단적 예 String s = new String("Sample string"); 위 문장은 실행될 때마다 String 객체를 만듬 "Sample string"은 그 자체로 String 객체임 바람직한 예 String s = "Sample String"; 위 문장은 실행될 때마다 객체를 만드는 대신, 동일한 String 객체를 사용함 같은 머신(VM)에서 실행되는 모든 코드가 해당 객체를 재사용하게 됨 "Samp..
(Effective Java) 규칙4. 인스턴스화를 막으려거든 private 생성자를 사용하라 유틸리티 클래스 정적 메서드나 필드만 모은 클래스를 만들고 싶을 때가 있음 (악명이 높지만 분명 필요할 때가 있음) 자바의 기본 자료형 값 (primitive value) 또는 배열에 적용되는 메서드를 한군데 모아둘 때 유용 (예. java.lang.Math, java.util.Arrays) 특정 인터페이스를 구현하는 객체를 만드는 팩터리 메서드 등의 정적 메서드를 모아놓을 때도 유용 (예. java.util.Collections) final 클래스에 적용할 메서드들을 모아놓을 때도 활용 문제 이런 유틸리티(Utility) 클래스는 객체를 만들 목적의 클래스가 아님 그러나 생성자를 생략하면 컴파일러는 자동으로 ..
- Total
- Today
- Yesterday
- JavaFX Window Close
- java
- 일본 자전거 여행
- JavaFX 종료
- springboot
- 배낭여행
- git
- 일본여행
- JavaFX Table View
- 이펙티브 자바
- Java UI
- 자전거
- 일본 여행
- 이펙티브
- 자바
- intelij
- effectivejava
- effective java
- 배낭 여행
- 텐트
- 스프링부트
- 자전거 여행
- JavaFX
- JavaFX 테이블뷰
- 이펙티브자바
- TableView
- 일본 배낭여행
- 인텔리제이
- windows
- 방통대 과제물
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |