Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- bounded context
- redis
- bytecode
- jvm
- rest api
- reflection
- JSON
- Java
- OOP
- mockito
- MSA
- PSA
- JWT
- di
- Generic
- Rest
- Transaction
- *
- ddd
- SOA
- IOC
- spring
- Exception
- 서명
- Spring Data Redis
- AOP
- junit5
Archives
- Today
- Total
개발자일기
함수형 프로그래밍 본문
함수형 프로그래밍
가변으로 인해 동시성, 데드락 문제가 발생 -> 불변이 안전하다.
함수형 프로그래밍이란?
- 항상 불변을 추구
- 함수를 호출시 외부에 영향을 주지 않음(pure 함수)
- 같은 input → 같은 output
가변, 불변을 각각 모듈화하자
- 재 사용성 증가
- 객체지향의 모듈화는 가장 작은 단위의 모듈화가 아님, 함수를 모듈화 할 경우 더 많은 곳에 사용 가능
- 단위가 작다는건 테스트가 용이하다.
저는 객체 + 함수 형 프로그래밍을 추구. 객체지향 프로그래밍을 토대로 함수형 프로그래밍을 한다.
문제 코드
public class Car{
private int position;
private void move(){
boolean canMove = new randomInt() %2 == 1;
if(canMove){
this.position ++;
}
}
}
위 코드의 문제
- 테스트 불가.
- random 제어 불가
- 물론 과도한 mocking 라이브러리를 통해 가능하겠지만 더러워짐
- 랜덤 방식이 아닌 다른 방식을 사용하려면?
- 결국 코드 수정
- ocp 원칙 위배
함수형 프로그래밍 방식으로 해결
해결 코드
public interface CarMovable{
boolean canMove();
}
public class Car{
private int position;
private void move(CarMovable carMovable){
if(carMovable.canMove()){
position ++;
}
}
}
@Test
void test(){
given:
Car car = new Car();
when:
car.move(()->true);
then:
car.position == 1;
}
테스트 + 확장성 해결
Comments