[공부] 독서(53)
-
[2019.03.17] 이팩티브 자바 3판 (5장 : 제네릭 사용시 - )
제네릭에 지정된 타입은 실체화 불가한 타입이라는 것을 명심하자. + 알아서 형변환 코드를 추가할 수 있다. - 코드가 지저분해진다. Raw 타입과 제네릭 제네릭 클래스를 사용할 때 raw type 제네릭은 절대 쓰지마라 public class MyGeneric{ // ... } 이 있을 때 MyGeneric myGeneric = MyGeneric(); 과 같이 제네릭 매개변수를 안넣어주는 경우 raw type이라고 한다. MyGeneric와 같은 와일드 카드 타입을 사용하라. raw type 을 사용하면 제네릭이 안겨주는 안전성과 표현력을 잃는다. 그러므로 절대 쓰지말자 IDE 가 알려주는 제니릭의 경고 제네릭을 사용하면서 생기는 모든 경고는 가능하면 없애라. 경고를 제거할 수 없지만 안전하다고 확신이 ..
2019.03.17 -
[2019.03.10] 이펙티브 자바 3판 (4장 : 클래스, 인터페이스 설계)
접근 제한자 모든 클래스의 멤버 접근성을 최대한 줄여라 public 클래스의 모든 멤버 변수는 private 이여야한다. 유일하게 허용되는 public 멤버 변수 : public staitc final 일 때 (단 멤버 변수가 배열이면 보안상의 문제가 존재하므로 허용하지 않는다.) 유일하게 허용되는 제한자 확장 : private 멤버를 package-private으로 풀어주는 경우 불변 클래스 불변 클래스를 만드는 방법 setter를 제공하지 않는다. 상속을 못하게 막는다. (= final class로 선언한다.) 모든 변수를 private final로 선언한다. 가변 컴포넌트를 가지고 있다면 자신 외에 접근 못하게 막는다. 불변 객체의 장점 스레드의 공유자원으로서 안전하다. 불변 객체끼리는 내부 데이터..
2019.03.10 -
[2019.03.09] 이펙티브 자바 3판 (3장 : 공통 메소드)
공통 메소드 equals hashCode toString finalize 특정 메소드의 호출이 금지 되게 하고 싶으면 오버라이딩하고 throw new AssertionError(); 를 넣어놔라 꼭 필요한게 아니면 재정의 하지말라 공통메소드를 재정의 할 때는 다음 규약을 지켜야한다. equals equals은 논리적 동일성을 판단하는 메소드다. 상위 클래스에서 재정의한 equals 는 하위 클래스의 equals에도 상속된다. equals를 재정의하면 hashcode도 재정의 해야한다. equals 메소드는 동치 관계여야한다. 반사성 : x.equals(x) = true 대칭성 : x.equals(y) = true => y.equals(x) = true 연쇄성 : x.equals(y) y.equals(z)..
2019.03.10 -
[2019.03.09] 이팩티브 자바 3판 (1,2장 : 객체 생성 파괴)
1장 코드는 복사되는게 아니라 재사용 되야한다. 책의 목표 : 명료성, 단순성 객체를 생성하는법 생성자 정적 팩토리 메소드 정적 팩토리 메소드의 의미 : (메소드) 인데 클래스 밖에서 new 없이 메소드를 호출하기 위해선 static(정적)이여야 한다. 그리고 객체를 만들어주는 메소드이니까 (팩토리) 이다. GoF 패턴에는 존재하지 않는 기법이다. 팩토리 메소드 패턴과는 다르다. 가능하면 생성자보다 이 방법을 사용하라. 참고 템플릿 메소드 패턴 : 메소드들이 템플릿화 되어 실행순서가 알고리즘 화 되도록 하는 것 onPrepare() -> onRun()-> onPost() 팩토리 메소드 패턴 : 팩토리 메소드 패턴은 잘못 붙여진 이름이라고 함 템플릿 팩토리 클래스 패턴이라고 생각하는게 좋을 듯 싶다. 팩토..
2019.03.06 -
[2019.03.01] 클린 코드 (점진적 개선)
시스템을 망가뜨리는 변형을 하지 말아야한다. 어떤 목적 달성을 위해 코드를 작성하는 와중에도 해당 목적 만을 위한 TDD를 사용할 수 있다. 리팩토링 할 때의 TDD1. 현재 코드에서 동작하는 테스트 코드를 만든다.2. 코드를 리팩토링 할 때마다 테스트 케이스를 모두 돌려본다.3. 테스트가 실패하면, 리팩토링으로 인해 발생하는 실패 사례를 해결할 때까지 다음 리팩토링으로 넘어가지 않는다. 객체가 특정 클래스인지 확인하는 논리 연산Object instance of Class하지만 해당 논리연산을 너무 자주 사용하게 될 경우, 프로그램이 확장될 때 분기문에 의한 상황 처리가 계속 추가되게 된다. 그러므로 이를 사용하기 보다는 구조적으로 해결하려하자. 소프트웨어 설계는 분할만 잘해도 품질이 크게 높아진다.
2019.03.01 -
[2019.02.21] 객체지향의 오해와 진실 (7장~부록)
7장 Composition 관계 메뉴판 ◆― 메뉴 part of 관계 Aggregation 관계 메뉴 ◇― 이름 has a 관계 Association 관계 메뉴판 ―― 손님 도메인 모델에서 어떤 관계가 어떤 관계이고 이런 것은 중요하지 않다. 훌륭한 코드를 위한 3가지 관점- 개념 관점- 명세 관점- 구현 관점 인터페이스와 구현을 분리하라 (명세와 구현의 분리) 부록클래스는 객체가 공유하는 본질적인 속성을 정의한다.서브타입은 슈퍼타입의 부분집합이다. 100% 규칙 : 슈퍼 타입의 정의는 100% 서브타입에 적용돼야만 한다. 상속에서 구조적인 순응 : 100% 규칙상속에서 행위적인 순응 : 다형성 서브 타이핑 : 인터페이스 상속 - 설계의 유연성이 목표서브 클래싱 : 구현 상속 - 코드의 중복 제거가 목표..
2019.02.21