이펙티브 자바 3/E - 5.제네릭(1)
2023. 7. 14. 16:15
개발 서적/이펙티브 자바
1. raw 타입은 사용하지 말라 raw 타입이란 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않을 때를 말한다 예컨대 List의 raw 타입은 매개변수가 없는 제네릭 타입인 List다 raw 타입은 타입 선언에서 제네릭 타입 정보가 전부 지워진 것처럼 동작하는데, 제네릭이 도래하기 전 코드와 호환되도록 하기 위한 궁여지책이라 할 수 있다 제네릭을 지원하기 전에는 컬렉션을 다음과 같이 선언했다 // Stamp 인스턴스만 취급한다 private final Collection stamps = ...; // 실수로 동전을 넣는다 stamps.add(new Coin(...));// "unchecked call" 경고 이 코드를 사용하면 실수로 도장(Stamp) 대신 동전(Coin)을 넣어도 아무 오류 없이 컴..
이펙티브 자바 3/E - 4.클래스와 인터페이스(2)
2023. 6. 18. 17:12
개발 서적/이펙티브 자바
5. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 상속을 염두에 두지 않고 설계했거나, 상속할 때의 주의점을 문서화해놓지 않은 '외부' 클래스를 상속할 때 위험을 경고한다 여기서 '외부'란 프로그래머의 통제권 밖에 있어서 언제 어떻게 변경될지 모른다는 뜻이다 5.1 그렇다면 상속을 고려한 설계와 문서화란 정확히 무얼 뜻할까? 우선 메서드를 재정의하면 어떤 일이 일어나는지를 정확히 정리하여 문서로 남겨야 한다 즉, 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야 한다 재정의할 수 있는 메서드(public과 protected 메서드 중 final이 아닌 모든 메서드)는 API 설명을 적시해야 한다 어떤 순서로 호출하는지, 각각의 호출 ..
이펙티브 자바 3/E - 4.클래스와 인터페이스(1)
2023. 6. 10. 21:24
개발 서적/이펙티브 자바
추상화의 기본 단위인 클래스와 인터페이스는 자바 언어의 심장과도 같다. 자바 언어에는 클래스와 인터페이스 설계에 사용하는 강력한 요소가 많이 있다. 이번 장에서는 이런 요소를 적절히 활용하여 클래스와 인터페이스를 쓰기 편하고, 견고하며, 유연하게 만드는 방법을 안내한다. 1. 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다 1.1 캡슐화의 장점은 다음과 같다 시스템 개발 속도를 높인다 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다 시스템 관리 비용을 낮춘다 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌트로 교체하는 부담도 적기 ..
이펙티브 자바 3/E - 3.모든 객체의 공통 메서드
2023. 5. 20. 21:07
개발 서적/이펙티브 자바
Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다 Object에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize)는 모두 재정의(overriding)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다 이번 장에서는 언제 어떻게 재정의해야 하는지 다룬다 1. equals는 일반 규약을 지켜 재정의하라 1.1 equals를 재정의할 필요가 없는 경우 equals 재정의 시 문제가 발생하는 일을 회피하는 가장 쉬운 길은 아예 재정의 하지 않는 것이다 다음 상황 중 하나에 해당한다면 재정의하지 않는 것이 최선이다 각 인스턴스가 본질적으로 고유하다 값을 표현하는 게 아니라 동작..
이펙티브 자바 3/E - 2.객체 생성과 파괴
2023. 4. 30. 20:57
개발 서적/이펙티브 자바
객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 방법 올바른 객체 생성 방법과 불필요한 생성을 피하는 방법 제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업을 관리하는 방법 1. 생성자 대신 정적 팩토리 메서드를 고려하라 정적 팩토리 메서드는 디자인 패턴에서의 팩토리 메서드를 의미하는 게 아님! 1.1 팩토리 메서드의 장점 5가지 1) 이름을 가질 수 있다 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다 반면 정적 팩토리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다 예를 들어 생성자 BigInteger(int, int, Random) vs 정적 팩토리 메서드 BigInteger.probabalPrime 어느 쪽이 값이 소수인 B..
이펙티브 자바 3/E - 1.들어가기
2023. 4. 19. 22:19
개발 서적/이펙티브 자바
안티패턴을 피하라! 아주 핵심적인 기본 원칙 명료성과 단순성 컴포넌트는 사용자를 놀라게 하는 동작을 해서는 절대 안된다 (정해진 동작이나 예측할 수 있는 동작만 수행해야 한다) 컴포넌트는 가능한 한 작되, 그렇다고 너무 작아서는 안된다 코드는 복사되는 게 아니라 재사용되어야 한다 컴포넌트 사이의 의존성은 최소로 유지해야 한다 오류는 만들어지자마자 가능한 한 빨리 잡아야 한다 이 규칙들이 100% 옳을 수는 없겠지만, 거의 모든 경우에 적용되는 최고의 모범 사례일 것이다 이 규칙들을 생각 없이 맹종하진 말아야 하나, 어겨야 할 때는 합당한 이유가 있어야 한다 마무리 느낀점 아직 상세 내용을 보지 않아서 두리뭉실한 내용들이 있지만 여기서 이야기 하고자하는 규칙들 역시 클린코드 내용과 일맥상통하는 부분이 많아..
함께 자라기 - 3부 애자일
2022. 9. 1. 14:10
개발 서적/함께 자라기 - 애자일로 가는길
1. 애자일 애자일은 불확실성이 높은 프로젝트에 적합한 방법이다 애자일이 불확실성을 다루는 방식은 좀 더 짧은 주기로 더 일찍 피드백을 받고 더 다양한 사람으로부터 더 자주 그리고 더 일찍 피드백을 받는 것으로 정리할 수 있다 시대가 변하면서 불확실성이 낮은 프로젝트는 비즈니스적 가치가 없어지고 불확실성이 높은 프로젝트를 하는 것이 일반적이 됨에 따라 빠른 속도로 인기를 얻게 되었다 결과적으로 애자일은 서로의 업무를 공유하고 상호 검토하는 협력을 통해 불행항 일을 '또는' 조건에서 '그리고' 조건으로 바꾸게 한다 모든 사람이 통찰을 얻어야 업무를 개선할 수 있는게 아니라 한 사람이라도 통찰을 얻으면 그걸 공유해서 전체가 개선되는 것 이다 학습과 협력은 불확실성이 큰 상황에서 좋은 대응전략이 된다 애자일의..
함께 자라기 - 2부 함께
2022. 8. 29. 23:06
개발 서적/함께 자라기 - 애자일로 가는길
1. 소프트웨어 관리자의 개선 우선순위 조엘 테스트라는 개발팀 평가 테스트가 있다 소스 컨트롤을 사용하는가? 한 번에 빌드를 만들어낼 수 있는가? 일일 빌드를 만드는가? 버그 데이터베이스를 가지고 있는가? 새로운 코드를 작성하기 전에 버그를 고치는가? 최신 업데이트된 스케줄이 있는가? 스펙(제품 명세)이 있는가? 프로그래머가 조용한 작업환경에서 일하는가? 돈이 되는 한 최고의 툴을 사용하는가? 테스터가 있는가? 채용 면접 때 후보가 코드를 짜게 해보는가? 복도 사용성 테스트를 하는가? 조엘이 2000년에 작성한 블로그 글에서 소개된 이 테스트는 많은 인기를 얻었고, 그만큼 비판도 많이 받았다고 한다 이 12가지 항목에 "예"라고 대답하면 "완벽하다"라고 말한다 각 항목은 객관적으로 예/아니오 답이 나올 ..
함께 자라기 - 1부 자라기
2022. 8. 29. 20:25
개발 서적/함께 자라기 - 애자일로 가는길
1. 1만 시간의 법칙 - 안데쉬 에릭손 1만 시간 법칙에서 1만 시간은 '자신의 기량을 향상시킬 목적으로 반복적으로 하는 수련'을 한 시간을 일컫는다 안데쉬 에릭손은 그런 수련을 '의도적 수련' 이라고 정의했다 의도적 수련이 필요한 이유는 평생을 걷는다고 해서 또는 평생을 양치질을 한다고해서 점점 더 나아지는게 아니기 때문이다 목표를 가지고 피드백을 반영하는 것이 의도적 수련의 포인트이다 2. 자기계발과 복리의 비밀 더글라스 엥겔바트는 작업을 A, B, C 세가지 수준의 작업으로 구분했다 A작업. 원래 그 조직이 하기로 되어 있는 일 B작업. A 작업을 개선하는 일 (즉, A작업에서 시간과 품질을 개선하는 작업. 시스템과 프로세스 설계 등) C작업. B 작업을 개선하는 일 (즉, 개선 사이클 자체의 시..
[Study] 2022/08/16
2022. 8. 22. 00:17
개발 서적/클린코드
참여인원 (2명) 본인 wony - https://youn12.tistory.com/ 스터디 진행 방식 - 10~17 챕터 각자 정리한 내용 발표 - 챕터 별로 기억에 남았던 내용 및 느낀 점 논의 - 해당 내용들과 관련된 경험 논의 기억에 남는 내용 - 시스템 시스템에 대한 내용을 논의하다보니 디자인 패턴에 대한 학습이 많이 부족하다고 느낌 다음 스터디 주제 선정 시 반영하기로 함 - 응집도 공통적으로 가장 기억에 남았던 내용응집도 관련 내용을 기억하고 실무에 사용할 수 있도록 노력 - 객체지향 생활 체조 원칙 객체지향 생활 체조 원칙은 소트웍스 앤솔러지 책에서 다루고 있는 내용으로 객체지향 프로그래밍을 잘 하기 위한 9가지 원칙 규칙 1:한 메서드에 오직 한 단계의 들여 쓰기(indent)만 한다. ..