분류 전체보기152 이펙티브 자바 아이템 29 - 이왕이면 제네릭 타입으로 만들라 - 완벽 공략 아이템 29 - 이왕이면 제네릭 타입으로 만들라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 한정적 타입 매개변수 한정적 타입 매개변수는 제네릭 타입을 특정 타입으로 한정지을 수 있는 기능이다. public class Stack { private E[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; // 코드 29-3 배열을 사용한 코드를 제네릭으로 만드는 방법 1 (172쪽) // 배열 elements는 push(E)로 넘어온 E 인스턴스만 담는다. // 따라서 타입 안전성을 보장하지만, // 이 배열의 런타임 타입은 E[]가.. 2022. 12. 14. 이펙티브 자바 아이템 29 - 이왕이면 제네릭 타입으로 만들라 - 핵심 정리 아이템 29 - 이왕이면 제네릭 타입으로 만들라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 어떤 클래스들을 만들다보면 그 클래스 안에 다른 객체들을 담는 역활을 하는 클래스를 만드는 경우가 많다. 대표적으로 Stack 같이 자료구조 안에 다른 객체들을 담는 역활을 하는 클래스를 작성하는 경우이다. 무언가 다른것들을 담는 역활을 하는 클래스들은 제네릭 타입 으로 만들면 유용하다. 특히 그 안에 Object 타입으로 무언가를 담고있다면 더더욱 명확하게 제네릭 타입 을 사용하도록 유도하면 런 타임 시에 ClassCastException 이 발생하는 것을 많이 줄일 수 있다. public class Stack { private Object[].. 2022. 12. 13. 이펙티브 자바 아이템 28 - 배열보다는 리스트를 사용하라 - 완벽 공략 아이템 28 - 배열보다는 리스트를 사용하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. @SafeVarags Varags 는 가변인자이다. 매서드 매개변수로 불특정 다수를 받을 수 있는 인자이다. 여기에 제네릭을 썻을 때 복잡한 문제가 생기게 된다. 제네릭과 배열 은 잘 어울리지 않지만 같이 사용할 수 있는 유일한 경우의 수가 가변 인자 이다. class Main { public static void main(String[] args) { List[] stringLists = new ArrayList[1]; // 컴파일 에러 } } 위의 코드처럼 제네릭 타입의 배열을 만들 수 없다. public class SafeVaragsExampl.. 2022. 12. 12. 이펙티브 자바 아이템 28 - 배열보다는 리스트를 사용하라 - 핵심 정리 아이템 28 - 배열보다는 리스트를 사용하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 배열과 리스트는 잘 어울리지 않는다. 배열은 공변(covariant), 제네릭은 불공변 공변은 같이 변한다 라는 뜻이다. public class IntegerToString { public static void main(String[] args) { // 공변 Object[] anything = new String[10]; anything[0] = 1; // 컴파일러가 못잡는 버그, 런타임 에러 발생 } } 배열은 상속 관계 에 따라 같이 변한다. 위의 코드에서 String 은 Object 를 상속하고 있다. 때문에 String 의 타입을 Objec.. 2022. 12. 12. 이펙티브 자바 아이템 27 - 비검사 경고를 제거하라 - 완벽 공략 아이템 27 - 비검사 경고를 제거하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 에너테이션 @Documented public @interface MyAnnotation { } @Documented 을 붙여주면 해당 애노테이션을 사용한 자바 코드의 javadoc 을 만들 때 해당 애노테이션 정보가 포함된다. @Retention @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { } @Retention 은 해당 애노테이션의 정보를 언제까지 참조할 수 있게 할 것이냐에 대한 설정이다. 총 3가지가 있다. Runtime 기본값이며 가장 폭이 넓다. 애노테이션을 사용한 코.. 2022. 12. 9. 이펙티브 자바 아이템 27 - 비검사 경고를 제거하라 - 핵심 정리 아이템 27 - 비검사 경고를 제거하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 컴파일러가 컴파일 할 때 에러 와 경고 두가지로 나누어진다. 에러 는 컴파일이 실패하는 것이고, 경고 는 컴파일에 실패하지는 않지만 권장하지 않고, 위험성이 있을 때 나타난다. 경고 는 컴파일러시 경고 메세지 를 출력할 수 있다. 이 경고 중에서도 비검사 (unchecked) 란 컴파일러가 타입 안정성을 확인하는데 필요한 정보가 충분치 않을 때 발생하는 경고이다. public class SetExample { public static void main(String[] args) { Set names = new HashSet(); Set strings = .. 2022. 12. 8. 이펙티브 자바 아이템 26 - 로 타입은 사용하지 말라 - 완벽 공략 아이템 26 - 로 타입은 사용하지 말라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. Generic DAO 만들기 public interface Entity { Long getId(); } public class Account implements Entity { private Long id; private String username; public Account(Long id, String username) { this.id = id; this.username = username; } @Override public Long getId() { return this.id; } public String getUsername() { return.. 2022. 12. 7. 이펙티브 자바 아이템 26 - 로 타입은 사용하지 말라 - 핵심 정리 아이템 26 - 로 타입은 사용하지 말라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 제네릭은 자바 5 버전 부터 들어온 기능이다. public class GenericBasic { public static void main(String[] args) { // Generic 사용하기 전 List numbers = new ArrayList(); numbers.add(10); numbers.add("whiteship"); for (Object number: numbers) { System.out.println((Integer)number); // 오류 발생 } } } 제네릭이 도입되기 전에는 위와같이 List 를 타입없이 정의를 했다. 이렇.. 2022. 12. 7. 이펙티브 자바 아이템 25 - 톱 레벨 클래스는 한 파일에 하나만 담으라 - 핵심 정리 아이템 25 - 톱 레벨 클래스는 한 파일에 하나만 담으라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 톱 레벨 클래스는 파일에 정의되어 있는 가장 바깥 클래스를 의미한다. // 코드 25-1 두 클래스가 한 파일(Utensil.java)에 정의되었다. - 따라 하지 말 것! (150쪽) class Utensil { static final String NAME = "pan"; } class Dessert { static final String NAME = "cake"; } 이렇게 같은 파일에 클래스가 2개가 있어도 컴파일 할 때는 문제가 없다. 그러나 이렇게하면 안된다. 한 파일에는 톱 레벨 클래스 하나만 유지해야한다. 한 파일에 톱 레.. 2022. 12. 2. 이펙티브 자바 아이템 24 - 멤버 클래스는 되도록 static 으로 만들라 - 완벽 공략 아이템 24 - 멤버 클래스는 되도록 static 으로 만들라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 어댑터 패턴 어댑터 패턴은 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꾸는 패턴이다. public class MySet extends AbstractSet { @Override public Iterator iterator() { return new MyIterator(); } @Override public int size() { return 0; } private class MyIterator implements Iterator { @Override public boolean hasNext() { return fals.. 2022. 12. 2. 이펙티브 자바 아이템 24 - 멤버 클래스는 되도록 static 으로 만들라 - 핵심 정리 아이템 24 - 멤버 클래스는 되도록 static 으로 만들라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 멤버 클래스란 클래스를 구성하는 요소이다. 클래스를 구성하는 요소에는 필드, 메서드들 이 있다. 클래스도 이것과 같은 급으로 정의가 되어있다면 멤버 클래스 이다. 멤버는 클래스의 구성요소를 의미한다. 중첩 클래스는 어느 한 클래스의 내부 어딘가에 또다른 클래스가 정의되어 있다면 중첩 클래스 이다. 모든 중첩 클래스는 멤버 클래스라고 생각되기 쉽지만 그건 아니다. 변수를 예로들면 변수가 정의된 위치에 따라 멤버 변수, 로컬 변수 등으로 나뉜다. 어떠한 scope 이 메서드에 포함되어 있으면 로컬 변수 라고 부른다. scope 이 클래.. 2022. 12. 2. 이펙티브 자바 아이템 23 - 태그 달린 클래스보다는 클래스 계층 구조를 활용하라 - 핵심 정리 아이템 23 - 태그 달린 클래스보다는 클래스 계층 구조를 활용하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 태그달린 클래스란 그 클래스가 가지고 있는 필드 중 일부가 그 클래스의 구체적인 타입을 나타내는 것을 말한다. class Figure { enum Shape { RECTANGLE, CIRCLE }; // 태그 필드 - 현재 모양을 나타낸다. final Shape shape; // 다음 필드들은 모양이 사각형(RECTANGLE)일 때만 쓰인다. double length; double width; // 다음 필드는 모양이 원(CIRCLE)일 때만 쓰인다. double radius; // 원용 생성자 Figure(double rad.. 2022. 11. 30. 이전 1 2 3 4 5 6 ··· 13 다음