Effective Java [Issue 1 and 2]

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

Java 로 배우는 디자인패턴 입문 Chapter 15. Facade 간단한 창구 덕성여자대학교 컴퓨터학부.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
Power Java 제3장 이클립스 사용하기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
클래스 구성 요소 1개의 클래스는 최대 8개의 구성 요소를 가질 수 있다
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
5장. 참조 타입.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
6장. 클래스.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
제7장 클래스와 객체.
23장. 구조체와 사용자 정의 자료형 2.
Power Java 제14장 배치 관리자.
3장 자바의 기본문법(2).
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
자바 5.0 프로그래밍.
11장. 1차원 배열.
C#.
6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
JA A V W. 03.
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
Chapter 09 문자열과 메소드 01 문자열 02 메소드 03 지역변수와 전역변수 04 메소드의 반환 값과 매개변수
Java Programming Java Programming 기초 2장 백석대학교 인터넷멀티미디어 LAB1111호.
JA A V W. 06.
10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Power Java 제14장 배치 관리자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
Docker Study 6~7.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
7 생성자 함수.
6 객체.
3장 자바의 기본문법(2).
Presentation transcript:

Effective Java [Issue 1 and 2] Version 0.1 2009.07.31

Issue 1. 생성자 대신 static 팩토리 메소드 사용을 고려하자 객체는 생성자 함수만이 만들 수 있는 게 아니다! VS. public Boolean( boolean value ) { this.value = value; } public static Boolean valueOf( boolean b ) { return b ? Boolean.TRUE : Boolean.FALSE; } java API에 포함된 Boolean 클래스는 생성자(Constructor) 도 제공하지만, 가급적 valueOf() 정적 메소드 사용을 권장하고 있다. 결과는 똑같아 보이지만, valueOf() 메소드를 사용하면 인스턴스 생성이 억제 된다. (자원 절약 효과)

Issue 1. 생성자 대신 static 팩토리 메소드 사용을 고려하자 Static Factory 메소드의 장점 생성자 함수와 달리 팩토리 메소드는 클래스와 다른 명칭을 가질 수 있다. - BigInteger 클래스의 소수(素數) 인스턴스를 반환하는 메소드의 명칭은 BigInteger.probalePrime() 이며, 생성자의 특징을 명확히 드러낸다. - 생성자가 여러 개 필요할 경우, 각각의 용도에 맞는 이름을 부여할 수 있다. 호출 될 때마다 새로운 객체를 생성할 수도 있고, 이미 생성된 객체를 반환 할 수 도 있다. - 인스턴스 생성을 제어할 수 있으므로, 자원을 좀 더 효율적으로 관리할 수 있게 된다. - 싱글톤(singleton) 또는 인스턴스 생성 불가(noninstantiable) 클래스를 만들 수 있다. 자신이 반환하는 타입의 하위 타입(sub type) 객체도 반환할 수 있다. - 생성자 함수는 자신이 속한 클래스의 인스턴스만을 만들 수 있지만, Static Factory는 유연하게 하위 클래스의 객체를 생성하고 반환할 수 있다. 매개변수화 타입(parameterized type) 인스턴스를 생성하는 코드를 간결하게 해준다. public static <K, V> HashMap <K, V> newInstance() { return new HashMap<K, V>(); } 2

Issue 1. 생성자 대신 static 팩토리 메소드 사용을 고려하자 Static Factory 메소드의 단점 인스턴스 생성을 위한 public/protected 생성자를 선언하지 않고 static factory 메소드만 가지고 있는 클래스는 하위 클래스를 만들 수 없다. - 장점일 수도 있도, 단점이 될 수도 있다. 다른 static 메소드와 구분하기 어렵다. - 다른 메소드와 섞여 있으면, 용도를 알아차리기 어렵기 때문에, 문서화에 신경 써야 한다. static factory 메소드와 public 생성자는 상호 보완 관계이므로 적절히 골라쓰자! 3

Issue 2. 생성자의 매개 변수가 많을 때는 빌더(builder)를 고려하자 매개 변수가 많은 생성자의 문제? ‘식품 영양 정보’를 나타내는 데이터 클래스를 예로 들어보자. 다양한 필수, 선택 항목을 포함할 수 있다. 필수 항목 : 식품의 용량, 개수, 칼로리 선택 항목 : 총 지방 함량, 포화 지방, 트랜스 지방, 콜레스테롤, 나트륨, 단백질, 탄수화물, 비타민… 등 수십개 항목 인스턴스 생성 시에 초기화 해야 하는 항목 수가 많고… 필수/선택 매개변수들을 초기화할 수 있는 다양한 생성자 함수를 선언해야 한다. 일반적으로, 텔리스코핑(telescoping) 생성자 패턴을 사용한다. NutritionFacts cola = new NutritionFacts( 240, 8, 120, 10, 26, 27 ); 위와 같은 코드는 가독성이 현저히 떨어진다. 즉, 이해하기 어렵다. 각각의 파라미터가 어떤 필드를 설정하는지…? 4

Issue 2. 생성자의 매개 변수가 많을 때는 빌더(builder)를 고려하자 대안~? 자바빈즈 패턴 매개 변수가 없는 객체를 생성한 후 setter 메소드를 호출해서 각각의 필드 값을 초기화 한다. NutritionFacts cola = new NutritionFacts(); cola.setServingSize(240); cola.setServings(8); cola.setCalories(80); cola.setSodium(35); 한 시절 유행(?)하던 기법이지만, 생성 과정에서 불완전한 상태에 놓여 있게 된다. 불변(immutable) 클래스를 만들 수도 없다. 5

Issue 2. 생성자의 매개 변수가 많을 때는 빌더(builder)를 고려하자 확실한 대안~! 빌더 패턴 (Builder pattern) 빌더(builder) 클래스는 자신이 생성하는 객체의 클래스에 포함된 static 멤버 클래스. NutritionFacts cola = new NutritionFacts.Builder(240, 8). calories(100).sodium(35).carbohydrate(27).build(); 코드 작성이 쉽고, 이해하기 쉽다. 다만, 코드 분량이 증가하는 단점이 있다. 6