일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Checked Exception
- spring-security
- Spring
- bytecode
- ec2
- Final
- try-with-reources
- springboot
- 피리티어
- 자바스터디
- https
- Annotation
- error
- 이펙티브자바
- 보안 그룹
- java
- 바이트코드
- 예외
- JVM
- 이펙티브 자바
- 자바
- Effective Java
- 파라미터 그룹
- RDS
- exception
- Unchecked Exception
- 생각정리
- AWS
- Today
- Total
목록스터디/Effective Java (8)
개발 일지

일반적으로 다중 구현용 타입으로는 인터페이스가 가장 적합하다. 복잡한 인터페이스라면 구현하는 수고를 덜어주는 골격구현을 함계 제공하는 방법을 꼭 고려해보자 이번 아이템에서는 추상클래스와 인터페이스, 인터페이스의 장점과 골격 구현 클레스에 대해서 다룹니다 추상 클래스와 인터페이스 자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상클래스, 이렇게 두 가지다. 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있게 되어, 이제는 두 메커니즘 모두 인스턴스 메서드를 구현 형태로 제공할 수 있다. 추상클래스란 자바에서는 하나 이상의 추상 메서드를 포함하는 클래스를 가리켜 추상 클래스라 한다. abstract class 클래스이름 { pulic abstract 반환타입 메소드이름(); // 추상 메서드 } 클..

클래스를 확장해야 할 명확한 이유가 떠오르지 않는다면 상속을 금지하는 편이 나을 것이다. 상속을 금지하려면 클래스를 fianl로 선언하거나 생성자 모두를 외부에서 접근할 수 없도록 만들면 된다. 이번장에서는 상속을 허용하는 클래스가 지켜야 할 제약에 대해서 다룬다. 아이템 18에서는 상속을 염두에 두지 않고 설계했고 상속할 때의 주의점도 문서화해놓지 않은 '외부' 클래스를 상속할 때의 위험을 경고했다. 여기서 '외부'란 프로그래머의 통제권 밖에 있어서 언제 어떻게 변경될지 모른다는 뜻이다. 그렇다면 상속을 고려한 설계와 문서화란 정확히 무엇일까 상속을 고려한 설계와 문서화 우선, 메서드를 재정의하면 어떤 일이 일어나는지를 정확히 정리하여 문서로 남겨야 한다. 달리 말하면, 상속용 클래스는 재정의할 수 있..

"메서드의 호출과 달리 상속은 캡슐화를 깨뜨린다." 이 장에서의 상속은 클래스가 다른 클래스를 확장하는 구현 상속을 말하는 것이며, 클래스가 인터페이스를 구현하거나 인터페이스가 다른 인터페이스를 확장하는 인터페이스 상속에 대한 이야기는 아니다. KEY WORD: 컴포지션(composition), 래퍼클래스(wrapper class) 상속이란? 상속(inheritance)은 객체 지향 프로그래밍(OOP)에서, 객체들 간의 관계를 구축하는 방법 기존 클래스를 확장하여 새 클래스를 만드는 것. 이때 기존 클래스는 상위(부모) 클래스 확장된 클래스는 하위(자식) 클래스라고 하며 하위 클래스는 상위 클래스의 종류로 상위 클래스가 가진 특성을 재사용한다. 하위 클래스에서 extends라는 키워드를 통해 상위 클래스..
클래스는 꼭 필요한 경우가 아니라면 불변이어야 한다. 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전하다. 이번 장에서는 변경 가능성을 최소화하기 위해 클래스를 불변으로 만들기 위한 규칙과, 불변클래스의 장점, 불변클래스의 예 등을 다룹니다 KEY WORD: 정적 펙터리 메서드(static factory method), fianl 불변 클래스 불변 클래스란 인스턴스의 내부 값을 수정할 수 없는 클래스로 불변 인스턴스에 간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 달라지지 않는다. 불변 클래스 만들기 위한 법칙 클래스를 불변으로 만들려면 다음 다섯가지 규칙을 따르면 됩니다. 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 클래스를 확..
public 클래스의 절대 가변 필드를 직접 노출하지 말아야 한다. 필드를 모두 private으로 바꾸고 public 접근자(getter)를 추가하자. 자바 플랫폼 라이브러리에도 public 클래스의 필드를 직접 노출하지 말라는 규칙을 어긴 사례가 종종 있는데 대표적인 예가 java.awt.package의 Point와 Dimension 클래스이다. 내부를 노출한 Dimension 클래스의 심각한 성능 문제는 오늘날까지도 해결되지 못했다. public 클래스의 절대 가변 필드를 직접 노출하지 말아야 한다 아래와 같이 인스턴스 필드들을 모아놓는 일 이외에는 아무 목적도 없는 클래스를 작성할 때 필드는 public 이는 안된다. class Point { public double x; public double ..
프로그램 요소의 접근성은 가능한 한 최소한으로 하라. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 우리가 정보은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리입니다. 이번 아이템에서는 정보은닉(캡슐화)의 장점과 이러한 정보 은닉을 위해 자바에서 제공해주는 접근 제한 메커니즘에 대해 다룹니다. 정보은닉의 장점 시스템 개발 속도를 높인다 여러 컴포넌트 병렬 개발 가능 시스템 관리 비용을 낮춘다 각 컴포넌트를 더 빨리 파악해 디버깅 가능 다른 컴포넌트로 교체하는 비용 하락 성능 최적화에 도움이 된다 완성된 시스템을 프로파일링 해 해당 컴포넌트만 최적화할 수 있다. 소프트웨어 재사용성을 높인다 외부 의존성이 낮은 독자적인 컴포넌트는 낯선 환경에..

자바에서는 finalizer와 cleaner 두 가지 객체 소멸자를 제공합니다. finalizer Object에 존재하는 finalize()를 의미합니다. 클래스의 객체가 더 이상 사용되지 않으면 GC(Garbage Collector)가 자동으로 호출합니다 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다. cleaner Java 9에서는 fianlizer가 deprecated 됐고 cleaner가 생겼습니다 finalizer보다 덜 위험하지만(별도의 스레드를 사용하기 떄문에), 여전히 예측할 수 없고, 느리고 일반적으로 불필요하다. 하지만 두 객체 소멸자 모두 일반적으로 불필요합니다. 왜 불필요 한지 알아보겠습니다. 단점 1. 수행 시점을 알 수 없다. finalizer와 cleane..
많은 클래스가 하나 이상의 자원에 의존합니다. 가령 맞춤법 검사기는 사전에 의존하는데, 이런 클래스를 정적 유틸리티 클래스로 구현한 모습을 드물지 않게 볼 수 있습니다. 아이템 4. static 유틸 클래스 사용 // 부적절한 static 유틸리티 사용 예 - 유연하지 않고 테스트 할 수 없다. // 유틸리티 클래스란? // 유틸리티 클래스는 인스턴스 메서드와 인스턴스 변수를 일절 제공하지 않고 // 정적 메서드와 변수만을 제공하는 클래스 public class SpellChecker { //static 메서드에서 이 자원을 사용함으로 static선언 private static final Lexicon dictionary = new KoreanDicationry(); //private 생성자 - 객체 생..