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
- Exception
- Generic
- ddd
- JSON
- junit5
- jvm
- Java
- PSA
- IOC
- Spring Data Redis
- spring
- 서명
- bytecode
- reflection
- OOP
- *
- mockito
- bounded context
- AOP
- SOA
- di
- redis
- JWT
- rest api
- Transaction
- MSA
- Rest
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