donaricano-btn

생성자 vs 정적팩토리메소드(Constructor vs static factory method)


- 기존에 객체를 만드는 방법은 public 생성자를 이용하는 방법이다. 그러나 public 으로 선언된 정적 팩토리 매소드를 이용한 객체 생성방법으로 여러 장점을 얻을 수 있다.


1. 정적 팩토리 메소드 예제


2. 정적 팩토리 메소드의 장점

1) 생성자와 달리 이름이 있다.

- 생정자와 달리 사용하기 쉽고 가독성을 높일 수 있다.

- 여러 생성자를 만들었을 때 나타나는 문제를 해결 할 수 있다.

2) 호출 할 때 마다 새로운 객체를 생성할 필요가 없다

- 불필요하게 같은 객체가 생성되는 것을 막을 수 있다.

- 개체 통제 클래스(instance-controlled class) 화 할 수 있다.

* 개체 통제 클래스

- 어떤 시점에 어떤 객체가 얼마나 존재할 지 통제 할 수 있다

3) 생성자와 달리 반환 값 자료형의 하위 자료형 객체를 반환 할 수 있다.

- 반환 되는 객체 클래스를 유연하게 결정

4) 형인자 자료형(parameterized type) 객체를 만들 때 편하다

- 기존에는 형인자가 늘어 짐에 따라 길고 복잡한 코드가 만들어진다.

- 정적팩토리 메소드를 사용하면 컴파일러가 형인자를 스스로 알아낸다(자료형 유추( type inference))


3. 정적 팩토리 메소드의 단점

1) 정적 팩토리 메소드만 있는 클래스는 하위 클래스를 만들 수 없다

2) 다른 정적 메소드와 확연히 구분되지 않는다


블로그 이미지

리딩리드

,
donaricano-btn

앵귤러2 컴포넌트 사이 값 전달(@Input 장식자, inputs속성)


- 컴포넌트 사이(부모, 자식) 의 값을 전달하는 방법에 세가지가 있다

- @Input 장식자, inputs 속성, EventEmitter

- @Input 장식자와 inputs 속성은 부모 -> 자식으로 값을 전달

- EventEmitter 는 자식 -> 부모로 값을 전달


1. @Input장식자

- 외부에서 전달된 값을 받기 위해 사용하는 장식자

- 부모 컴포넌트에서 자식 컴포넌트로 값을 전달 한다

1) parant.ts

- 부모 컴포넌트에 넘겨줄 값을 선언한다.

2) parent.html

-  자식 컴포넌트 태그에 name 속성에 값을 전달

3) child.ts

- @Input 장식자를 이용하여 값을 받는다

4) child.html


2. inputs 속성

- 컴포넌트 장식자 설정의 inputs 속성을 통해서도 값을 받는 것이 가능하다

- @Input  장식자와 다르게 @Component 장식자 내부에 inputs 속성을 추가한다.

1) parent.ts

2) parent.html

- name 속성을 전달한다.

3) child.ts

-@Component 에 inputs 속성을 추가하여 값을 받는다.


3. EventEmitter

- 자식 컴포넌트에서 부모 컴포넌트로 값을 전달 할때 사용한다.

- @Output 장식자로 선언한 변수를 EventEmitter 로 초기화한다. 이후 emit()을 사용하여 부모로 이벤트 전달한다.

1) child.ts

- new EventEmitter<boolean> , EventEmitter 객체의 자료형은 boolean을 선언했다.

- boolean 선언으로 emit()의 값을 넘겨줄 때 boolean 으로 넘어가며 받는 컴포넌트(부모)도 동일하게 선언해야 한다

- emit() 를 통해 부모 컴포넌트에 값 전달

- this.outputProperty.emit(this.active)

2) parent.ts

3) parent.html

- 부모 컴포넌트의 값을 자식 컴포넌트가 값을 받을 때는 @Output 장식자로 선언한 변수와 동일한 속성명으로 받는다

블로그 이미지

리딩리드

,
donaricano-btn

effectiveJava - for문보다는 for-each문 사용


1. while 문의 헛점

- 지역변수의 유효범위로 인하여 copy-and-paste 버그의 확률이 높다

- 처음에 설정된 변수 i 를 다음 while 문에도 사용함


2. for, for-each 형태

1) 1.5 이전 버전

2) 배열순회

3) 1.5 이후 권장(컬렉션, 배열 순회)


3. 왜 for-each 인가

- for 문과 성능은 비슷하지만 상황에 따라 나은 성능을 보이기도 한다.

- 중첩 순환문을 만들 시 좋다.(버그 확률을 낮춘다)

- 이중순회 도중 예상된 결과를 반환하지 않는다

- for-each를 사용하여 간결하게 표현


4. for-each 문이 무조건 답은 아니다

1) 필터링

- 특정원소를 삭제한다면 iterator의 remove() 호출해서 삭제해야 하기 때문에 제한된다.

2) 변환

- 원소의 값을 수정한다면 제한된다.

3) 병렬순회

- 병렬순회하거나 첨자를 발맞춰 나간다면 제한된다.


블로그 이미지

리딩리드

,
donaricano-btn

effectiveJava - 지역변수의 유효범위 최소화


1. Tip

- 지역변수를 처음 사용하는 곳에 선언하라

- 지역변수의 유효범위는 선언된 지점부터 해당 블록 끝이다.

- 거의 모든 지역 변수 선언에는 초기값이 포함되어야 한다.

- 메서드의 크기를 줄이고 특정한 기능에 집중하라.


2. 순환문(Loop)을 이용한 지역변수 최소화

- while문 보다는 for문을 사용하여 유효범위를 최소화 할 수 있다.

- 순환변수를 사용하여 순환문안에 지역변수를 최소화 한다.

- n, i 유효범위가 for문 안으로 제한된다. 

블로그 이미지

리딩리드

,