Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

개발자일기

함수형 프로그래밍 본문

카테고리 없음

함수형 프로그래밍

ka0oll 2021. 2. 7. 21:54

함수형 프로그래밍

가변으로 인해 동시성, 데드락 문제가 발생  -> 불변이 안전하다.

 

함수형 프로그래밍이란?

  • 항상 불변을 추구
  • 함수를 호출시 외부에 영향을 주지 않음(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