제1조 - 구조 기 대신 정적 공장 방법 고려

3868 단어
처음에 기술 이라는 길 을 걷 는 것 은 영원히 공 부 를 멈 출 수 없다. 일 한 지 3 년 이 다 되 어 간다. 꾸준히 공부 하고 각종 기술 포럼 에서 빈 둥 거리 지만 안 타 깝 게 도 자신 이 공부 한 수확 과 소감 을 기록 하지 않 았 다. 마침 최근 에 바 쁘 지 않 았 다. 예전 의 것 을 다시 한 번 정리 하고 기록 을 하 는 것 도 적당 하 다.생각해 보 니 'Effective Java' 부터 시작 하 겠 습 니 다. 이 책 은 자바 를 하 는 많은 사람들 이 다 봤 다 고 믿 습 니 다. 이것 은 제 가 두 번 째 로 이 책 을 처음부터 보 는 것 이 라 고 할 수 있 습 니 다. 자바 의 기 초 를 파악 하고 뭔 가 를 한 후에 이 책 을 배 우 는 것 이 정말 큰 도움 이 될 것 같 습 니 다.    다음은 내 가 이 책의 몇 가지 가장 중요 한 역할 이 라 고 생각한다.    1. 자바 의 핵심 특성 을 더욱 깊이 이해한다.    2. 자바 와 그 기본 라 이브 러 리 를 더욱 효율적으로 사용한다.    3. 좋 은 인 코딩 스타일 과 인 코딩 습관 을 기 릅 니 다.    이 책 은 주제 와 항목 에 따라 조직 된 것 으로 각 장 은 하나의 주제 이 고 모든 항목 은 작가 의 건의 이다. 만약 에 자신 이 기술 의 길에서 시행 착 오 를 줄 이 고 계속 발전 하 기 를 원한 다 면 모든 건의 가 매우 유용 하 다 고 할 수 있다.    저 는 작가 의 모든 건의 에 대해 학습 기록 을 만 들 었 을 뿐 자신의 이 해 를 많이 하지 못 합 니 다. 가능 한 한 적은 언어 로 요약 하여 묘사 하고 예 도 대부분 원서 의 예 를 사용 합 니 다.    자, 드디어 소개 가 거의 다 되 었 습 니 다. 쓸데없는 말 은 그만 하고 본론 으로 들 어 갑 니 다.
  제1조 - 구조 기 를 정적 공장 방법 으로 대체 하 는 것 을 고려 합 니 다. 구조 기 를 정적 공장 방법 으로 대체 하려 면 먼저 정적 공장 방법 이 무엇 인지, 어떤 장점 이 있 는 지 알 아야 합 니 다. 여기 서 말 하 는 정적 공장 방법 은 디자인 모델 중의 공장 모델 이 아니 라 정적 인 방법 으로 클래스 의 인 스 턴 스 를 되 돌려 주 는 것 이다. 이것 은 모두 가 사용 한 것 이 고 하나의 예 는 하나의 예 이다.다음은 Boolean 형식의 예제 입 니 다.
public static Boolean valueof(boolean b){
  return b?Boolean.TRUE:Boolean.FALSE
}

 정적 공장 방법 과 구조 기 가 다른 첫 번 째 장점 은 이름 이 있다 는 것 이다.방법 명 을 통 해 되 돌아 오 는 대상 의 실례 를 비교적 정확하게 묘사 할 수 있다.또한 구조 기 는 매개 변수 가 같은 상황 에서 매개 변수 순서 에 따라 만 구분 할 수 있다. 이런 구조 기 는 헷 갈 리 기 쉬 우 며 정태 적 인 공장 방법 은 이런 번 거 로 움 을 효과적으로 피 할 수 있다.
 
 정적 공장 방법 과 구조 기 가 다른 두 번 째 장점 은 그들 을 호출 할 때마다 새로운 대상 을 만 들 필요 가 없다 는 것 이다.이 장점 은 어떤 경우 에 매우 뚜렷 합 니까? 아니면 Boolean 형식 으로 설명 하 시 겠 습 니까? Boolean. valueof (boolean) 는 대상 을 만 들 지 않 습 니 다. Boolean. TRUE 와 Boolean. FALSE 는 모두 final 입 니 다. 초기 화 할 때 만 인 스 턴 스 를 만 듭 니 다. 나중에 매번 value of 방법 을 호출 할 때마다 같은 인 스 턴 스 를 되 돌려 줍 니 다.매번 새로운 Bolean 인 스 턴 스 를 만 들 면 자주 사용 하 는 상황 에서 얼마나 큰 메모리 낭 비 를 초래 할 지 상상 할 수 있다.
