본문 바로가기

분류 전체보기150

이펙티브 자바 아이템 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.
이펙티브 자바 아이템 22 - 인터페이스는 타입을 정의하는 용도로만 사용하라 - 핵심 정리 아이템 22 - 인터페이스는 타입을 정의하는 용도로만 사용하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) static final double BOLTZMANN_CONSTANT = 1.380_648_52e-23; // 전자 질량 (kg) static final double ELECTRON_MASS = 9.109_383_56e-31; } 위와 같이 인터페이스를 상수를 정의하는 용도 로 사용하는 경우가 있다. publ.. 2022. 11. 30.
이펙티브 자바 아이템 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라 - 완벽 공략 아이템 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. ConcurrentModificationException ConcurrentModificationException 은 컬렉션을 다룰 때 주로 발생하는 예외이다. 컬렉션을 순회하다 어떤 엘리먼트를 삭제하고 싶을 때 주로 발생할 수 있다. ConcurrentModificationException 는 컬렉션에 국한된 예외는 아니다. ConcurrentModificationException 은 현재 객체의 상태가 바뀌면 안되는 것을 수정 할 때 발생하는 예외이다. 어떤 스레드에서 컬렉션을 순회하는 도중에 다른 스레드가 해당 컬렉션을 변경하려고.. 2022. 11. 29.