일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링부트와AWS로혼자구현하는웹서비스
- AWS
- 인프런백기선
- 이펙티브 자바
- AWS RDS
- aop
- MariaDB
- 클린코드
- 인프런김영한
- mysql
- 도메인 주도 개발 시작하기
- 이펙티브자바
- 인덱스
- 자바예외
- vue.js
- 자바스터디
- 혼공SQL
- 기술면접
- 알고리즘분석
- 이팩티브 자바
- 네트워크
- DDD
- react
- 자바
- CleanCode
- 알고리즘
- jpa
- 자료구조
- SQL쿡북
- java
- Today
- Total
목록이펙티브자바 (17)
기록이 힘이다.
자바 8 전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때 취할 수 있는 선택지가 두 가지 있었다. 예외를 던지거나, (반환 타입이 객체 참조라면) null을 반환하는 것이다. 자바 버전이 8로 올라가면서 또 하나의 선택지가 생겼다. 그 주인공인 Optional는 null이 아닌 T타입 참조를 하나 담거나, 혹은 아무것도 담지 않을 수 있다. 옵셔널은 원소를 최대 1개 가질 수 있는 ‘불변’ 컬렉션이다. 보통은 T를 반환해야 하지만 특정 조건에서는 아무것도 반환하지 않아야 할 때 T 대신 Optional를 반환하도록 선언하면 된다. 옵셔널을 반환하는 메서드는 예외를 던지는 메서드보다 유연하고 사용하기 쉬우며, null을 반환하는 메서드보다 오류 가능성이 작다. public static Optiona..
현업에서 자바를 쓰는 분들과 함께 자바스터디를 시작한지 3주가 되었다. '이펙티브 자바'를 챕터별로 나눠서 읽고 있다. 몰랐던 자바에 대한 정보를 많이 알게 되는데 같이 하는 분들은 이미 알고 있는 눈치였다. 내가 많이 작아지는 것을 느끼면서 스터디 발표를 준비할 때 좀 더 세심하게 신경써야 겠다는 생각이 들었다. 그저 책에 한정해 이해하려고 노력하는 '나'였는데 같이 하는 분들은 책을 넘어서 현업에서의 적용, 자기만의 생각을 곁들여 발표를 하여 많이 배울 수 있는 시간을 가질 수 있었다. 주체적으로 모임을 만들고 하고자 하는 마음만 앞선 게 아닌가 하는 반성의 시간을 가졌고 앞으로 단순히 열심히하는 것에 그치지 않고 올바른 방향으로 가고 있는지 생각하면서 '잘' 해내기 위해 노력해야 겠다고 다짐했다. ..
스트림 API는 다량의 데이터 처리 작업(순차적이든 병렬적이든)을 돕고자 자바8에 추가되었다. 스트림은 데이터 원소의 유한 혹은 무한 시퀀스를 뜻한다. 스트림 파이프라인은 이 원소들로 수행하는 연산 단계를 표현하는 개념이다. 스트림 파이프라인은 지연 평가된다. 기본적으로 스트림 파이프라인은 순차적으로 수행된다. 어떠한 계산이라도 해낼 수 있다. 하지만 잘못 사용하면 읽기 어렵고 유지보수도 힘들어 진다. ex) 아나그램이란 철자를 구성하는 알파벳이 같고 순서만 다른 단어를 말한다. package effectivejava.chapter7.item45.anagrams; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Pa..
필요한 용도에 맞는게 있다면, 직접 구현하지 말고 표준 함수형 인터페이스를 활용하라. 그러면 API가 다루는 개념의 수가 줄어들어 익히기 더 쉬워진다. 또한 표준 함수형 인터페이스들은 유용한 디폴트 메서드를 많이 제공하므로 다른 코드와의 상호운용성도 크게 좋아질 것이다. java.util.function 패키지에는 총 43개의 인터페이스가 담겨 있다. 이 중 개본 인터페이스 6개만 기억하면 나머지는 충분히 유추해낼 수 있다. 기본 인터페이스는 기본 타입인 int, long, double용으로 각 3개씩 변형이 생겨난다. 인터페이스 함수 시그니처 예 UnaryOperator T apply(T t) String::toLowerCase BinaryOperator T apply(T t1, T t2) BigInt..
아이템 34 int 상수 대신 열거 타입을 사용하라 정수 열거 패턴을 사용한 프로그램은 깨지기 쉽다. public static final int APPLE_FUJI = 0; public static final int ORANGE_BLOOD = 2; 다행히 자바는 열거 패턴의 자점을 말끔히 씻어주는 동시에 여러 장점을 안겨주는 대안 제시 - 열거 타입 public enum Apple{FUJI, PIPPIN, GRANNY_SMITH} public enum Orange{NAVEL, TEMPLE, BLOOD} 겉보기에는 C, C++, C# 같은 다른 언어의 열거 타입과 비슷하지만, 보이는 것이 다가 아니다. 자바의 열거 타입은 완전한 형태의 클래스라서(단순한 정숫값일 뿐인) 다른 언어의 열거 타입보다 훨씬 강력..
이처럼 퇴보한 클래스는 public이어서는 안 된다! class Point{ public double x; public double y; } 캡슐화의 이점을 제공하지 못한다. 모두 private으로 바꾸고 public 접근자(getter)를 추가한다. package effectivejava.chapter4.item16; // 코드 16-2 접근자와 변경자(mutator) 메서드를 활용해 데이터를 캡슐화한다. (102쪽) class Point { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double g..
어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐다. (정보은닉, 혹은 캡슐화) 정보 은닉의 장점 -시스템 개발 속도를 높인다. -시스템 관리 비용을 낮춘다. -정보 은닉 자체가 성능을 높여주지는 않지만, 성능 최적화에 도움을 준다. -소프트웨어 재사용성을 높인다. -큰 시스템을 제작하는 난이도를 낮춰준다. 자바는 접근 제어 메커니즘은 클래스, 인터페이스, 멤버의 접근성(접근 허용 범위)를 명시한다. 각 요소의 접근성은 그 요소가 선언된 위치와 접근 제한자(private, protected, public)로 정해진다. 이 접근 제한자를 제대로 활용하는 것이 정보 은닉의 핵심이다. 모든 클래스와 멤버의 접근성..

p9, 열거 타입은 인스턴트가 하나만 만들어짐을 보장한다. p9, 같은 객체가 자주 요청되는 상황이라면 플라이웨이트 패턴을 사용할 수 있다. p10, 자바 8부터는 인터페이스가 정적 메서드를 가질 수 없다는 제한이 풀렸기 때문에 인스턴스화 불가 동반 클래스를 둘 이유가 별로 없다. p11, 서비스 제공자 프레임워크를 만드는 근간이 된다. p12, 서비스 제공자 인터페이스가 없다면 각 구현체를 인스턴스로 만들 때 리플렉션을 사용해야 한다. p12, 브리지 패턴 p12, 의존 객체 주입 프레임워크 완벽 공략 1. 열거 타입 Enumeration -상수 목록을 담을 수 있는 데이터 타입. -특정한 변수가 가질 수 있는 값을 제한할 수 있다. 타입-세이프티(Type-Safety)를 보장할 수 있다. -싱글톤 패..