You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
예로, 구현 클래스 교체가 필요한 경우 새로운 클래스의 생성자만 호출해주면 코드를 변경할 필요가 없음
// 이전 코드 Set <Son> sonSet = newLinkedHashSet<>();
// 변경 코드Set <Son> sonSet = newHashSet<>();
// 만약 인터페이스가 아니였다면?LinkedHashSet<Son> sonSet = newLinkedHashSet<>();
선언문 뿐만 아니라, 기존 타입에서만 제공하는 메서드 등을 사용한 경우 컴파일이 되지 않는 문제가 발생한다.
이때, 구현 클래스를 교체할 때는 해당 클래스만이 제공하는 특별한 기능을 사용하는지를 확인해야 한다.
만약, 위의 코드에서 LinkedHashSet 이 따르는 순서 정책을 사용하고 있었다면?
적합한 인터페이스가 없는 경우
String, BigInteger 등의 값 클래스
클래스 기반으로 작성된 프레임워크가 제공하는 객체
인터페이스에는 없는 특별한 메서드를 제공하는 클래스
=> 클래스의 계층 구조 중 필요한 기능을 만족하는 가장 덜 구체적인 클래스를 타입으로 사용해라.
section: 6장
🍵 서론
이번 아이템은, 다들 한 번쯤 들어봤을 만한 기본적인 내용을 이야기하고 있다. 아이템별로 핵심 내용만을 빠르게 정리해보자 !
🌒 본론
1️⃣ 기본 타입을 사용해라
식별성
도 가진다.null
값도 가질 수 있다.위의 3가지는, 기본 타입과 박싱된 기본 타입의 차이이다. 오토박싱/언박싱 덕분에 크게 구분없이 기본 타입과 박싱된 기본 타입을 사용할 수 있지만, 예상치 못한 상황에서 문제를 일으키기도 한다.
Case01. == 비교
(i<j)
에서는 오토언박싱되어 30이라는 값이 비교되지만(i==j)
에서는 오토언박싱이 일어나지 않고 객체의 식별성을 검사한다.즉, 박싱된 기본 타입에
==
연산자를 사용하면 오류가 발생하게 된다. 이를 해결하기 위해서는==
연산자에서도 값을 비교할 수 있도록, 기본 타입으로 변환한 뒤에 값을 비교해야 한다.Case02. null 초기화
Integer
등의 박싱된 기본 타입은, 명시적으로 초기화하지 않을 경우 참조 타입처럼null
로 초기화가 된다.null
과의 비교가 일어나므로NUllPointerException
이 발생한다.Case03. 성능 저하
➕ 오토박싱/언박싱에서의 성능 저하
equals()
를 사용해야 하고, 이는 객체의 비교이므로 성능 저하 발생❓ 그렇다면 박싱된 기본 타입은 언제 사용하지?
2️⃣ 문자열보다 적절한 다른 타입을 사용해라
int
,float
,BigInteger
등의 적당한 수치 타입으로 변환열거 타입
이나boolean
으로 변환key 클래스
로 사용3️⃣ 문자열 연결을 주의해라
이미 다 알고 있지?
String
은 불변 객체4️⃣ 객체는 인터페이스로 참조해라
선언문 뿐만 아니라, 기존 타입에서만 제공하는 메서드 등을 사용한 경우 컴파일이 되지 않는 문제가 발생한다.
이때, 구현 클래스를 교체할 때는 해당 클래스만이 제공하는 특별한 기능을 사용하는지를 확인해야 한다.
LinkedHashSet
이 따르는 순서 정책을 사용하고 있었다면?적합한 인터페이스가 없는 경우
String
,BigInteger
등의 값 클래스=> 클래스의 계층 구조 중 필요한 기능을 만족하는 가장 덜 구체적인 클래스를 타입으로 사용해라.
🍃 결론
📌 사용할 수 있다면, 우선적으로 사용해야 할 것들
StringBuilder
reference
The text was updated successfully, but these errors were encountered: