주어진 객체를 표현할 적절한 인터페이스가 있는지 찾아서 그 인터페이스로 참조하면 더 유연하고 세련된 프로그램을 만들 수 있다. 🔎 인터페이스 타입 선언 vs 클래스 타입 선언 앞서, 아이템 51에서 매개변수의 타입으로는 클래스보다 인터페이스가 더 낫다고 했다. 매개변수로 적합한 인터페이스가 있다면 이를 구현한 클래스가 아닌 그 인터페이스를 직접 사용한다. 여기서 더하여, 적합한 인터페이스만 있다면 매개변수뿐만 아니라 반환 값, 변수, 필드를 전부 인터페이스 타입으로 선언하는 것이 좋다. 객체의 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 예를 들어, LinkedHashSet을 선언하는 두 가지 방법이 있다. /* 좋은 예 : 인터페이스를 타입으로 사용 */ Set sonSet = n..
작고 크기가 고정된 객체의 문자열은 문자열 연결 연산자(+)를 사용해도 되지만, 많은 문자열을 연결할 때는 StringBuilder를 사용하자 🔎 문자열 연결 연산자(+) vs StringBuilder, append() 문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다. 한 줄짜리 출력 값이나 작고 크기가 고정된 객체의 문자열 표현을 만들 땐 편리하고 좋지만, 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다. 즉, 엄청엄청엄청엄청 느리다,,,,,, 예를 들어, 다음과 같이 청구서의 품목(item)을 전부 하나의 문자열로 연결하는 코드를 작성해보자. /* 문자열 연결 연산자(+) 사용 */ public String statement() { String result ..
문자열은 잘못 사용하면 번거롭고, 덜 유연하고, 느리고, 오류 가능성도 크다. 문자열은 워낙 흔하고, 자바가 잘 지원해주어 쉽게 쓸 수 있지만, 원래 의도하지 않은 용도로 쓰이는 경향이 있다. 🚫 문자열을 쓰지 않아야 하는 사례 기본 타입이든 참조 타입이든 적절한 값 타입이 있다면 그것을 사용하고, 없다면 새로 하나 작성하라. 문자열은 다른 값 타입을 대신하기에 적합하지 않다. 따라서 입력받을 데이터가 진짜! 문자열일 때만 문자열로 받는다. 받은 데이터가 수치형이라면 -> int, float, BigInteger 예/아니오 질문의 답이라면 -> boolean이나 적절한 열거 타입 문자열은 열거 타입을 대신하기에 적합하지 않다. 상수를 열거할 때는 문자열보다 열거 타입이 월등히 낫다. 문자열은 혼합 타입을..
기본 타입과 박싱된 기본 타입 중 하나를 선택해야 한다면 가능하면 기본 타입을 사용하라. 🔎 기본타입과 박싱된 기본 타입 자바의 데이터 타입은 크게 기본 타입과 박싱된 기본 타입으로 나눌 수 있다. 각각의 기본 타입에는 대응하는 참조 타입이 하나씩 있으며, 이를 박싱된 기본 타입이라고 한다. 예를 들어, 기본 타입의 int, double, boolean이 있으면 이에 대응하는 박싱된 기본 타입은 Integer, Double, Boolean이다. int - Integer double - Double boolean - Boolean long - Long ... 🔥 차이점 기본 타입과 박싱된 기본 타입은 오토박싱과 오토언박싱 덕분에 두 타입을 크게 구분하지 않고 사용할 수는 있다. 그럼에도 불구하고 크게 3가..
float과 double을 BigDecimal, int, long으로 대체해라 ❓ float와 double의 문제 float과 double 타입은 과학과 공학 계산용으로 설계되었다. 이진 부동소수점 연산에 쓰이며, 넓은 범위의 수를 빠르게 정밀한 '근사치'로 계산하도록 설계되었다. 따라서 금융 관련 계산처럼 정확한 결과가 필요할 때 사용하면 안 된다. 금융 계산에 부동소수 타입을 사용해보자. public static void main(String[] args){ double funds = 1.00; int itemsBought = 0; for (double price = 0.10; funds >= price; price += 0.10){ funds -= price; itemsBought++; } Syst..
- Total
- Today
- Yesterday
- 아이템61
- 백준
- 알고리즘
- 아이템59
- BFS
- bruteforce
- Retrofit2
- docker-compose
- 아이템60
- BOJ
- 완전탐색
- 순열
- 이펙티브자바
- 그래프탐색
- IMAGE
- docker
- Container
- 운영체제
- 부분집합
- 완탐
- 조합
- dfs
- OS
- springboot
- subset
- Java
- EffectiveJava
- 정처기
- dp
- 토큰기반인증
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |