donaricano-btn

함수형에서 for 와 if 의 변화


1. for에서 filter로 if에서 predicate로

1) 기존 문장


2) filter 함수로 변환

 

- 새로운 배열을 생성하여 반환한다.

- predicate 함수를 이용하여 원하는 반환 값을 얻는다.


2. 중복 코드를 map 함수로 제거한다

1) 기존 문장

 

- 새로 만든 배열에서 이름을 추출한다.

2) map 함수로 변환

 

- 코드가 더욱 단순해 졌다. 또한 함수를 합쳐서 실행결과로 바로 실행할 수 있다.


3. 클로저를 이용한 map 함수 줄이기

1) 클로저 함수 패턴

 

2) filter, map, bvalue 

 

- 더욱 간결해 졌다.

블로그 이미지

리딩리드

,
donaricano-btn

클로저란?(Closure)


1. 클로저란?

- 자신이 생성될 떄의 스코프에서 알 수 있었던 변수 중 언젠가 자신이 실행될 때 사용할 변수들만 기억하여 유지시키는 함수


2. 예제

- f7이 변수 a를 기억하는 클로저로 작동하고 있다. f8을 실행 할 때마다 새로운 변수인 b와 함께 실행된다.

블로그 이미지

리딩리드

,
donaricano-btn

생성자의 builder패턴 적용(builder pattern)


1. 생성자의 문제

1) 선택적 인자가 많은 상황에 잘 적응하지 못한다


2. 점층적 생성자 패턴(telescroping constructor pattern)

- 필요한 생성자를 하나씩 추가하는 방식

1) 문제점

- 설정할 필요없는 값(위의 0 같은)을 설정해야한다. 

- 점층적 생성자 패턴은 잘 동작하지만 클라이언트 코드 작성이 어렵고 가독성이 떨어진다.


3. 자바빈 패턴(JavaBeans pattern)

- 인자 없는 생성자를 호출하여 객체를 만든다음 설정 메소드로 필드값을 추가하는 방식

- 사용

1) 문제점

- 1회의 함수 호출로 객체 생성을 끝낼수 없다.(객체의 일관성이 일시적으로 깨진다)

- 변경 불가능 클래스(immutable)를 만들 수 없다.


4. 빌더패턴(builder pattern)

- 점층적 생성자 패턴 + 자바빈 패턴

- 필요한 객체를 직접 생성하는 대신, 클라이언트는 먼저 필수 인자들을 생성자에 전부 전달하여 빌더 객체를 만든다.

- 빌더 객체에 정의된 설정 메소드를 호출하어 선택적 인자를 추가한다.

- 사용

1) 장점

- 불변식(invariant) 적용이 가능하다. build() 해당 불변식이 위반되었는지 검사가 가능하다.

- 여러개의 varargs 인자를 받을 수 있다.

- 유연하다. 하나의 빌더 객체로 여러 객체를 만들 수 있다.

2) 단점

- 객체를 생성하려면 먼저 빌더 객체를 생성해야한다.



블로그 이미지

리딩리드

,
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) 다른 정적 메소드와 확연히 구분되지 않는다


블로그 이미지

리딩리드

,