(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) 규칙64. 객체는 인터페이스를 사용해 참조하라 규칙51에서 매개변수 타입을 클래스가 아니라 인터페이스를 사용하라고 했다. 조언을 "객체는 클래스가 아닌 인터페이스로 참조하라"고까지 확장할 수 있음 인터페이스 타입 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라. 객체의 실제 클래스를 사용해야 할 상황은 '오직' 생성자로 생성할 때 뿐임 예) Set 인터페이스를 구현한 LinkedHashSet 변수를 선언 //좋은 예. 인터페이스를 타입으로 사용했다. Set sonSet = new LinkedHashSet(); //나쁜 예. 클래스를 타입으로 사용했다! LinkedHashSet sonSet = new LinkedHashSe..
(Effective Java) 규칙 62. 다른 타입이 적절하다면 문자열 사용을 피하라 문자열(String)은 텍스트를 표현하도록 설계되었고, 그 일을 아주 멋지게 해낸다. 다만 문자열은 워낙 흔하고 자바가 잘 지원해주어 원래 의도하지 않은 용도로도 쓰이는 경향이 있다. 문자열의 남용 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 많은 경우 파일, 네트워크, 키보드 입력으로부터 데이터를 받을 때 주로 문자열을 사용함 자연스러워 보이긴 하지만 입력받을 데이터가 진짜 문자열 일때만 그렇게 하는 게 좋음 기본 타입이든 참조타입이든 적절한 값 타입이 있다면 그것을 사용하고, 없다면 새로 하나 작성하라. 입력 데이터가 수치형이라면 int, float, BigInteger 등 적당한 수치 타입으로 변환해야 함..
(Effective Java) 규칙43. 람다보다는 메서드 참조를 사용하라 람다 람다가 익명 클래스보다 나은 점 중에서 가장 큰 특징은 간결함인데 람다보다도 더 간결하게 만들 수 있는 방법이 있다. 바로 메서드 참조(method reference) 임 예) 임의의 키와 Integer 값의 매핑을 관리하는 프로그램 값이 키의 인스턴스 개수로 해석된다면, 이 프로그램은 멀티셋(multiset)을 구현한게 됨 키가 맵 안에 없다면 키와 숫자1을 매핑하고, 이미 있다면 기존 매핑 값을 증가시킴 map.merge(key, 1, (count, incr) -> count + incr); 자바 8때 Map에 추가된 merge 메서드, 키, 값, 함수를 인수로 받아 수행하는 함수임 메서드 참조 위 코드는 깔끔한 코드지만..
JVM 이해하기 자바 JVM, JDK, JRE JVM (Java Virtual Machine) 자바 가상 머신 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행함 JVM 스펙(링크)은 정해져 있고 이에 맞춘 구현체(JVM 밴더)는 다양하게 존재함 (오라클, 아마존, Azul, 등) 플랫폼에 종속적임 실행시 네이티브 코드로 변경을 하게 되는데 이를 OS에 맞추어 실행해야 되기 때문 JRE (Java Runtime Environment) 자바 애플리케이션을 실행하기 위한 최소한의 구성 (JVM + 라이브러리) JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있음 오라클은 자바 11부터는 JDK만 제공하며..
(Effective Java) 규칙15. 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트란 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개의치 않는다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다. 정보은닉의 장점 대부분의 장점은 시스템을 구성하는 컴포넌트들을 서로 독립시켜서 개발, 테스트, 최적화, 적용, 분석, 수정을 개별적으로 할 수 있게 해준다. 1. 시스템의 개발 속도를 높임 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 2. 시스템 관리 비용을 낮춤..
- Total
- Today
- Yesterday
- 배낭여행
- 일본 배낭여행
- intelij
- 자바
- TableView
- 이펙티브
- JavaFX Window Close
- effective java
- JavaFX 테이블뷰
- 이펙티브 자바
- windows
- springboot
- Java UI
- 텐트
- 이펙티브자바
- 일본여행
- git
- 방통대 과제물
- 스프링부트
- 일본 자전거 여행
- 자전거 여행
- java
- effectivejava
- 배낭 여행
- JavaFX 종료
- 인텔리제이
- 일본 여행
- JavaFX
- 자전거
- JavaFX Table View
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |