Skip to content

Commit f9a1307

Browse files
committed
[ADD] Item 1 : Using Static Method
1 parent 1e13613 commit f9a1307

16 files changed

Lines changed: 126 additions & 301 deletions
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
프로그래밍 언어를 공부할 때 고려할 세 가지
2+
3+
1. 언어의 핵심(절차적? 함수형? 객체지향?)
4+
2. 어휘(자료구조, 연산자, 표준라이브러리의 기능)
5+
3. 코드를 구성하는 관례적이고 효과적인 방법
6+
7+
8+
9+
이를 토대로 보면,
10+
11+
자바는 객체지향언어이고, 메서드 안의 코드는 명령형(문장 지향) 방식으로 작성한다. 그리고 표준 라이브러리는 그래픽, 통신, 분산컴퓨팅, 보안 등의 기능을 제공한다.
12+
13+
14+
15+
그렇다면 `3번` Effective한 자바 코딩법은 뭘까?
16+
17+
18+
19+
이 책을 시작하기 전에 책에서 앞으로 계속해서 사용될 자바 용어를 간략히 정리한다.
20+
21+
Java 8 의 언어 명세에 따른다.
22+
23+
*자바의 타입
24+
25+
```
26+
자바의 타입에는 크게 참조 타입과 기본타입이 있다.
27+
28+
즉, 참조타입(reference type)에는 인터페이스(interface), 클래스(class), 배열(array)이 있고,
29+
기본타입(primitive type)에는 int, float, ... 이 존재한다.
30+
31+
애너테이션(annotation)은 인터페이스의 일종이며 열거 타입(enum)은 클래스의 일종이라고 한다.
32+
33+
즉, 클래스의 인스턴스와 배열은 객체(object)
34+
클래스의 멤버 - field, method, member class, member interface
35+
메서드 시그니처 - method name, parameter (반환값의 타입은 시그니처에 포함되지 않는다.)
36+
```
37+
38+
*상속(inheritance) == 서브클래싱(subclassing)
39+
40+
```
41+
인터페이스 상속 ==
42+
"클래스가 인터페이스를 구현한다(implement)."
43+
"인터페이스가 다른 인터페이스를 확장한다(extends)."
44+
```
45+
46+
*API
47+
48+
```
49+
exported API == API
50+
51+
프로그래머가 클래스, 인터페이스, 패키지를 통해 접근할 수 있는 모든 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태를 말한다.
52+
53+
작성자 == user
54+
작성자가 API를 사용해서 작성한 코드 == client
55+
56+
API 요소 == 클래스, 인터페이스, 생성자, 멤버, 직렬화된 형태
57+
58+
즉, 모든 클라이언트가 접근할 수 있고, API 작성자가 지원하기로 약속한 API 요소들이다.
59+
```
60+
61+
62+
63+
## 객체 생성과 파괴
64+
65+
> 목표
66+
67+
1) 객체를 만들어야 할때와 만들지 말아야 할때를 구분하는 방법
68+
69+
2) 올바른 객체 생성 방법과 불필요한 생성을 피하는 방법
70+
71+
3) 제때 파괴를 보장하고 파괴 전에 수행해야 할 정리 작업을 관리하는 요령
72+
73+
74+
75+
### 아이템 1: 생성자 대신 정적 팩터리 메서드를 고려하라
76+
77+
78+
79+
**장점**
80+
81+
**첫 번째, 이름을 가질 수 있다.**
82+
83+
84+
85+
86+
87+
**두 번째, 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.**
88+
89+
90+
91+
92+
93+
**세 번째, 반환 타입의 하위 타입 객체를 반환 할 수 있는 능력이 있다.**
94+
95+
96+
97+
```java
98+
public static Animal subType(){
99+
return new Cat();
100+
}
101+
```
102+
103+
104+
105+
**네 번째, 입력 매개변수에따라 매번 다른 클래스의 객체를 반환할 수 있다.**
106+
107+
108+
109+
```java
110+
Set s = B.getSet(a);
111+
112+
Class B {
113+
public static Set getSet(Array a) {
114+
if(a.length > 100) {
115+
return new LongSet();
116+
} else {
117+
return new ShortSet();
118+
}
119+
}
120+
}
121+
```
122+
123+
124+
125+
**다섯 번째, 정적 팩터리 메서드를 작성하는 시점에는 객체의 클래스가 존재하지 않아도 된다.**
126+
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)