정적 공장 방법 과 구조 기 가 다른 세 번 째 장점 은 원래 의 반환 유형의 모든 하위 유형의 대상 을 되 돌 릴 수 있다 는 것 이다.사용 자 는 구체 적 인 실현 류 에 주목 하지 않 고 인터페이스 로 되 돌아 오 는 대상 을 인용 해 야 한다.여기 서 원 서 는 세 가지 예 를 들 었 는데 이 세 가지 예 는 서로 다른 측면 에서 이런 방식 의 장점 을 묘사 했다.첫 번 째 는 자바 util. collections 입 니 다. 내부 에 Collection 의 비 공유 실현 류 (수정 할 수 없 는 집합, 동기 집합 포함) 가 많 습 니 다. 이러한 실현 류 는 모두 정적 공장 방법 을 통 해 도 출 됩 니 다.이것 은 API 의 수량 을 크게 줄 였 기 때문에 사용 자 는 많은 API 문서 앞에서 선택 할 필요 가 없다.두 번 째 예 는 자바 util. EnumSet 입 니 다. 바 텀 매 거 진 유형의 크기 에 따라 서로 다른 실현 류 를 되 돌려 줍 니 다. 이렇게 하 는 장점 은 분명 합 니 다. 후속 버 전에 서 일부 실현 류 를 추가 하거나 삭제 해 야 한다 면 사용자 에 게 아무런 영향 을 주지 않 습 니 다.세 번 째 예 는 서비스 제공 자의 구조 이 고 가장 전형 적 인 응용 은 JDBC 이다.먼저 서비스 제공 자 프레임 워 크 의 세 가지 중요 한 구성 요 소 를 알 아 보 겠 습 니 다. 서비스 인터페이스 (Service Interface) 는 공급 자가 실현 하 는 것 입 니 다.공급 자 등록 API (Provider Registration API) 는 서비스 제공 자 에 게 등록 하 는 인터페이스 입 니 다.서비스 액세스 인터페이스 (Service Access API) 는 사용자 가 서비스 인 스 턴 스 를 가 져 오 는 데 사 용 됩 니 다.JDBC 의 경우 커 넥 션 은 서비스 인터페이스 이 고, DriverManager. registerDriver 는 공급 자 등록 API 이 며, DriverManager. getConnection 은 서비스 액세스 API 다.이 프레임 워 크 의 장점 은 작성 할 때 서비스 제공 자의 구체 적 인 실현 이 필요 하지 않다 는 것 이다.
 
정적 공장 방법의 네 번 째 장점 은 매개 변수 화 유형의 실례 를 만 들 때 코드 를 더욱 간결 하 게 만 드 는 것 이다.다음은 대 비 를 보 겠 습 니 다. 방식 1: Map < String, List < String > > m = new HashMap < String, List < String > ();방식 2: Map < String, List < String > > m = HashMap. newInstance ();어떤 게 더 좋아요?두 번 째 방식 임 에 틀림없다. 비록 이 예 의 유형 매개 변 수 는 아직 복잡 하지 않 지만.HashMap 은 아직 이 정적 공장 방법 을 제공 하지 않 았 다.
정적 공장 방법의 주요 단점 은 공유 하거나 보 호 받 는 구조 기 를 포함 하지 않 으 면 이불 류 화 를 할 수 없다 는 것 이다.그것 은 계승 이 아니 라 복합 을 사용 하도록 장려 한다.만약 당신 의 디자인 이 계승 에 쓰 인 다 면 구조 기 를 사유 로 설정 할 수 없습니다.정적 공장 방법의 두 번 째 단점 은 다른 정적 방법 과 사실상 아무런 차이 가 없다 는 것 이다.이것 은 API 에서 어느 것 이 정적 공장 방법 인지 명확 하 게 알 수 없 을 뿐 입 니 다. 일반적인 정적 공장 방법 은 다음 과 같은 일반적인 이름 을 사용 합 니 다. value of, of, getInstance, new Instance, getType, new Type.
구조 기와 정태 공장 방법 은 각각 장단 점 이 있 기 때문에 한 가지 유형 을 설계 할 때 정태 공장 을 우선적으로 고려한다.

좋은 웹페이지 즐겨찾기