(Effective Java) 규칙23. 태그달린 클래스보다는 클래스 계층구조를 활용하라 태그 달린 클래스 두 가지 이상의 의미를 표현할 수 있으며, 그중 현재를 표현하는 의미를 태그 값으로 알려주는 클래스를 본 적이 있을 것이다. class Figure { enum Shape { RECTANGLE, CIRCLE }; // 태그 필드 - 현재 모양을 나타낸다. final Shape shape; // 다음 필드들은 모양이 사각형(RECTANGLE)일 때만 쓰인다. double length; double width; // 다음 필드들은 모양이 사각형(CIRCLE)일 때만 쓰인다. double radius; // 원용 생성자 Figure(double radius) { shape = Shape.CIRCLE; t..
(Effective Java) 규칙24. 멤버 클래스는 되도록 static으로 만들라 중첩 클래스 중첩 클래스(nested class)란 다른 클래스 안에 정의된 클래스를 말한다. 자신을 감싼 바깥 클래스에서만 쓰여야 하며, 그 외의 쓰임새가 있다면 톱레벨 클래스로 만들어야 함 중첩 클래스의 종류 아래 중 첫번째를 제외한 나머지는 모두 내부 클래스(inner class)에 해당한다. 정적 멤버 클래스 다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도 접근할 수 있다. 그 외에는 일반 클래스와 동일하다. 다른 정적 멤버와 똑같은 접근 규칙을 적용 받는다. private으로 선언하면 바깥 클래스에서만 접근할 수 있음 흔히 바깥 클래스와 함께 쓰일 때만 유용한 public 도우미 클래스로 쓰인..
(Effective Java) 규칙25. 톱레벨 클래스는 한 파일에 하나만 담으라 소스 파일 하나에 여러 클래스 선언 소스 파일 하나에 톱레벨 클래스를 여러 개 선언하더라도 자바 컴파일러는 불평하지 않는다. 다만, 아무런 득이 없을 뿐더러 심각한 위험을 감수해야 하는 행위다. 한 클래스를 여러 가지로 정의할 수 있으며, 그중 어느 것을 사용할지는 어느 소스 파일을 먼저 컴파일하냐에 따라 달라지기 때문 문제 상황 아래 소스 파일은 Main클래스 하나를 담고 있고, 다른 톱레벨 클래스는 다른 톱레벨 클래스 2개(Utensil과 Dessert)를 참조한다. public class Main { public static void main(String[] args) { System.out.println(Utensi..
(Effective Java) 규칙26. 로 타입은 사용하지 말라 제네릭 타입 클래스와 인터페이스 선언에 타입 매개변수(type parameter)가 쓰일때 이것을 제네릭 클래스, 제네릭 인터페이스라고 한다. 제네릭 클래스, 인터페이스를 통틀어 제네릭 타입이라 함 List 인터페이스는 원소의 타입을 나타내는 타입 매개변수 E를 받음 이 인터페이스는 List지만, 짧게 List라고 자주 씀 제네릭 타입의 특징 각각의 제네릭 타입은 일련의 매개변수화 타입 (parameterized type)을 정의 한다. 먼저 클래스(혹은 인터페이스) 이름이 나오고, 이어서 꺽쇠괄호 안에 실제 타입 매개변수들을 나열함 List은 원소의 타입이 String인 리스트를 뜻하는 매개변수화 타입임 String이 정규(formal)..
(Effective Java) 규칙63. 문자열 연결은 느리니 주의하라 문자열 연결 연산자 문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다. 그런데 작고 크기가 고정된 객체의 문자열 표현을 만들때라면 괜찮지만, 본격적으로 사용하기 시작하면 성능 저하를 감내하기 어렵다. 성능 문제 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. 문자열은 불변(규칙 17)이라서 두 문자열을 연결할 경우 양쪽의 내용을 모두 복사해야 하므로 성능 저하는 피할 수 없는 결과이다. 예) 문자열 연결을 잘못 사용한 예 public String statement() { String result = ""; for (inti = 0; i < numItems(); i++) result +=lin..
(Effective Java) 규칙64. 객체는 인터페이스를 사용해 참조하라 규칙51에서 매개변수 타입을 클래스가 아니라 인터페이스를 사용하라고 했다. 조언을 "객체는 클래스가 아닌 인터페이스로 참조하라"고까지 확장할 수 있음 인터페이스 타입 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. 객체의 실제 클래스를 사용해야 할 상황은 '오직' 생성자로 생성할 때 뿐임 예) Set 인터페이스를 구현한 LinkedHashSet 변수를 선언 //좋은 예. 인터페이스를 타입으로 사용했다. Set sonSet = new LinkedHashSet(); //나쁜 예. 클래스를 타입으로 사용했다! LinkedHashSet sonSet = new LinkedHashSe..
(Effective Java) 규칙 62. 다른 타입이 적절하다면 문자열 사용을 피하라 문자열(String)은 텍스트를 표현하도록 설계되었고, 그 일을 아주 멋지게 해낸다. 다만 문자열은 워낙 흔하고 자바가 잘 지원해주어 원래 의도하지 않은 용도로도 쓰이는 경향이 있다. 문자열의 남용 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 많은 경우 파일, 네트워크, 키보드 입력으로부터 데이터를 받을 때 주로 문자열을 사용함 자연스러워 보이긴 하지만 입력받을 데이터가 진짜 문자열 일때만 그렇게 하는 게 좋음 기본 타입이든 참조타입이든 적절한 값 타입이 있다면 그것을 사용하고, 없다면 새로 하나 작성하라. 입력 데이터가 수치형이라면 int, float, BigInteger 등 적당한 수치 타입으로 변환해야 함..
(Effective Java) 규칙77. 예외를 무시하지 말라 예외 무시의 위험성 너무 뻔한 조언 같지만 사람들이 자주 어기고 있다. API 설계자가 메서드 선언에 예외를 명시하는 까닭은, 그 메서드를 사용할 때 적절한 조취를 취해달라고 말하는 것이다. API 설계자의 목소리를 흘려버리지 말자. 안타깝게도 예외를 무시하기란 아주 쉽다. 해당 메서드 호출을 try문으로 감싼 후 catch 블록에서 아무 일도 하지 않으면 끝임 // catch 블록을 비워두면 예외가 무시된다. 아주 의심스러운 코드다! try { ... } catch (SomeException e) { } 예외는 문제 상황에 잘 대처하기 위해서 존재하는데 catch 블록을 비워두면 예외가 존재할 이유가 없어진다. 운이 좋아 별 탈이 없으면 다..
- Total
- Today
- Yesterday
- effectivejava
- springboot
- 일본 자전거 여행
- intelij
- 스프링부트
- JavaFX
- 텐트
- 자바
- 일본여행
- 배낭 여행
- effective java
- JavaFX 종료
- 배낭여행
- 인텔리제이
- 일본 배낭여행
- 이펙티브 자바
- TableView
- Java UI
- 일본 여행
- JavaFX Table View
- 자전거
- JavaFX Window Close
- 이펙티브자바
- java
- git
- 방통대 과제물
- 자전거 여행
- 이펙티브
- windows
- JavaFX 테이블뷰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |