Effective Java

· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 27. 비검사 경고를 제거하라 제네릭을 사용하기 시작하면, 컴파일러의 경고를 볼 수 있다. 그 중 비검사 경고에 대해서 알아볼 것이다. 비검사 경고 대부분의 비검사 경고는 쉽게 제거할 수 있으며, 컴파일러는 무엇이 잘못됐는 지 알려준다. (javac 명령줄 인수에 -Xlint:uncheck 옵션을 추가해야만 함) 컴파일러가 알려준대로 수정하면 경고는 사라진다. 비검사 경고를 모두 해결하여 제거한다면 그 코드는 타입 안정성이 보장된다. (런타임에 ClassCastException이 발생할 일이 없고 의도한 대로 잘 동작하리라 확신할 수 있다.) 즉, 할 수 있는 한 모든 비검사 경고를 해결하여 제거해야한다...
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 26. 로 타입은 사용하지 말라 관련 용어 모음집 한글 용어 영문 용어 예 아이템 매개변수화 타입 parameterized type List 아이템26 실제 타입 매개변수 actual type parameter String 아이템26 제네릭 타입 generic type List 아이템26, 29 정규 타입 매개변수 formal type parameter E 아이템26 비한정적 와일드카드 타입 unbounded wildcard type List 아이템26 로 타입 raw type List 아이템26 한정적 타입 매개변수 bounded type parameter 아이템29 재귀적 타입 한정 recursive ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 25. 톱레벨 클래스는 한 파일에 하나만 담으라 톱레벨 클래스 소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 컴파일러에서 오류는 발생하지 않지만, 아무런 득이 없고 심각한 위험을 감수해야 한다. 이렇게 하면 한 클래스를 여러 가지로 정의할 수 있으며, 그 중 어느 것을 사용할 지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라진다. ex 1) Main 클래스 하나를 담고 있고 Main 클래스는 다른 톱레벨 클래스 2개(Utensil과 Desser)를 참조한다. public class Main { public static void main(String[] args) { System.out.print..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 24. 멤버 클래스는 되도록 static으로 만들라 중첩 클래스(nested class) 중첩 클래스(nested class)란 다른 클래스 안에 정의된 클래스를 말한다. 중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여야 하며, 그 외의 쓰임새가 있다면 톱레벨 클래스로 만들어야 한다. 종류로는 정적 멤버 클래스, (비정적) 멤버 클래스, 익명 클래스, 지역 클래스 위 중 첫 번째를 제외한 나머지는 내부 클래스(inner class)에 해당한다. 정적 멤버 클래스 다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도 접근할 수 있다는 점만 제외하고는 일반 클래스와 똑같다. (다른 정적 멤버와 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 23. 태그 달린 클래스보다는 클래스 계층 구조를 활용하라 태그 달린 클래스 두 가지 이상의 의미를 표현할 수 있으며, 그 중 현재 표현하는 의미를 태그 값으로 알려주는 클래스가 있다. ex 1) 태그 달린 클래스(원과 사각형을 표현) class Figure { enum Shape { RECTANGLE, CIRCLE }; final Shape shape; // 태그 필드 - 현재 모양을 나타낸다. // 다음 필드들은 모양이 사각형(RECTANGLE)일 때만 쓰인다. double length; double width; // 다음 필드느 모양이 원(CIRCLE)일 때만 쓰인다. double radius; //..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 22. 인터페이스는 타입을 정의하는 용도로만 사용하라 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 이 지침에 맞지 않는 예로, 소위 상수 인터페이스라는 것이 있다. 상수 인터페이스 상수 인터페이스 : 메서드 없이, 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스를 말한다. 이 상수들을 사용하는 클래스에서는 정규화된 이름을 쓰는 걸 피하고자 그 인터페이스를 구현하곤 한다. ex 1) 상수 인터페이스 안티패턴 - 사용금지 public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double A..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라 인터페이스의 디폴트 메서드 자바 8 이전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 수 없었다. 인터페이스에 메서드를 추가하면 보통은 컴파일 오류가 나는데, 추가된 메서드가 우연히 기존 구현체에 이미 존재할 가능성은 아주 낮기 때문. 자바 8에서부터는 기존 인터페이스에 메서드를 추가할 수 있지만, 위험이 완전히 사라진 것은 아니다. 디폴트 메서드를 선언하면 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지않은 모든 클래스에서 디폴트 구현이 쓰이게 됨 (모든 기존 구현체들과 매끄럽게 연동되리라는 보장은 없음) 디폴트 메서드는 구현 클래..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 20. 추상 클래스보다는 인터페이스를 우선하라. 자바가 제공하는 다중 구현 매커니즘 추상 클래스 인터페이스 (자바 8부터 디폴트 메서드를 제공할 수 있음) 위 두 매커니즘의 가장 큰 차이 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 함 자바는 단일 상속만 지원하니, 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약을 가짐 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했던 간에 같은 타입으로 취급됨 인터페이스의 장점 1) 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. 인터페이스가 ..
멍목
'Effective Java' 태그의 글 목록