ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Enum에 대해서 (3, 마지막)
    프로그래밍 언어/Java 2021. 1. 1. 13:26

    이번 시간에는 Enum으로 계산기를 만들어 보는 과정을 보겠다. 계산기를 구현할 두가지 방법을 비교해 볼텐데

    첫번째는 Calulator라는 interface로 더하기, 빼기, 곱셈, 나누기를 하는 과정을 보고 

    두번째로는 enum으로 더하기, 빼기, 곱셈, 나누기를 하는 과정을 보며 코드량이 얼마나 줄어드는지 확인해보며 enum이 이런 기능도 있구나라는 것을 배워보자.

     

        public interface Calculator {
        	int calculate(int a, int b);
        }
        
        class Plus implements Calculator{
        	@Override
        	public int calculate(int a, int b) {
        		return a + b;
        	}
        }
        
        class Minus implements Calculator{
        	@Override
        	public int calculate(int a, int b) {
        		return a - b;
        	}
        }
        
        class Multiply implements Calculator{
        	@Override
        	public int calculate(int a, int b) {
        		return a * b;
        	}
        }
        
        class Divide implements Calculator{
        	@Override
        	public int calculate(int a, int b) {
        		if(b == 0) 
        			throw new ArithmeticException();
        		return a / b;
        	}
        }

     

    위의 코드를 보면 Calulator라는 인터페이스에 calculate라는 함수를 가지고 각각의 클래스가 Caculator를 구현하여 덧셈, 뺄셈, 곱하기, 나눗셈을 하는 코드이다. 위의 코드는 사실 if문으로도 써질 수 있고 여러가지 방법으로 사용될 수 있다. 하지만 4개의 클래스를 구현해야한다는 것 자체가 상당히 시작하기 싫어지는 이유이다.

     

    그렇다면 위의 코드를 enum class로 구현해 본다면 어떻게 될까?

    public enum Operator {
        	PLUS("더하기", (a, b) -> (a + b)),
        	MINUS("빼기", (a, b) -> (a - b)),
        	MULTIPLY("곱하기", (a, b) -> (a * b)),
        	DIVIDE("나누기", (a, b) -> (a / b));
        
        	private final String name;
        	private final BiFunction<Double, Double, Double> biFunction;
        
        	Operator(String name, BiFunction<Double, Double, Double> biFunction) {
        		this.name = name;
        		this.biFunction = biFunction;
        	}
        
        	public Double calculate(double a, double b) {
        		return this.biFunction.apply(a,b);
        	}
        }

    위의 코드가 Enum class로 사칙연산 계산기를 구현한 코드이다. enum 객체를 만들 때에 익명함수를 넘겨주는 방법이다. 코드가 훨씬 간결해지고 똑같이 사칙연산의 이름이 명시되어 있어 사용하기도 편하다.

     

    사용방법은 다음과 같다.

     

    Operator.PLUS.calculate(1, 2);

    위와 같이 함수를 call해주면 된다. 

     

    사실 코드로 보면 interface로 구현한 것이 더 명시적으로 나눠져있어서 좋아보인다. 그러나 코드량으로 보면 enum class가 훨씬 우위에 있다고 생각되고 사용법만 몸에 익는다면 더욱 빠르게 구현될 것 같다. 하지만 다른 사람들과 코딩을 함께한다고 생각하면 무엇이 좋을지는 잘 모르겠다. 

     

    참고 - velog.io/@kyle/%EC%9E%90%EB%B0%94-Enum-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9

    '프로그래밍 언어 > Java' 카테고리의 다른 글

    Java - String과 String Builder  (0) 2021.01.03
    Java - Stream이란?  (0) 2021.01.03
    Java - Enum에 대해서 (2)  (0) 2021.01.01
    Java - Enum에 대해서  (0) 2021.01.01
    Java - Generic 메소드  (0) 2021.01.01

    댓글

Designed by Tistory.