Effective Java Summary List 2장. 객체 생성과 파괴 (__Second Blog Link__) item 1. 생성자 대신 정적 팩터리 메서드를 고려하라. item 2. 생성자에 매개변수가 많다면 빌더를 고려하라. item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 item 4. 인스턴스화를 막으려거든 private 생성자를 사용하라. item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 item 6. 불필요한 객체 생성을 피하라. item 7. 다 쓴 객체 참조를 해제하라. item 8. finalizer와 cleaner 사용을 피하라. item 9. try-finally 보다는 try-with-resources를 사용하라. 3. 모든 객체의 공통 ..
2021/01/10 - [Books] - [클린 코드: Clean Code] 2. 의미 있는 이름(Meaningful name) 2021/01/11 - [Books] - [클린 코드: Clean Code] 3. 함수(Function) 2021/01/11 - [Books] - [클린 코드: Clean Code] 4. 주석(comment) 2021/01/11 - [Books] - [클린 코드: Clean Code] 5. 형식 맞추기(Formatting) 2021/01/12 - [Books] - [클린 코드: Clean Code] 6. 객체와 자료 구조(Object and data structure) 2021/01/13 - [Books] - [클린 코드: Clean Code] 7. 오류 처리 2021/01/1..
| 14. 점진적인 개선- Sources and Reference * 깨끗한 코드를 짜려면 먼저 지저분한 코드를 짠 뒤에 정리해야 한다.* (일단 프로그램이 돌아간다고 다음 업무로 넘어가지 말고) 깔끔한 작품을 내놓으려면 단계적으로 개선해야 한다.- 테스트 주도 개발(Test-Driven Development, TDD) 기법을 사용해보자. 1. 소프트웨어 설계는 분할만 잘해도 품질이 크게 높아진다2. 적절한 장소를 만들어 코드만 불리해도 설계가 좋아진다.3. 관심사를 분리하면 코드를 이해하고 보수하기 훨씬 더 쉬워진다. || Args 사용법- 123456789101112// 간단한 Args 사용법 (명령행 인수 구문분석기)public static void main(String[] args) { try {..
| 13. 동시성-"객체는 처리의 추상화다. 스레드는 일정의 추상화다" - James O. Coplien || 동시성이 필요한 이유?- 동시성은 결합(coupling)을 없애는 전략 (무엇what 과 언제when 를 분리)- 무엇과 언제를 분리하면 애플리케이션 구조와 효율이 극적으로 나아진다.ex) 많은 사용자를 동시에 처리하면 시스템 응답 시간을 높일 수 있음ex) 정보를 나눠 여러 컴퓨터에서 돌리면 대량의 정보를 병렬처리할 수 있음 ||| 동시성과 관련한 일반적인 미신과 오해1. 동시성은 항상 성능을 높여준다?- 때로 성능을 높여준다.- "대기 시간이 아주 길어 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독립적인 계산이 충분히 많은 경우에만"2. 동시성을 구현해도 설계..
| 12. 창발성(創發性)- || 창발적 설계로 깔끔한 코드를 구현하자 - 대다수는 Kent Beck이 제시한 "단순한 설계 규칙" 네 가지가 소프트웨어 설계 품질을 크게 높여준다고 믿는다..- 다음 규칙을 따르면 설계는 '단순하다'고 말할 수 있다. - Kent Beck1. 모든 테스트를 실행한다.2. 중복을 없앤다.3. 프로그래머 의도를 표현한다.4. 클래스와 메서드 수를 최소로 줄인다. || 단순한 설계 규칙 1: 모든 테스트를 실행하라- 철저한 테스트로 모든 테스트 케이스를 항상 통과하는 시스템은 '테스트가 가능한 시스템'이다.- 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 더불어 높아진다. (하나만 수행하는 클래스, SRP 준수 클래스)- 테스트 케이스 작성이 쉬워지려면 DIP 원칙 적..
| 시스템-- 시스템 수준에서도 깨끗함을 유지하는 방법 || 시스템 제작과 시스템 사용을 분리하라 - 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 연결하는) 준비 과정과 (준비 과정 이후에 이어지는) 런타임 로직을 분리해야 한다. ||| Main 분리- 시스템 생성과 시스템 사용을 분리하는 한 가지 방법 - 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로 옮기고, 나머지 시스템은 모든 객체가 생성되었고 모든 의존성이 연결되었다고 가정-> Application은 main이나 객체가 생성되는 과정을 전혀 모른다. ||| 팩토리- 객체가 생성되는 시점을 Application이 결정할 필요가 생길 경우 Abstract Factory 패턴 사용 - 객체를 생성하는 시점은 Ap..
| 10. 클래스- || 클래스 체계- 클래스를 정의하는 표준 자바 관례 (순차적인 추상화 단계)1. 변수 목록- static public- static private- 비공개 인스턴스 변수2. 공개 함수3. 비공개 함수 ||| 캡슐화- 때로 변수나 유틸리티 함수를 protected로 선언하여 테스트 코드에 접근을 허용하는 방법도 있다.- 하지만, 그 전에 비공개 상태를 유지할 온갖 방법을 강구하고 캡슐화를 풀어주는 결정은 언제나 최후의 수단으로! || 클래스는 작아야 한다! - 클래스를 만들 때 첫 번째 규칙은 크기, 클래스는 작아야 한다. (두 세 번째 규칙도 크기다...)- 함수와 마찬가지로 '작게'가 기본 규칙- 함수는 물리적인 행 수로 크기를 측정했다면, 클래스는 맡은 책임을 센다. * 클래스 ..